Android при покупке приложения дает BillingResponse.itemAlreadyOwned без PurchaseStatus.purchased - PullRequest
0 голосов
/ 07 мая 2020

Я использую in_app_purchase Flutter plugin для Android покупок в моем приложении Flutter.

Я покупаю, используя _iap.buyConsumable(purchaseParam: purchaseParam) (т.е. autoConsume = true), и подключаюсь, используя _iap.purchaseUpdatedStream.listen для входящих покупок. Если покупка имеет статус PurchaseStatus.purchased, я отправляю ее на сервер и регистрирую эту покупку. Но если в покупке указано PurchaseStatus.pending (это тест Google «Медленная тестовая карта. Снижается через несколько минут»), то я ничего не делаю и жду другого сообщения _iap, но другого сообщения об этой покупке не приходит, но я вижу в Google консоль, что эта покупка отклонена.

Но это не главная проблема. Основная проблема заключается в том, что если пользователь пытается купить тот же товар после сообщения pending о покупке, он не может его купить из-за ошибки BillingResponse.itemAlreadyOwned. Итак, он застрял.

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

final QueryPurchaseDetailsResponse response = await _iap.queryPastPurchases();

response.pastPurchases.forEach((pd) => _iap.consumePurchase(pd) );

это дает:

Ошибка при покупке с токеном. Код ответа: 8

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

...