Подтвердить что ты не робот

IABHelper. queryInventoryAsync не возвращает никаких покупок, но поток продукта запуска не работает с "Item Own Owned"

Я столкнулся с проблемой прерывания работы с версией 3 биллинга приложений с помощью IABHelper, предоставленной Google.

Перед тем, как начать новую покупку, я проверяю покупки без покупки с queryInventoryAsync. Если найдено, я использую любые неиспользованные покупки и начинаю новую транзакцию, если не переходить напрямую, чтобы начать новую транзакцию. 99% времени он отлично работает.

Иногда, когда queryInventoryAsync не возвращает неиспользуемые покупки, следующий сбой запускает с помощью Response: 7: Item уже принадлежит.

INFO    [IABHelper] Starting async operation: refresh inventory
INFO    [IABHelper] Querying owned items, item type: inapp
INFO    [IABHelper] Package name: jp.co.mycompany.myapp
INFO    [IABHelper] Calling getPurchases with continuation token: null
INFO    [IABHelper] Owned items response: 0
INFO    [IABHelper] Continuation token: null
INFO    [IABHelper] Querying SKU details.
INFO    [IABHelper] queryPrices: nothing to do because there are no SKUs.
INFO    [IABHelper] Querying owned items, item type: subs
INFO    [IABHelper] Package name: jp.co.mycompany.myapp
INFO    [IABHelper] Calling getPurchases with continuation token: null
INFO    [IABHelper] Owned items response: 0
INFO    [IABHelper] Continuation token: null
INFO    [IABHelper] Querying SKU details.
INFO    [IABHelper] queryPrices: nothing to do because there are no SKUs.
INFO    [IABHelper] Ending async operation: refresh inventory

INFO    [IABHelper] Constructing buy intent for jp.co.mycompany.myapp.myitem, item type: inapp
INFO    [IABHelper] Launching buy intent for jp.co.mycompany.myapp.myitem Request code: 1001
INFO    [IABHelper] Ending async operation: launchPurchaseFlow
INFO    [IABHelper] Purchase canceled - Response: 7:Item Already Owned

queryInventoryAsync говорит, что пользователь не владеет этим элементом, но launchPurchaseFlow говорит, что пользователь делает.

Странно после ожидания (иногда несколько минут, иногда больше) проблема решает сам.

Кто-нибудь испытал что-то подобное?

Для справки я использую версию IABHelper, обновленную 15 марта.

4b9b3361

Ответ 1

Очистите кеш приложения Google Play Service на мобильном устройстве. Это может сработать для вас.

Ответ 2

Я уверен, что такая ситуация указывает на ошибку в вашем приложении, но даже несмотря на то, что IAP Google также является одним из факторов, которые вызывают проблему.

Рассмотрим такую ​​ситуацию: пользователь покупает элемент, обрабатывая его на своем сервере, а затем приложение падает до того, как элемент был израсходован. Пользователь возвращается к приложению, вы пытаетесь обработать элемент еще раз, но IAP возвращает пустой Inventory (вообще никаких покупок). Пользователь нажимает на элемент для покупки, но получает ITEM_ALREADY_OWNED. Это странно?!

Итак, нет покупки, но товар уже принадлежит, да? Это наверняка что-то с локальным кешированием на стороне IAP Google, но это ваше приложение, вызвавшее эту проблему (сбой приложения). Вы можете подождать несколько часов, но в большинстве случаев это не решит сам.

Существует два возможных решения. Первый из них хорош для разработчиков, что позволит очистить данные Google IAP.

adb shell pm clear com.android.vending

Через несколько секунд вы снова сможете приобрести элемент.

Второе решение плохо для разработчиков или конечных пользователей. Необходимо перезапустить устройство. После перезагрузки подождите 20 с - 5 минут, и ваш товар будет доступен для покупки снова. Если на вашем клиентском устройстве возникла такая ситуация, попросите его либо очистить данные Play Store вручную, либо перезагрузить устройство.

Помните , основная причина - сбой в вашем приложении, который путается с потоком покупок IAP до того, как элемент будет потреблен. Исправьте его, и проблема больше не будет возникать.