如何区分可消费产品和未消费产品?



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

如何区分易耗品和未消费产品?

耗材被批准与consumeAsync()一起购买,非消耗品被批准与acknowledgePurchase()一起购买。

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

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

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

2. 确认购买 (( 指向非消耗品的 API。它不应该用于消耗品吗?

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

对于易耗品,consumptionAsync(( 采用包含开发人员有效负载字段的 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. 可以限制输入错误的函数的调用吗?

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

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

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

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

到目前为止,我所理解的,

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

消耗品调用 consumptionAsync(( 是删除 Google 端的数据。所以当触发 queryPurchase(( 应该没有记录时。

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

consumptionAsync(( 和 acknowledgePurchase(( 也会将付款设置为 done。如果没有触发其中任何一个,那么它将在 3 天后自动退款。这两个操作也都作为确认付款。

所以对于你的问题

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

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

2. 确认购买 (( 指向非消耗品的 API。它不应该用于消耗品吗?

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

答案可能不正确。只是一些分享。

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

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

最新更新