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