Google Play Billing Library v4 проверка покупок в приложении
Я использую Google Play Billing Library v4 для покупок в приложений Android
(implementation "com.android.billingclient:billing:4.0.0")
Я не нашел никаких методов, которые могут проверить покупку продукта пользователем.
Если пользователь переустановил приложение, как мне проверить и восстановить все покупки в приложении?
Все найденные мной варианты предлагают мне использовать метод API Developer Google Play: Purchases.products.get
Всегда ли для этого требуется сервер?
Во всяком случае, мне это кажется слишком сложным для простой задачи.
Я использовал это решение (anjlab / android-inapp-billing-v3), но эта библиотека больше не поддерживается, и я решил разобраться, как работает биллинг от Google в последней версии.
Я не хотел бы использовать устаревший метод. queryPurchases.
Думаю, и этот метод мне не поможет queryPurchaseHistoryAsync, потому что onPurchaseHistoryResponse возвращает ["productId", purchaseToken", "purchaseTime", "quantity", "developerPayload"] причем последние два параметра могут отсутствовать или иметь значение null (Это я проверил в своем приложений)
Вопрос: Как мне просто реализовать проверку всех моих товаров (3ш) на наличие оплаты пользователем в приложении. Если пользователь переустановил приложение или сменил телефон. Мне нужно восстановить покупки пользователю.
Java
Ответы (1 шт):
При инициализации клиента передается слушатель purchasesUpdatedListener
billingClient = BillingClient.newBuilder(this)
.setListener(purchasesUpdatedListener)
.enablePendingPurchases()
.build();
Ну и сам слушатель
private final PurchasesUpdatedListener purchasesUpdatedListener = new PurchasesUpdatedListener() {
@Override
public void onPurchasesUpdated(@NonNull BillingResult billingResult, @Nullable List<Purchase> purchases) {
if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK
&& purchases != null) {
//обработка покупки
} else if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.ITEM_ALREADY_OWNED) {
//если покупка уже была сделана ранее
//получаем список ранее сделанных покупок
billingClient.queryPurchasesAsync(BillingClient.SkuType.INAPP,
listenerPurchasesResponsAlreadyOwned);
} else if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.USER_CANCELED) {
//здесь можно написать, что мне очень жаль, что покупка была отменена
} else {
}
}
};