一次性购买产品的生命周期比订阅产品简单,但您的后端仍需要能够正确处理多个状态和转换事件。
新的一次性产品购买
用户完成计费流程后,您的应用可以通过以下几种方式之一查看有关新购买的信息
- 设置
实时开发者通知
并启用获取订阅和一次性产品的全部通知
以接收有关购买状态的更新。 - 实施来自
BillingClient
的PurchasesUpdatedListener
接口以自动接收购买更新。 - 调用
BillingClient.queryPurchasesAsync()
方法。
收到新购买后,使用 getPurchaseState
方法或 Play 开发者 API 中的 purchases.products.get
来确定新购买的付款状态。
实时开发者通知
当用户购买或取消一次性产品的购买时,Google Play 会发送 OneTimeProductNotification
消息。要更新您的后端购买状态,请使用 OneTimeProductNotification
对象中提供的购买令牌来调用 purchases.products.get
方法。此方法根据购买令牌提供最新的购买和消费状态。
您应该在安全的后台处理与交易相关的 RTDN。
处理已完成的交易
当用户完成一次性产品购买时,Google Play 会发送类型为 ONE_TIME_PRODUCT_PURCHASED
的 OneTimeProductNotification
消息。当您收到此 RTDN 时,请按照 在您的后端处理一次性产品购买 中的说明处理购买。
处理已取消的交易
如果已配置为接收实时开发者通知,则当一次性产品购买被取消时,Google Play 会发送类型为 ONE_TIME_PRODUCT_CANCELED
的 OneTimeProductNotification
消息。例如,如果用户未在规定时间内完成付款,或者购买被开发者或客户请求撤销,则可能会发生这种情况。当您的后端服务器收到此通知时,请调用 purchases.products.get
方法以获取最新的购买状态,然后相应地更新您的后端,包括用户权限。
如果处于 已购买
状态的一次性产品购买获得退款,您还将通过 已作废的购买 API 获知。
在您的后端处理一次性产品购买
无论您是通过 ONE_TIME_PRODUCT_PURCHASED
RTDN 检测到新购买,还是通过 PurchasesUpdatedListener
或在应用的 onResume()
方法中 手动获取购买 在应用内获知,您都必须处理新购买。我们建议您在后端处理购买处理,以提高安全性。
请按照以下步骤处理新的一次性购买
- 查询
purchases.products.get
端点以获取最新的单次购买产品状态。要为购买调用此方法,您需要相应的purchaseToken
,该令牌可以从您的应用或ONE_TIME_PRODUCT_PURCHASED
RTDN 中获取。 - 调用
getPurchaseState()
并确保购买状态为PURCHASED
。 - 验证购买.
- 授予用户访问内容的权限。与购买关联的用户帐户可以通过
obfuscatedExternalAccountId
字段(来自purchases.products.get
)进行识别,如果在进行购买时使用setObfuscatedAccountId()
设置了此字段。- 对于非消耗性产品的购买,请通过调用
purchases.products.acknowledge
方法确认内容已交付。请确保通过检查acknowledgementState
字段来确认购买尚未被确认。 - 如果产品是消耗性的,请通过调用
purchases.products.consume
方法将商品标记为已消耗,以便用户在消耗商品后可以再次购买。此方法还会确认购买。
- 对于非消耗性产品的购买,请通过调用
Play Billing 库中也提供了购买确认和消耗方法,允许您从应用中处理购买,但我们建议您在有后端的情况下在后端处理,以获得更安全的实现。