Запросите покупки InApp в моем приложении для Android - PullRequest
0 голосов
/ 15 января 2019

У меня есть приложение для 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, который по какой-то причине может потерять отслеживание предыдущих покупок? (очистка кэша и т.д ...)

Каков подходящий способ запоминания пользовательских покупок и включения платных функций при запуске приложения?

Ответы [ 2 ]

0 голосов
/ 25 января 2019

Вы можете сохранить свой собственный «кеш» (SharedPreferences или БД) с результатами onPurchasesUpdated и использовать queryPurchaseHistoryAsync. При первом запуске приложения вы можете отобразить платный контент, если ваш кеш сообщает, что пользователь приобрел продукт, и одновременно позвоните по номеру queryPurchaseHistoryAsync, чтобы получить самую последнюю покупку, сделанную пользователем для каждой SKU, когда onPurchaseHistoryResponse вы можете обновите кеш и скройте платный контент, если покупка истекла.

Примите также во внимание, что в целях безопасности рекомендуется пройти проверку покупок на вашем бэкэнде.

Если вы не хотите управлять своим собственным сервером, возможно, стоит использовать такой инструмент, как RevenueCat , который предлагает серверную покупку / подписку как услугу.

0 голосов
/ 15 января 2019

Как часто это происходит? Я полагаю, что клиент Google Play заботится о кэшировании, поэтому нет прямого способа справиться с этим, если вы просто полагаетесь на эту услугу. Это может вызвать проблемы, если пользователи переустанавливают или меняют свои устройства.

Другой подход - создать свой собственный бэкэнд, который будет необходим, если вы все равно захотите расширить свое приложение.

...