Как обрабатывать состояния покупок с помощью записи истории покупок в новой покупке Google In App - PullRequest
2 голосов
/ 21 сентября 2019

Я пытаюсь создать систему восстановления покупки.Я хочу, чтобы пользователь мог получить доступ к купленным продуктам с любого устройства, на котором он / она вошла. Поэтому при запуске приложения я использую метод queryPurchaseHistoryAsync ().Моя проблема начинается здесь.

С новой реализацией Google, В отличие от документации, изменились параметры queryPurchaseHistoryAsync ().Теперь он принимает список объектов PurchaseHistoryRecord в качестве параметра вместо списка объектов Purchase.

Студия Android не может разрешить метод, указанный в документации.С новым queryPurchaseHistoryAsync () я не смог найти способ проверить состояние покупок (если оно было куплено, отменено или ожидает рассмотрения).Что я смог сделать с объектом «Покупка» с помощью метода «purchase.getPurchaseState ()».

Документирование queryPurchaseHistoryAsync ()

billingClient.queryPurchaseHistoryAsync(SkuType.INAPP,
                                         new PurchaseHistoryResponseListener() {
    @Override
    public void onPurchaseHistoryResponse(BillingResult billingResult,
                                          List<Purchase> purchasesList) {
        if (billingResult.getResponseCode() == BillingResponse.OK
                && purchasesList != null) {
            for (Purchase purchase : purchasesList) {
                // Process the result.
            }
         }
    }
});

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

implementation 'com.android.billingclient:billing:2.0.3'

Метод queryPurchaseHistoryAsync () в моем приложении

billingClient.queryPurchaseHistoryAsync(BillingClient.SkuType.INAPP,
                new PurchaseHistoryResponseListener() {
                    @Override
                    public void onPurchaseHistoryResponse(BillingResult billingResult, List<PurchaseHistoryRecord> purchaseHistoryRecordList) {

                        if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK
                                && purchaseHistoryRecordList != null) {

                            for (PurchaseHistoryRecord purchaseHistoryRecord : purchaseHistoryRecordList) {

                                HandleOldGetting(purchaseHistoryRecord.getSku());
                             }
                        }
                    }

Информация о выпуске Google (05-2019):

"Чтобы свести к минимуму путаницу, функция queryPurchaseHistoryAsync () теперь возвращает объект PurchaseHistoryRecord вместо объекта PurchaseОбъект PurchaseHistoryRecord аналогичен объекту Purchase, за исключением того, что он отражает только значения, возвращаемые queryPurchaseHistoryAsync (), и не содержит полей autoRenewing, orderId и packageName. Обратите внимание, что с возвращенными данными ничего не изменилось - queryPurchaseHistoryAsync ()возвращает те же данные, что и раньше. "

Но ни в примечании к выпуску, ни в документации не указано, как проверить состояние покупки с помощью PurchaseHistoryRecord.

Спасибо, что прочитали это, любая помощь приветствуется.

1 Ответ

0 голосов
/ 21 сентября 2019

Насколько я понимаю, использование «queryPurchaseHistoryAsync ()» для восстановления покупок является неправильным.Это не существует для этого.Для восстановления старых покупок следует использовать метод queryPurchases ().

утверждения документации о кеше сбивают с толку, кеш приложения Google Play, связанный с аккаунтом, обновляется для всех устройств.

...