【问题标题】:How do I distinguish between for consumeable products and for products that aren't consumed?如何区分可消费产品和非消费产品?
【发布时间】:2019-09-23 07:18:53
【问题描述】:

我使用了“com.android.billingclient: billing: 2.0.3”。

如何区分消耗品和非消耗品?

消耗品通过consumeAsync() 批准购买,非消耗品通过acknowledgePurchase() 批准购买。

似乎消耗品和非消耗品是通过是否调用consumeAsync()来区分的。

1.还有其他分类方法吗?

(https://developer.android.com/google/play/billing/billing_library_overview#acknowledge/)

2。 confirmPurchase() 指向非消耗品的 api。不应该用于消耗品吗?

我可以通过这种方式添加开发者工资:

对于消费品,consumeAsync() 采用包含开发人员有效负载字段的 ConsumeParams 对象,如下例所示:

BillingClient client = ...
ConsumeResponseListener listener = ...

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

client.consumeAsync(consumeParams, listener);

对于未使用的产品,acknowledgePurchase() 采用包含开发人员有效负载字段的 AcknowledgePurchaseParams 对象,如下例所示:

BillingClient client = ...
AcknowledgePurchaseResponseListener listener = ...

AcknowledgePurchaseParams acknowledgePurchaseParams =
    AcknowledgePurchaseParams.newBuilder()
        .setPurchaseToken(/* token */)
        .setDeveloperPayload(/* payload */)
        .build();

client.acknowledgePurchase(acknowledgePurchaseParams, listener);

(https://developer.android.com/google/play/billing/billing_library_overview#attach_a_developer_payload)

3。未来是否计划增加消耗品和非消耗品的管理类型?

4.是否会因输入错误的函数而限制调用?

【问题讨论】:

    标签: in-app-billing billing android-billing play-billing-library


    【解决方案1】:

    Google Play 不了解消耗性 SKU 与非消耗性 SKU。只有开发人员具备这些知识。

    如果您希望用户重复购买一个 SKU(如硬币、宝石),那么您可以调用 consumeAsync() 将其从用户的库中删除。如果 SKU 已经在他的库中,Google Play 将不允许用户重新购买该 SKU。因此,您必须使用它(从他的库中删除它)。

    对于其他一些 SKU,例如订阅或免费广告、优质内容解锁、限量商品,如果您希望用户只购买一次,请不要消费。相反,请使用 acknowledgePurchase API。 Google Play 将此作为合同引入,以确保您已将产品授予用户。

    因此,我建议您保留一份消耗品和非消耗品 SKU 的目录。并根据类型调用正确的 Google API。

    【讨论】:

      【解决方案2】:

      就我目前的理解而言,

      非消耗品调用acknowledgePurchase()是在谷歌端设置购买记录为确认,所以当你尝试触发queryPurchase()时,会显示该产品是用确认购买的(解析json数据查看数据)

      consumable 产品调用consumeAsync() 是删除谷歌端的数据。所以什么时候触发 queryPurchase() 应该没有记录。

      为什么消耗品可以再次购买? 因为该记录已从记录中删除。再次触发购买时不会返回错误代码 7 (BILLING_RESPONSE_RESULT_ITEM_ALREADY_OWNED)

      consumeAsync() 和 acknowledgePurchase() 也会将付款设置为完成。如果没有触发其中任何一个,则将在 3 天后自动退款。这两个动作也可以作为确认付款。

      所以对于你的问题

      1.还有其他分类方法吗?

      那些承认的应该是非消耗品,因为消耗品记录应该在成功记录到我们这边后删除。或者如果想分类,也许可以为确认设置开发者有效载荷(设置后无法更改)

      2。 confirmPurchase() 指向非消耗品的 api。不应该用于消耗品吗?

      不,根据您的要求单独使用它

      答案可能不正确。只是一些关于它的分享。

      欢迎回答我的问题也与此相关,确认在服务器端执行

      Server side can do something similar to mobile side comsumeAsync() in Google Billing Library?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-05
        • 1970-01-01
        • 1970-01-01
        • 2018-01-24
        • 2021-04-30
        相关资源
        最近更新 更多