Библиотека биллинга Google Play 3.0+ - восстановление покупки

С Google Play Billing Library v3.0 + у нас появился новый процесс покупки, и здесь все прекрасно объясняется: Оплата через Google Play

В старых версиях библиотеки мы бы восстановили что-то вроде этого:

bp = new BillingProcessor(this, MERCHANT_ID, new BillingProcessor.IBillingHandler() {
        @Override
        public void onProductPurchased(@NonNull String productId, @Nullable TransactionDetails details) {
            String orderId = details.purchaseInfo.purchaseData.productId;
  // we then compare the orderID with the SKU and see if the user purchased the item,
  // however in the new version of the library there is nothing about restore

Однако в документации нет ничего о восстановлении покупок?

Например, у нас есть вариант использования: у вас есть действующая подписка и один приобретенный вами продукт IAP. Вы удаляете приложение и переустанавливаете его. Как восстановить подписку и этот продукт IAP?


person Adrian Ivasku    schedule 02.02.2021    source источник


Ответы (2)


BillingProcessor и onProductPurchased, похоже, не были частью библиотеки биллинга Play (или AIDL), это больше похоже на класс переноса, реализованный anjlab (https://github.com/anjlab/android-inapp-billing-v3) Чтобы удовлетворить ваши потребности, я думаю queryPurchases и queryPurchaseHistoryAsync может помочь.

person Hanrui    schedule 04.02.2021

В основном queryPurchaseHistoryAsync выполняет эту работу, просто будьте осторожны, чтобы передать SKU TYPE (inapp или sub).

Моя реализация:

fun restorePurchaseInApp() {
    bp.queryPurchaseHistoryAsync("inapp", this)
}

fun restorePurchaseInSubs() {
    bp.queryPurchaseHistoryAsync("subs", this)
}

// bp is BillingClient
// the class should implement PurchaseHistoryResponseListener

override fun onPurchaseHistoryResponse(
    p0: BillingResult,
    p1: MutableList<PurchaseHistoryRecord>?
) {
    if (p1 != null) {
        Log.d("TMS", "onPurchaseHistoryResponse: " + p1.size)
    }

    if (p1 != null) {
        for (item in p1) {
            Log.d("TMS", "onPurchaseHistoryResponse sku: " + item.sku)
            Log.d("TMS", "onPurchaseHistoryResponse signature: " + item.signature)
            Log.d("TMS", "onPurchaseHistoryResponse purchaseToken: " + item.purchaseToken)
            Log.d("TMS", "onPurchaseHistoryResponse purchaseTime: " + item.purchaseTime)
        }
    }
}

Там вы получаете купленные предметы и все :). Я надеюсь, что это поможет, потому что я потерял много времени, выясняя что-то настолько простое, и реализация документации не упоминает об этом.

person Adrian Ivasku    schedule 07.02.2021