У меня есть приложение для Android, где пользователи могут купить 1 продукт inapp, чтобы разблокировать некоторые функции.
Я внимательно прочитал руководство по адресу: https://developer.android.com/google/play/billing/billing_library_overview#java
Я понимаю, что для того, чтобы пользователи могли купить продукт inapp, я должен:
- Получите список доступных SKU (в данном случае это мой единственный продукт inapp), используя вызов
querySkuDetailsAsync()
. Это просто для того, чтобы дважды проверить, что устройство пользователя способно управлять продуктами inapp.
- Показать кнопку «КУПИТЬ», если в результате предыдущего вызова появился SKU (что означает, что локальный экземпляр Google Play на устройстве пользователя может обрабатывать продукты inapp).
- Позвоните
launchBillingFlow()
, передав SKU моего продукта inapp, чтобы инициировать процесс обработки платежей Google (пользовательский интерфейс Google, всплывающее окно с запросом информации о карте и т. Д.)
- Прослушайте ответный звонок
onPurchasesUpdated()
, чтобы получить код возврата (в основном, платеж отклонен, платеж успешен или платеж отменен) и действовать соответствующим образом. В случае успешной оплаты перейдите к проверке подписи токена покупки либо локально (используя локальную копию открытого ключа RSA разработчика Play), либо удаленно на моем защищенном сервере с тем же ключом.
- разблокировать платные функции в моем приложении
Вот где все становится запутанным. С точки зрения документации Google работа выполнена, они объяснили вам, как получить / купить / и проверить платеж пользователя. Однако нигде не объясняется, как запомнить платеж и разблокировать платную функцию при запуске приложения.
В документации указано:
Для получения информации о покупках, которые пользователь совершает из вашего
приложение, вызовите queryPurchases ()
Похоже, что приложению не нужно ничего запоминать, просто позвоните queryPurchases()
при запуске и проверьте, присутствует ли SKU (пользователь уже заплатил за него) или нет (пользователь еще не купил платный). версия приложения).
Таким образом, мое приложение делает именно это, вызывая queryPurchases()
при запуске и проверяет наличие SKU или нет.
Этот метод работает очень хорошо, даже когда приложение запускается в автономном режиме. Однако некоторые пользователи сетуют на то, что иногда приложение не запускается в платном режиме, потому что (я отлаживал код) функция queryPurchases()
не срабатывает (иногда), когда устройство находится в автономном режиме. Может быть, queryPurchases()
вызывает локальный кеш Google Play, который по какой-то причине может потерять отслеживание предыдущих покупок? (очистка кэша и т.д ...)
Каков подходящий способ запоминания пользовательских покупок и включения платных функций при запуске приложения?