订阅购买交易在其生命周期中可能会经历多种不同状态,具体取决于许多因素,包括自动续订行为、付款遭拒情况和开发者管理操作。
处理自动续订型订阅的生命周期
当用户的订阅状态发生更改时,后端服务器会收到 SubscriptionNotification
消息。
如需更新后端中的状态,请使用通知中随附的购买令牌调用 purchases.subscriptionsv2.get
API。此端点会根据购买令牌提供最新的订阅状态,同时被视为订阅管理的可信来源。
购买令牌的有效期是从订阅成功到订阅到期后 60 天。此日期过后,购买令牌不再有效,不能再用于调用 Google Play Developer API。
新自动续订型订阅购买交易
当用户购买订阅时,系统会向您的 RTDN 客户端发送一条类型为 SUBSCRIPTION_PURCHASED
的 SubscriptionNotification
消息。无论您接收此通知或注册新应用内购买交易的方法是通过 PurchasesUpdatedListener
,还是在应用内以 onResume()
方法手动提取购买交易,都应在安全的后端处理新购买交易。为此,请按以下步骤操作:
- 查询
purchases.subscriptionsv2.get
端点,以获取包含最新订阅状态的订阅资源。 - 确保
subscriptionState
字段的值为SUBSCRIPTION_STATE_ACTIVE
。 - 验证购买交易。
- 授予用户对相应内容的访问权限。如要确认与购买交易相关联的用户账号,您可以使用订阅资源中的
ExternalAccountIdentifiers
对象(如果在购买时已使用setObfuscatedAccountId
和setObfuscatedProfileId
设置了标识符)。
Play 结算库还包含用于确认订阅的方法 acknowledgePurchase()
,以及检查确认状态的方法 isAcknowledged()
。不过,我们建议您在后端处理购买交易,以提高安全性。
新购买交易的订阅资源与以下示例类似:
{
"kind": "androidpublisher#subscriptionPurchaseV2",
"startTime": "2022-04-22T18:39:58.270Z",
"regionCode": "US",
"subscriptionState": "SUBSCRIPTION_STATE_ACTIVE",
"latestOrderId": "GPA.3333-4137-0319-36762",
"acknowledgementState": "ACKNOWLEDGEMENT_STATE_PENDING", // need to acknowledge new purchases
"lineItems": [
{
"productId": "sub_variant_plan01",
"expiryTime": next_renewal_date,
"autoRenewingPlan": {
"autoRenewEnabled": true
}
}
],
}
续订
对于非分期付款的自动续订型订阅,系统会在订阅续订时发送 SUBSCRIPTION_RENEWED
通知。对于分期付款订阅,系统会在订阅的结算日期每次扣款时发送 SUBSCRIPTION_RENEWED
通知。确保用户仍有权使用相应的订阅内容,然后使用从 Google Play Developer API 返回的订阅资源中提供的新 expiryTime
来更新订阅状态。订阅资源与以下示例类似:
{
"kind": "androidpublisher#subscriptionPurchaseV2",
"startTime": "2022-04-22T18:39:58.270Z",
"regionCode": "US",
"subscriptionState": "SUBSCRIPTION_STATE_ACTIVE",
"latestOrderId": "GPA.3333-4137-0319-36762",
"acknowledgementState": "ACKNOWLEDGEMENT_STATE_ACKNOWLEDGED",
"lineItems": [
{
"productId": "sub_variant_plan01",
"expiryTime": next_renewal_date,
"autoRenewingPlan": {
"autoRenewEnabled": true
}
}
]
}
您无需确认订阅续订。
宽限期
如果订阅续订出现付款问题,Google 会通知用户,并在订阅到期前的一段时间内定期尝试续订。此恢复续订期可以由宽限期及后续的账号冻结期组成。在宽限期内,用户应仍有权访问其订阅内容使用权。
queryPurchasesAsync()
方法会继续返回处于宽限期的购买交易。如果您的应用仅依赖于 queryPurchasesAsync
来检查用户是否有权访问订阅,则应自动处理宽限期,因为这些订阅会在 Play 结算库中显示为有效。
将订阅状态与后端同步可让您更清楚地了解付款遭拒的情况,并为您提供更多背景信息,助您尽力减少非自愿流失。监听类型为 SUBSCRIPTION_IN_GRACE_PERIOD
的 SubscriptionNotification
消息,以便在用户进入宽限期时收到通知。当用户处于宽限期时,订阅资源包含 autoRenewEnabled = true
。Google Play 会动态扩大 expiryTime
值,直到宽限期届满为止。因为必须等到用户取消订阅或宽限期达到上限时,授权才失效。在此期间,subscriptionState
字段的值为 SUBSCRIPTION_STATE_IN_GRACE_PERIOD
。订阅资源与以下示例类似:
{
"kind": "androidpublisher#subscriptionPurchaseV2",
...
"subscriptionState": "SUBSCRIPTION_STATE_IN_GRACE_PERIOD",
...
"lineItems": [
{
"productId": "sub_variant_plan01",
"expiryTime": timestamp_in_future,
"autoRenewingPlan": {
"autoRenewEnabled": true
}
}
],
}
Play 会在宽限期内通知用户付款遭拒,并提示他们在 Play 商店中修正付款方式问题。当用户进入宽限期时,您还应鼓励用户修正付款方式,以防发生非自愿的付款失败问题。可采用一个简单的方法执行此操作,即使用 In-App Messaging API。如果您在用户打开您的应用时调用此 API,用户会在临时信息条中看到一条告知其付款遭拒的 Play 消息。此消息还包含一个深层链接,以便用户修正 Google Play 中的付款方式。
一旦用户修正了付款方式,订阅就会按其原续订日期续订,而您可以按照续订中的说明处理续订。
如果用户在宽限期内未修正付款方式,那么订阅会进入账号保留状态,而用户会失去使用权。
宽限期访问权限和恢复订阅
图 2 展示了订阅进入宽限期、然后在用户解决付款方式问题后恢复订阅的时间线。宽限期结束后,用户应失去订阅权益并进入账号保留状态。
请务必注意以下几点:
- 在宽限期内,用户应能继续享受订阅权益。
- 如果用户在宽限期内恢复订阅,续订日期不会重置。
- 如果您延长宽限期(例如,从 7 天延长到 14 天),处于宽限期的用户将可以延长享有订阅权益的时间。
- 如果您缩短宽限期,则对于进入旧宽限期的天数已超过新宽限期的用户,其订阅权益将被立即撤消。例如,如果您将宽限期从 14 天缩短到 7 天,则对于处于旧宽限期的第 8-14 天的用户,其订阅权益将被立即撤消。
- 订阅仍处于有效状态,在静默宽限期结束之前,您不会收到宽限期 RTDN
静默宽限期
您可以将宽限期设置为 0 天,但 Play 会至少等待 1 天,以确保有足够的时间重试付款。这段静默宽限期为付款处理提供了保障。在此 24 小时内,订阅会保持 ACTIVE
状态。
如需及时了解订阅状态变化,最好的方式是监听并响应实时开发者通知 (RTDN)。请在 RTDN 时间(而非到期时间)调用 purchases.subscriptionsv2.get()
方法,以获取更准确的订阅状态。
根据 24 小时静默宽限期后的订阅状态,您应该会收到以下通知之一:
SUBSCRIPTION_ON_HOLD
(如果已启用)SUBSCRIPTION_CANCELED
(如果已取消)SUBSCRIPTION_EXPIRED
(如果已过期)SUBSCRIPTION_RENEWED
(如果已成功续订)
您还可以在 24 小时的静默宽限期过后随时调用 subscriptionV2.get()
方法,以获取订阅的最新状态。
账号保留功能
如果订阅续订存在付款问题,在宽限期结束后,系统会开始账号冻结期。当订阅进入账号保留状态后,您应阻止用户访问订阅内容使用权。
在账号冻结期间,您应根据需要处理任何取消、恢复或重新购买订阅的事件,因为当订阅处于冻结状态时,用户可能会做出这些更改。
在用户进入账号保留期时,系统会发送 RTDN 通知,以便您尽快告知他们订阅内容暂时无法访问的原因。可采用一个简单的方法执行此操作,即使用 In-App Messaging API。如果当用户打开应用时调用此 API,用户会在临时信息条中看到一条告知其付款遭拒的消息。此消息还包含一个深层链接,以便用户修正 Google Play 中的付款方式。
如果用户可以在您的应用外访问订阅内容,他们可能会发现自己已在不同平台上失去访问权限。您可能需要向用户发送推送通知或电子邮件,告知用户其订阅已因付款遭拒而失效。
在账号保留期间,queryPurchasesAsync()
方法不会返回订阅,因此,如果应用依赖于此方法显示现有购买交易,则您应默认支持账号保留功能。
利用实时开发者通知,当订阅进入账号保留状态时,您会收到类型为 SUBSCRIPTION_ON_HOLD
的 SubscriptionNotification
。从安全的后端服务器调用 purchases.subscriptionsv2.get
可检索新的订阅信息。在账号保留期间,订阅资源的 expiryTime
设为过去的时间戳,并且subscriptionState
字段设为 SUBSCRIPTION_STATE_ON_HOLD
:
{
"kind": "androidpublisher#subscriptionPurchaseV2",
...
"subscriptionState": "SUBSCRIPTION_STATE_ON_HOLD",
...
"lineItems": [
{
"productId": "sub_variant_plan01",
"expiryTime": timestamp_in_past,
...
}
],
}
要恢复访问权限,用户必须修正其付款方式。Play 会通知用户账号因付款遭拒而处于账号保留状态,而您应鼓励他们修正付款方式。
用户修正其付款方式后,订阅会恢复为活动状态,您随后必须恢复用户对订阅内容的访问权限。在这种情况下,购买令牌与账号保留状态开始之前相同,因为系统正在恢复同一购买交易,并且您会收到类型为 SUBSCRIPTION_RECOVERED
的 RTDN。
对于分期付款订阅,任何一次付款尝试都可能会遭拒并发生退款。
恢复后,Play 结算库会通过 queryPurchasesAsync()
方法再次返回订阅。如果您使用此方法确定用户是否有权访问订阅,则您的应用应自动处理订阅从账号冻结状态的恢复。
监听类型为 SUBSCRIPTION_RECOVERED
的 SubscriptionNotification
消息,以便在订阅已恢复且用户应重新获得访问权限时收到通知。如果您在收到此通知后查询订阅,则 expiryTime
字段会设为将来的时间戳,并且 subscriptionState
字段会再次设为 SUBSCRIPTION_STATE_ACTIVE
:
{
"kind": "androidpublisher#subscriptionPurchaseV2",
...
"subscriptionState": "SUBSCRIPTION_STATE_ACTIVE",
...
"lineItems": [
{
"productId": "sub_variant_plan01",
"expiryTime": next_renewal_date,
...
}
],
}
如果用户在账号保留期结束之前未修正付款方式,系统会改为发送类型为 SUBSCRIPTION_CANCELED
的 RTDN。有关处理取消的说明,请参阅取消。当您查询以这种方式取消的订阅时,返回的 expiryTime
字段会设为过去的时间戳:
{
"kind": "androidpublisher#subscriptionPurchaseV2",
...
"subscriptionState": "SUBSCRIPTION_STATE_CANCELED",
...
"lineItems": [
{
"productId": "sub_variant_plan01",
"expiryTime": timestamp_in_past,
...
}
],
}
您在账号保留期间收到取消通知后,系统会立即发送类型为 SUBSCRIPTION_EXPIRED
的 RTDN,因为用户已失去付费使用权,并因订阅取消而流失。您可以按照常规方式处理这种到期情况。
在原购买交易的账号保留期间,用户可以重新购买订阅方案或您通过应用提供的任何其他方案,从而重新获得访问权限。在这种情况下,系统会签发新的购买令牌,并返回新值,作为代表此新实例的 SUBSCRIPTION_PURCHASED
事件的一部分。
账号保留权限和恢复订阅
图 3 展示了订阅进入账号保留状态、然后在用户解决付款方式问题后恢复订阅的时间线。
与上一个示例类似,图 4 显示了订阅在进入账号保留状态之前先进入宽限期的,然后在处于保留状态时恢复订阅的时间线。
请务必注意以下几点:
- 在订阅进入账号冻结状态前,Google Play 会额外尝试通过付款方式扣款,最多尝试 48 小时。在此期间,用户能继续享受订阅权益。该重试期结束后,订阅会进入账号保留状态,用户应失去订阅权益。
- 当订阅从暂停状态恢复且付款失败时,便会直接进入账号保留状态。
- 如果用户在账号保留期间恢复订阅,则续订日期会重置。
到期
订阅到期后,用户应失去对订阅的访问权限。在这种情况下,系统会发送类型为 SUBSCRIPTION_EXPIRED
的 SubscriptionNotification
消息。当您收到此通知时,应查询 Google Play Developer API,以获取最新的订阅资源。在确认 subscriptionState
为 SUBSCRIPTION_STATE_EXPIRED
后,请移除使用权并在后端中将购买状态注册为无效。订阅资源与以下示例类似:
{
"kind": "androidpublisher#subscriptionPurchaseV2",
...
"subscriptionState": "SUBSCRIPTION_STATE_EXPIRED",
...
"lineItems": [
{
"productId": "sub_variant_plan01",
"expiryTime": expiration_time_in_past,
...
}
],
}
取消
用户可以主动从 Play 订阅中心取消订阅,也可以让订阅自动取消(如果在处于账号保留状态后没有恢复)。开发者还可以通过 purchases.subscriptions.cancel
触发取消操作;取消订阅后,用户仍可继续访问相关内容,直到当前结算周期结束为止。结算周期结束后,访问权限应会被撤消。
取消非分期付款的自动续订型订阅会触发 SUBSCRIPTION_CANCELED
通知。当您收到此通知时,从 Google Play Developer API 返回的订阅资源会把 subscriptionState
字段设置为 SUBSCRIPTION_STATE_CANCELED
,而 expiryTime
字段中会包含用户应失去对订阅的访问权限的日期。如果当天是过去的日期,用户应立即失去使用权。例如,如果用户在账号保留期间因付款遭拒而取消订阅,就可能会发生这种情况。
已取消的购买交易的订阅资源与以下示例类似:
{
"kind": "androidpublisher#subscriptionPurchaseV2",
...
"subscriptionState": "SUBSCRIPTION_STATE_CANCELED",
...
"lineItems": [
{
"productId": "sub_variant_plan01",
"expiryTime": expiration_time,
...
}
],
}
对于分期付款订阅,如果用户在承诺期内仍有待付款,则在用户发起取消时发送 SUBSCRIPTION_CANCELLATION_SCHEDULED
通知。取消请求正在等待处理,将在当前承诺期结束时生效。当您收到此通知时,从 Google Play Developer API 返回的订阅资源会将 subscriptionState 字段设置为 SUBSCRIPTION_STATE_ACTIVE
,因为分期付款订阅在承诺期结束之前仍处于有效状态。不过,存在一个空的 pendingCancellation 对象。系统会发送 SUBSCRIPTION_CANCELED
通知,然后在合约期结束时发送 SUBSCRIPTION_EXPIRED
。
待取消的分期付款订阅购买交易的订阅资源与以下示例类似:
{
"kind": "androidpublisher#subscriptionPurchaseV2",
...
"subscriptionState": "SUBSCRIPTION_STATE_ACTIVE",
...
"lineItems": [
{
"productId": "sub_plan01",
"expiryTime": expiration_time,
"autoRenewingPlan": {
"autoRenewEnabled": true,
"recurringPrice": {
"currencyCode": "USD",
"units": "1",
"nanos": 990000000
},
"installmentDetails": {
"initialCommittedPaymentsCount": 6,
"remainingCommittedPaymentsCount": 5,
"pendingCancellation": {}
...
}
}
}
],
}
您可以查看订阅资源中的 canceledStateContext
字段,了解订阅被取消的原因(例如,订阅是由用户、系统还是您自己取消的)。如果订阅被用户取消,您可以查看 userInitiatedCancellation
字段,以了解用户取消订阅的原因。这有助于制定明智的通信策略。
如果订阅被取消但尚未到期,queryPurchasesAsync()
仍会返回该订阅。您可能需要在应用中显示一条消息,告知用户其订阅已被取消并提供到期日期。
撤消
系统可能会出于各种原因撤消订阅,包括您的后端使用 purchases.subscriptionsv2.revoke
撤消订阅或购买交易被退款。在这种情况下,请立即撤消用户的权限。此时,系统会发送类型为 SUBSCRIPTION_REVOKED
的 SubscriptionNotification
消息。当您收到此通知时,从 Google Play Developer API 返回的订阅资源会把 subscriptionState
字段设置为 SUBSCRIPTION_STATE_EXPIRED
。
已撤消的购买交易的订阅资源与以下示例类似:
{
"kind": "androidpublisher#subscriptionPurchaseV2",
...
"subscriptionState": "SUBSCRIPTION_STATE_EXPIRED",
...
"lineItems": [
{
"productId": "sub_variant_plan01",
"expiryTime": expiration_time,
...
}
]
}
推迟的订阅
需要延长用户使用权的原因有很多。例如,您可能想要将免费访问权限作为一种特别优惠提供给用户,如购买电影时免费一周,或向客户提供免费访问权限以表达善意。您可以使用 Play Developer API 中的 purchases.subscriptions.defer
方法,将自动续订型的下一个结算日期延后。执行此操作时,系统会发送一条类型为 SUBSCRIPTION_DEFERRED
的 SubscriptionNotification
消息。在推迟期内,用户会订阅您的内容并且拥有完全访问权限,但不会被扣款。订阅续订日期会更新以反映新的日期。
对于预付费方案,您可以使用推迟结算 API 来推迟到期时间。
推迟订阅的订阅资源与以下示例类似:
{
"kind": "androidpublisher#subscriptionPurchaseV2",
...
"subscriptionState": "SUBSCRIPTION_STATE_ACTIVE",
...
"lineItems": [
{
"productId": "sub_variant_plan01",
"expiryTime": timestamp_in_future,
...
}
],
}
已暂停的订阅
您可以通过让用户能够暂停订阅来防止主动取消订阅的用户流失。在您启用暂停功能后,用户可以选择暂停订阅一段时间(介于一周到三个月之间),具体取决于订阅的续订周期。
订阅周期 | 每周 | 每月 | 三个月 | 六个月 | 年度 |
---|---|---|---|---|---|
可用的暂停时长* | 1 周 2 周 3 周 4 周 |
1 个月 2 个月 3 个月 |
1 个月 2 个月 3 个月 |
1 个月 2 个月 3 个月 |
不适用 |
只有在当前结算周期结束后,订阅暂停才会生效。订阅暂停后,用户将无法访问订阅,也无需支付续订费用。在暂停期结束时,订阅将恢复,并且 Google 会尝试续订订阅。如果恢复成功,订阅将再次变为活动状态。如果由于付款问题导致恢复失败,用户将进入账号保留状态,如图 5 和图 6 所示:
用户也可以选择在暂停期内随时手动恢复订阅,如图 6 所示。当用户手动恢复订阅时,结算日期将更改为手动恢复日期。
用户的订阅暂停后,Play 结算库不会通过 queryPurchasesAsync()
方法返回订阅。如果恢复了订阅,queryPurchasesAsync()
方法会再次返回订阅。
监听 RTDN,了解用户何时暂停订阅。利用这些通知,还可以在您的应用中通知用户他们已暂停订阅,因而无法访问订阅。您还应使用 Google Play 深层链接来为用户提供一种随时手动恢复订阅的方法。
当用户发起订阅暂停时,系统会发送类型为 SUBSCRIPTION_PAUSE_SCHEDULE_CHANGED
的 SubscriptionNotification
消息。此时,用户应保持对订阅的访问权限,直到下一个续订日期,并且订阅资源包含 autoRenewEnabled = true
。此时,subscriptionState
字段的值为 SUBSCRIPTION_STATE_ACTIVE
。
当暂停生效时,系统会发送类型为 SUBSCRIPTION_PAUSED
的 SubscriptionNotification
消息。此时,用户应失去对订阅的访问权限,并且订阅资源包含 autoRenewEnabled = true
,subscriptionState
字段设为 SUBSCRIPTION_STATE_PAUSED
。您可以通过查看 PausedStateContext
对象来了解订阅预计何时再次续订。
如果在暂停期结束时自动恢复了订阅或用户选择了手动恢复订阅,系统会发送类型为 SUBSCRIPTION_RENEWED
的 SubscriptionNotification
消息。应按照续订中的说明来处理此事件。
如果尝试恢复订阅时付款失败,系统会发送类型为 SUBSCRIPTION_ON_HOLD
的 SubscriptionNotification
消息。应按照账号冻结中的说明来处理此事件。
重新订阅
对于自动续订型订阅基础方案,Google Play 商店可能会显示重新订阅按钮。通过此按钮,用户可以重新获得对订阅的访问权限。此按钮可能会出于各种原因而未显示,例如订阅在很久以前就已到期。
虽然该按钮始终带有重新订阅标签,但其功能取决于订阅状态。
当订阅被取消但尚未到期时,用户仍保持订阅状态并享受订阅权益。如果用户点按“重新订阅”,取消操作会被有效地撤消,订阅会继续续订。此操作在 Play 开发者文档和 API 中被称为“恢复”。
在自动续订型订阅到期后,您可以允许用户购买相同的订阅基础方案。此操作在 Play 开发者文档和 API 中被称为“重新订阅”。您可以在 Play 管理中心内或使用 API 为每个基础方案配置此选项。
在到期之前恢复
如果您的应用仅依赖于 queryPurchasesAsync()
方法来确定用户是否有权访问订阅,则应自动处理恢复,因为 queryPurchasesAsync()
方法会在到期日之前继续返回已取消的购买内容。已恢复的订阅会继续续订,就像未取消过一样。
如果您的应用与后端同步订阅状态,您就应监听类型为 SUBSCRIPTION_RESTARTED
的 SubscriptionNotification
消息。收到此 RTDN 后,您的应用可以对其做出响应,记录订阅现已设为续订,并停止在您的应用中显示恢复消息。订阅资源与下面的内容类似:
{
"kind": "androidpublisher#subscriptionPurchaseV2",
...
"subscriptionState": "SUBSCRIPTION_STATE_ACTIVE",
...
"lineItems": [
{
"productId": "sub_variant_plan01",
"expiryTime": next_renewal_date
...
}
],
}
在到期后重新订阅
如果使用 Google Play 管理中心或 API 将自动续订型基础方案配置为允许重新订阅,用户就可以在 Google Play 商店中重新购买已到期的订阅。
这些是新的购买交易。Google Play 会签发全新的购买令牌,而您的后端会收到类型为 SUBSCRIPTION_PURCHASED
的 RTDN。在这种情况下,此类应用外购买交易的状态不包含与原始购买交易关联的 linkedPurchaseToken
,因为原始订阅已完全到期。这些是新的购买交易,您的后端必须像对待任何其他购买交易一样加以处理和确认。
升级、降级和重新订阅
如果用户升级、降级或在订阅到期之前从应用中取消后又订阅,旧订阅会失效,并且新订阅会通过新的购买令牌创建。
此外,订阅资源从 Google Play Developer API 返回的这个网页中包含linkedPurchaseToken
表示用户升级、降级或重新订阅时所基于的旧购买交易的字段。您可以在该字段中使用购买令牌查找旧订阅并识别现有用户账号,以便将新购买交易与同一账号关联。
在应用中向用户提供升级、降级或重新订阅选项之前,您必须确认现有订阅。如果现有订阅正在等待确认,任何方案更改或重新订阅操作都会被阻止。
如果用户通过购买交易成功升级/降级了订阅或重新订阅,这就是一笔您必须确认的新购买交易。建议您使用 Google Play Developer API 进行确认。订阅资源与以下示例类似:
{
"kind": "androidpublisher#subscriptionPurchaseV2",
...
"subscriptionState": "SUBSCRIPTION_STATE_ACTIVE",
"linkedPurchaseToken": old_purchase_token,
...
"lineItems": [
{
"productId": "sub_variant_plan01",
"expiryTime": next_renewal_date,
"autoRenewingPlan": {
"autoRenewEnabled": true
}
}
],
}
价格变动
请参阅价格变动最佳做法指南,了解如何更改自动续订价格并在适当情况下通知用户。
当价格变动作为旧式订阅应用到现有订阅者时,如果用户采取措施确认或拒绝新价格,您将收到 RTDN。
处理用户对选择接受价格变动的确认
当用户接受订阅价格上调时,您会收到类型为 SUBSCRIPTION_PRICE_CHANGED_CONFIRMED
的 SubscriptionNotification
消息。如果取消价格下调,或者在订阅价格上调后续订,您会收到类型为 SUBSCRIPTION_RENEWED
的 SubscriptionNotification
消息。将此通知视为其他任何续订。
处理用户选择不接受价格上调的情况
如果用户未在需要以更高价格续订之前选择接受价格上调,则会自动退订,并且您会收到 SUBSCRIPTION_CANCELED
类型的 SubscriptionNotification
。可以按照取消部分的说明来处理此事件。
用户也可以按照同样的机制取消订阅,以免价格上调。
处理预付费方案的生命周期
与自动续订型订阅一样,您必须在每次新购买后确认预付费方案。对于预付费方案,您必须同时处理初始购买交易和所有充值交易,因为用户每次都必须完成购买流程。
由于预付费方案的时长有可能比较短,因此请务必尽快确认购买交易。时长为一周或更长时间的预付费方案必须在三天内确认。对于时长不到一周的预付费方案,其确认时间不得晚于方案时长过半之时。例如,开发者必须在 1.5 天内确认购买时长为三天的预付费方案。
每当购买预付费方案订阅(包括每次充值)时,系统都会向您的 RTDN 客户端发送类型为 SUBSCRIPTION_PURCHASED
的 SubscriptionNotification
消息。调用 purchases.subscriptionsv2.get
方法可检查最新的预付费方案订阅状态。
系统会针对充值购买交易发放新的购买令牌,并且作为新订阅购买状态的一部分,您会在 linkedPurchaseToken
字段中收到之前的购买令牌。购买令牌的有效期是从订阅成功到订阅到期后 60 天。此日期过后,购买令牌不再有效,不能再用于调用 Google Play Developer API。
预付费方案购买的订阅资源与以下示例类似:
{
"kind": "androidpublisher#subscriptionPurchaseV2",
"startTime": "2022-04-22T18:39:58.270Z",
"regionCode": "US",
"subscriptionState": "SUBSCRIPTION_STATE_ACTIVE",
"latestOrderId": "GPA.3333-4137-0319-36762",
"acknowledgementState": "ACKNOWLEDGEMENT_STATE_ACKNOWLEDGED",
"lineItems": [
{
"productId": "prepaid_plan01",
"expiryTime": expiry_date,
"prepaidPlan": {
"allowExtendAfterTime": timestamp_after_which_topups_are_allowed
}
}
]
}
您可以在 expiryTime
字段中查看使用权何时结束。充值购买通过累积使用权来增加权限有效期。这意味着,如果用户在初始使用权结束之前充值,系统会在其先前的到期日期之前添加新时间。
您可能需要在应用中显示一条消息,告知用户可通过充值来续订他们的预付费订阅。如需了解用户何时能够充值,请查看订阅资源中的 allowExtendAfterTime
字段。
预付费方案不会自动续订,因此无法取消。如果用户想要取消预付费方案,则可以让其到期。