0

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

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

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

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

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

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

2. acknowledgePurchase() 指向非消耗品的api。它不应该用于消费品吗?

我可以通过这种方式添加开发人员paylaod:

对于消耗品,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. 是否会因输入错误的函数而限制调用?

4

2 回答 2

2

Google Play 不了解消耗性 SKU 与非消耗性 SKU。只有开发人员有这方面的知识。

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

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

因此,我会说在您身边保留一份消耗品、非消耗品 SKU 的目录。并根据类型,调用正确的 Google 的 API。

于 2019-11-07T07:07:08.083 回答
0

就我目前所了解的,

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

消耗品调用consumeAsync()是删除谷歌端的数据。所以当触发 queryPurchase() 应该没有记录。

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

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

所以对于你的问题

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

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

2. acknowledgePurchase() 指向非消耗品的api。它不应该用于消费品吗?

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

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

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

服务器端可以在谷歌计费库中做类似于移动端 comsumeAsync() 的事情吗?

于 2019-09-27T08:54:47.787 回答