添加一次性商品专用功能

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

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 发送成功的消耗响应之前不让用户消耗所购商品,那么您必须非常小心,不要忘记跟踪消耗请求后的购买交易。

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

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

后续步骤

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