一次性购买生命周期

一次性购买产品的生命周期比订阅产品简单,但您的后端仍然需要能够正确处理多个状态和转换事件。

图 1 一次性购买的生命周期状态和转换事件。

新的的一次性产品购买

用户完成计费流程后,您的应用可以通过以下几种方式之一查看有关新购买的信息

收到新购买后,使用 getPurchaseState 方法或 Play 开发者 API 中的 purchases.products.get 来确定新购买的付款状态。

实时开发者通知

当用户购买或取消一次性产品的购买时,Google Play 会发送 OneTimeProductNotification 消息。要更新您的后端购买状态,请使用 OneTimeProductNotification 对象中提供的购买令牌来调用 purchases.products.get 方法。此方法根据购买令牌提供最新的购买和消费状态。

您应该在安全的后台处理与交易相关的 RTDN。

处理已完成的交易

当用户完成一次性产品购买时,Google Play 会发送类型为 ONE_TIME_PRODUCT_PURCHASEDOneTimeProductNotification 消息。收到此 RTDN 后,请按照 在后端处理一次性产品购买 中所述处理购买。

处理已取消的交易

当一次性商品购买被取消时,如果您已配置接收实时开发者通知,Google Play 会发送一个类型为ONE_TIME_PRODUCT_CANCELEDOneTimeProductNotification消息。例如,如果用户未在规定时间内完成付款,或者购买被开发者或客户请求撤销,则可能会发生这种情况。当您的后端服务器收到此通知时,请调用purchases.products.get方法获取最新的购买状态,然后相应地更新您的后端,包括用户权限。

如果处于Purchased状态的一次性商品购买获得退款,您也会通过无效购买 API获知。

在您的后端处理一次性商品购买

无论您是通过ONE_TIME_PRODUCT_PURCHASED RTDN 检测到新的购买,还是通过PurchasesUpdatedListener或在应用的onResume()方法中手动获取购买在应用内获知,您都必须处理新的购买。我们建议您在后端处理购买,以提高安全性。

按照以下步骤处理新的单次购买

  1. 查询purchases.products.get端点以获取最新的单次商品购买状态。要为购买调用此方法,您需要相应的purchaseToken,该令牌可以来自您的应用或ONE_TIME_PRODUCT_PURCHASED RTDN。
  2. 调用getPurchaseState()并确保购买状态为PURCHASED
  3. 验证购买.
  4. 授予用户访问内容的权限。与购买关联的用户帐户可以通过purchases.products.get中的obfuscatedExternalAccountId字段进行识别,如果在进行购买时使用setObfuscatedAccountId()设置了此字段。
    1. 对于非消耗性商品购买,请通过调用purchases.products.acknowledge方法确认内容的交付。请确保通过检查acknowledgementState字段来确保购买之前尚未确认。
    2. 如果商品是消耗性的,请通过调用purchases.products.consume方法将商品标记为已消耗,以便用户在消耗商品后可以再次购买。此方法还会确认购买。

Play Billing 库中还提供了购买确认和消耗方法,允许您从应用中处理购买,但如果您有后端,我们建议您在后端处理购买,以便实现更安全的实施。