Play In-app Billing v3 - Должен ли я сохранять токены покупки?

поэтому я пишу приложение для Android со специальной валютой в приложении. Вы можете купить эту валюту в пакетах 1, 5, 10 и т.д. Через биллинг в приложении. Вот как я его реализовал:

  • Использование управляемых продуктов (Когда приложение запускается, я использую IabHelper для запроса приобретенных продуктов)

  • Как только покупка завершается, используйте покупку

  • Когда потребление заканчивается, отправьте маркер покупки на сервер
  • Сервер проверяет API-интерфейс воспроизведения, а затем создает учетную запись с валютой

Мой вопрос в том, что, если шаг 3 терпит неудачу? Если соединение будет отключено или что-то еще, токен покупки никогда не попадет на мой сервер. В этом случае пользователи будут платить за валюту, но их учетная запись не получит ее. Когда мое приложение снова запустится, а 1a запустится, оно не найдет покупку, и оно не будет повторно потреблять его.

Правильно ли это рассуждение? Если да, мне нужно хранить токены покупки на стороне Android? Тогда, если что-то не удается, я продолжаю повторять попытку, пока это не сработает? Кажется, что это беспорядочно... Я также думал о создании "Страницы моих покупок", где вы могли видеть все свои покупки, а затем щелкнуть их, чтобы выкупить его, если по какой-то причине не удалось выполнить шаг 3.

Ответ 1

Вы должны сохранить purchaseToken на своем сервере. Для этого есть две причины:

  • блокировать повторные покупки
  • отслеживать потребляемые покупки

Сценарий для покупки должен выглядеть следующим образом:

  • Отправить покупку на ваш сервер
  • Сохранить purchaseToken
  • Увеличить баланс пользователя (виртуальная валюта)
  • Отправить информацию о успешной работе

Как только вы получили успешный ответ от вашего бэкэнд, вы должны использовать этот элемент на стороне Android. Если вы уже добавили виртуальную валюту на свой сервер (без использования элемента), вы также должны вернуть успешный ответ, чтобы элемент был потреблен без увеличения пользовательского баланса.

Имейте в виду, что очень легко повторить ту же самую покупку, даже если она уже была потреблена, поэтому purchaseToken должна быть проверена каждый раз на вашем сервере. Если он уже существует в вашей БД, просто не увеличивайте виртуальную валюту.