IABHelper. QueryInventoryAsync не возвращает никаких покупок, но запуск потока продукта невозможен с помощью «Item Own Owned»

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

Перед тем, как начать новую покупку, я проверю покупки без покупки с запросомInventoryAsync. Если найдено, я использую любые неиспользованные покупки и начинаю новую транзакцию, если не переходить напрямую, чтобы начать новую транзакцию. 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 марта.

Solutions Collecting From Web of "IABHelper. QueryInventoryAsync не возвращает никаких покупок, но запуск потока продукта невозможен с помощью «Item Own Owned»"

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

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

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

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

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

 adb shell pm clear com.android.vending 

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

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

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