Учет покупок в приложении офлайн + удаление отмененных покупок - PullRequest
0 голосов
/ 26 мая 2020

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

Многим обсуждениям Stack Overflow уже более двух лет, они неубедительны и ссылаются на устаревшую библиотеку AIDL, а не на платежную службу Google Play.

Я хочу убедиться, что у пользователя есть автономный доступ к премиум-версии моего Android приложения, которое было приобретено с помощью одноразового нерасходуемого продукта внутри приложения в Google Play. Я также хочу защитить себя от покупателя, который покупает обновление в приложении, активирует его, а затем отменяет / запрашивает возврат средств за покупку и сохраняет доступ к премиум-функции.

В документации указано, что мы можем доверять getPurchasesList() чтобы всегда возвращать продукты, к которым у покупателя есть доступ: https://developer.android.com/google/play/billing/billing_library_overview

Однако я также вижу противоречивые отчеты о том, что, когда покупатель отключается (например, в долгом путешествии на самолете), Кэш Google за getPurchasesList () в конечном итоге истекает, что приведет к потере доступа клиента к премиум-контенту. Некоторые люди утверждают, что срок действия кеша Google истекает примерно через 12 часов, однако я перевел свой телефон в режим полета на 14 часов и все еще получал ответы от getPurchasesList (), так что, возможно, эти утверждения устарели.

Когда выставляется счет Google срок действия кеша истекает, какова структура ответа? Видно ли это из ответа, в котором покупатель не совершал покупок или получил возмещение за покупку. Допустим, мы получаем пустой ответ от Google по истечении срока действия кеша. Как мы можем точно узнать, что разница между:

  • getPurchasesList() не содержит покупок, потому что покупатель никогда не делал покупок.
  • getPurchasesList() не содержит покупок, потому что покупатель получил возмещение.
  • getPurchasesList() не содержит покупок, потому что срок действия кеша истек, НО покупатель совершил покупку и является владельцем продукта.

Кажется, очень мало официальной документации об этом важном сценарии, времени жизни кеша, способах его тестирования и т. Д. c. если я где-то чего-то не упускаю.

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

1 Ответ

1 голос
/ 27 мая 2020

IMHO, локальное сохранение ответа getPurchasesList() абсолютно нормально. Я уточню немного подробнее.

Все зависит от вашей модели угрозы: для меня пользователь не может изменить сам код приложения или получить доступ к частному хранилищу приложения. Если пользователь может это сделать, тогда все развалится, поскольку пользователь может с радостью удалить или пропустить код, ограничивающий функции приложения.

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

Очевидно, что любое обновление токена также должно отражаться в кеше. (например, просроченные или возвращенные состояния)

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

Должен признать, я не внимательно изучал примеры приложений, которые они предоставляют: https://github.com/android/play-billing-samples

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...