我在应用程序结算中实现了android系统,将其上载到开发人员控制台中以进行Alpha测试,创建了一项(高级产品一次性产品)并在我的设备上进行了测试。一切正常,但是我想使用同一台设备进行第二次测试-是否可以撤消购买?
我尝试过的:
首先,我认为它可以正常使用,并且BillingClient.queryPurchases()。getPurchaseList没有返回任何购买,并且我的应用程序行为正确更改为基本版本。但是,如果我尝试再次购买该商品以再次测试购买流程,则会显示“商品已拥有”。有没有可能再次测试?
我绝对不理解的另一件奇怪的事情:我什么也没做,几个小时后再次打开我的应用程序,它再次被标记为高级。这意味着什么?测试帐户有问题吗?还是在实际(取消)购买中也会发生这种情况?
非常感谢您的帮助!
答案 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重新同步,它就会记住与当前用户帐户相关的购买。