Если вы хотите разрешить покупку предмета несколько раз (то есть в игровой валюте), вы должны использовать его перед повторной покупкой, в противном случае библиотека 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, она запомнитпокупки, связанные с учетной записью текущего пользователя.