我使用了“ com.android.billingclient:帐单:2.0.3”。
如何区分消耗品和不消费品?
消费品获准与consumeAsync()
一起购买,非消费品获准与acknowledgePurchase()
一起购买。
似乎可消费产品和非可消费产品是通过是否调用preventAsync()来分类的。
1。还有其他分类方法吗?
(https://developer.android.com/google/play/billing/billing_library_overview#acknowledge/)
2。 acceptPurchase()指向非消耗性产品的api。它不应该用于消费品吗?
我可以通过以下方式添加开发人员薪水:
对于易耗品,consumeAsync()包含一个ConsumeParams对象,该对象包含开发人员有效负载字段,如以下示例所示:
BillingClient client = ...
ConsumeResponseListener listener = ...
ConsumeParams consumeParams =
ConsumeParams.newBuilder()
.setPurchaseToken(/* token */)
.setDeveloperPayload(/* payload */)
.build();
client.consumeAsync(consumeParams, listener);
对于未消费的产品,acceptPurchase()接受一个AcknowledgePurchaseParams对象,该对象包含开发人员有效负载字段,如以下示例所示:
BillingClient client = ...
AcknowledgePurchaseResponseListener listener = ...
AcknowledgePurchaseParams acknowledgePurchaseParams =
AcknowledgePurchaseParams.newBuilder()
.setPurchaseToken(/* token */)
.setDeveloperPayload(/* payload */)
.build();
client.acknowledgePurchase(acknowledgePurchaseParams, listener);
3。您是否打算将来为消耗品和非消耗品添加管理类型?
4。可以限制键入错误的函数的调用吗?
答案 0 :(得分:0)
就目前为止我所了解的,
非消耗产品调用cknowledgePurchase()会将购买记录设置为在Google端已确认,因此当您尝试触发queryPurchase()时,它将显示已购买已确认的产品(解析json数据以查看数据)
消费产品调用ConsumerAsync()用于删除Google端的数据。因此,当触发queryPurchase()时,将没有任何记录。
为什么消费品可以再次购买? 因为记录ady已从记录中删除。再次购买触发器时,不会返回错误代码7(BILLING_RESPONSE_RESULT_ITEM_ALREADY_OWNED)
消耗Async()和conceptPurchase()都将付款设置为完成。如果未触发任何人,则3天后它将自动退款。这两个动作也都可以作为确认付款的方式。
所以你的问题
1。还有其他分类方法吗?
那些公认的产品应该是非消耗性产品,因为在成功记录到我们这边之后,应删除消耗性产品记录。或者,如果要分类,可以为确认设置开发人员有效负载(设置后不能更改)
2。 acceptPurchase()指向非消耗性产品的api。它不应该用于消费品吗?
否,请根据您的要求单独使用
答案可能不正确。只是一些分享。
欢迎回答我的问题,与此相关,确认在服务器端执行
Server side can do something similar to mobile side comsumeAsync() in Google Billing Library?
答案 1 :(得分:0)
相对于非消耗性SKU,Google Play不了解其消耗性SKU。只有开发人员才有此知识。
如果您希望用户重复购买一个SKU(例如硬币,宝石),则可以调用consumpAsync()将其从用户库中删除。如果SKU已存在于他的书架中,则Google Play将不允许用户重新购买该SKU。因此,您必须使用它(将其从他的库中删除)。
对于其他一些SKU,例如订阅或免费广告,高级内容解锁,有限项,如果您希望用户只购买一次,则不要消费。而是使用acceptPurchase API。 Google Play将此合同作为一项合同,以确保您已将产品授予用户。
因此,我想说的是在您身边保留消耗品,非消耗品SKU的目录。然后根据类型,调用正确的Google API。