Возврат покупателю покупки в приложении, но BillingClient по-прежнему указывает, что пользователь приобрел? - PullRequest
3 голосов
/ 14 июня 2019

Я использую следующее BillingClient.

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

Хотя я выдал возврат, как показано ниже

enter image description here

Но я все еще получаю следующий ответ от BillingClient.queryPurchases

{
  "orderId": "GPA.3352-2555-5719-25534",
  "packageName": "com.yocto.wenote",
  "productId": "note_list_promo",
  "purchaseTime": 1560501011137,
  "purchaseState": 0,
  "purchaseToken": "djjneabakdaenkjafajbbclo.AO-J1OzbDNn5WkobYbSqLNzoBokm1F552-CqzfLQuNXK69bhxC-TnOTqdPV1RCl9T2okpSWfRD9RrE0eFhSN8glUbsOM5XUBDRnm_yK2Ohq_uyNuU17i1dc3CBhdeEn9uZCIfD3zY4tF"
}

В соответствии с документацией BillingClient.queryPurchases

Получить информацию о покупках для всех предметов, купленных вваше приложение.Этот метод использует кэш приложения Google Play Store без инициирования сетевого запроса.

Возможно, причина в этом.Я пытаюсь с другой функцией - queryPurchaseHistoryAsync тоже не поможет.В соответствии с документацией

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

ДляqueryPurchaseHistoryAsync, нет purchaseState, чтобы указать, что следующая покупка отменена!

{
  "productId": "note_list_promo",
  "purchaseToken": "djjneabakdaenkjafajbbclo.AO-J1OzbDNn5WkobYbSqLNzoBokm1F552-CqzfLQuNXK69bhxC-TnOTqdPV1RCl9T2okpSWfRD9RrE0eFhSN8glUbsOM5XUBDRnm_yK2Ohq_uyNuU17i1dc3CBhdeEn9uZCIfD3zY4tF",
  "purchaseTime": 1560501011137,
  "developerPayload": null
}

Google действительно должен предоставить не кэшированную версию queryPurchases.

Есть идеи, что я сделал не так?Я не хочу, чтобы пользователи могли продолжать пользоваться платными функциями после того, как я произвел возврат.

1 Ответ

1 голос
/ 23 июня 2019

Мы очищаем кеш следующим образом

private static void clearGooglePlayStoreBillingCacheIfPossible(BillingClient billingClient) {
    billingClient.queryPurchaseHistoryAsync(SkuType.INAPP, (responseCode, purchasesList) -> {
    });

    billingClient.queryPurchaseHistoryAsync(SkuType.SUBS, (responseCode, purchasesList) -> {
    });
}

После этого мы будем вызывать BillingClient.queryPurchases как обычно.

Обратите внимание, что очистка кеша происходит не сразу.Очистка кэша может занять до 24 часов.Как ни странно, это важное требование никак не задокументировано.

...