在应用程序结算中:是否可以撤消购买?

时间:2019-06-21 13:19:46

标签: android in-app-purchase in-app-billing

我在应用程序结算中实现了android系统,将其上载到开发人员控制台中以进行Alpha测试,创建了一项(高级产品一次性产品)并在我的设备上进行了测试。一切正常,但是我想使用同一台设备进行第二次测试-是否可以撤消购买?

我尝试过的:

  • 我在开发者控制台中取消了购买的商品->我的设备上没有任何反应,BillingClient.getPurchaseList仍退回了我的高级购买商品
  • 我用广告命令“ adb shell pm clear com.android.vending”->清除了缓存,现在变得很奇怪:

首先,我认为它可以正常使用,并且BillingClient.queryPurchases()。getPurchaseList没有返回任何购买,并且我的应用程序行为正确更改为基本版本。但是,如果我尝试再次购买该商品以再次测试购买流程,则会显示“商品已拥有”。有没有可能再次测试?

我绝对不理解的另一件奇怪的事情:我什么也没做,几个小时后再次打开我的应用程序,它再次被标记为高级。这意味着什么?测试帐户有问题吗?还是在实际(取消)购买中也会发生这种情况?

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

如果您想允许多次购买某项物品(即游戏中的货币),则应在再次购买之前先将其消耗掉,否则IAB库将返回"Item already owned"错误。

要重置购买,您可以使用BillingClient#consumeAsync(String purchaseToken)

要获取购买的purchaseToken,请使用BillingClient#queryPurchaseHistoryAsync,这将返回当前购买的列表。

如果您想将所有购买的商品用于调试目的,则可以使用以下代码:

client.queryPurchaseHistoryAsync(BillingClient.SkuType.INAPP, new PurchaseHistoryResponseListener() {
                    @Override
                    public void onPurchaseHistoryResponse(int responseCode, List<Purchase> purchasesList) {
                        if (purchasesList != null && !purchasesList.isEmpty()) {
                            for (Purchase purchase : purchasesList) {
                                client.consumeAsync(purchase.getPurchaseToken(), new ConsumeResponseListener() {
                                    @Override
                                    public void onConsumeResponse(int responseCode, String purchaseToken) {
                                        if (responseCode == BillingResponse.OK) {
                                          //Item consumed, you may repurchase it now
                                        } else {
                                            // Error, item not consumed. See responseCode for more info
                                        }
                                    }
                                });
                            }
                        }
                    }
                });

尝试清除缓存不会解决该问题,因为一旦IAP库与GPlay重新同步,它就会记住与当前用户帐户相关的购买。

相关问题