添加一次性商品专用功能

本文档介绍了如何实现一次性商品专用功能。

Google Play 结算服务支持以下类型的一次性商品:

  • 非消耗型一次性商品 - 是指能够永久有效的商品,如支持付费升级的商品。为避免用户重新购买此类商品,您不应将它们指示为正在消耗。

  • 消耗型一次性商品 - 是指暂时享用并且可以重新购买的商品,如额外的游戏代币或游戏生命。要使消耗型一次性商品可供再次购买,您需要向 Google Play 发送消耗请求。

表明某件一次性商品已被消耗

要表明某件一次性商品已被消耗,请在 BillingClient 实例上调用 consumeAsync(),并添加 Google Play 应在用户重新购买时提供的购买令牌。您还必须传递一个实现 ConsumeResponseListener 接口的对象。该对象用于处理消耗操作的结果。您可以替换 ConsumeResponseListener 接口的 onConsumeResponse() 方法,Google Play 结算库会在消耗操作完成时调用该方法。

购买交易成功完成后,系统会生成购买令牌,它是一个唯一标识符,表示用户已购买的单件应用内商品。您还可以通过对 Purchase 对象调用 getPurchaseToken() 来检索关联的令牌。

以下示例展示了如何使用关联的购买令牌来消耗商品:

Kotlin

val consumeParams =
    ConsumeParams.newBuilder()
        .setPurchaseToken(/* token */)
        .setDeveloperPayload(/* payload */)
        .build()

billingClient.consumeAsync(consumeParams, { billingResult, outToken ->
    if (billingResult.responseCode == BillingResponse.OK) {
        // Handle the success of the consume operation.
        // For example, increase the number of coins inside the user's basket.
    }
})

Java

ConsumeParams consumeParams =
    ConsumeParams.newBuilder()
        .setPurchaseToken(/* token */)
        .setDeveloperPayload(/* payload */)
        .build();

ConsumeResponseListener listener = new ConsumeResponseListener() {
    @Override
    public void onConsumeResponse(BillingResult billingResult, String outToken) {
            if (billingResult.getResponseCode() == BillingResponse.OK) {
                // Handle the success of the consume operation.
                // For example, increase the number of coins inside the user's basket.
    }
};

billingClient.consumeAsync(consumeParams, listener);

由于消耗请求偶尔会失败,因此您必须检查安全的后端服务器,以确保所有购买令牌都未被使用过。您也可以在收到 Google Play 发来的成功消耗响应后再配置商品。如果您选择在 Google Play 发来成功消耗响应之前不让用户消耗所购商品,请务必时刻跟踪消耗请求发出后相应商品的情况。

针对一次性商品实现促销活动

利用促销活动或促销代码,您可以向数量有限的用户提供免费试用一次性商品或订阅的机会。要为一次性商品实现促销代码,请参阅实现促销活动

后续步骤

添加一次性商品专用功能后,请参阅最佳做法