В настоящее время я пытаюсь освоить покупки внутри приложения на Android.Я хочу реализовать одноразовый продукт без расходных материалов, то есть разрешить постоянный доступ ко всему контенту в приложении после покупки продукта.
В Руководстве разработчика по Android для In-App-Billing есть "Лучшийпрактика »(см. https://developer.android.com/google/play/billing/billing_best_practices).
В нем говорится: « Настоятельно рекомендуется проверить детали покупки на сервере, которому вы доверяете. [...] Внедрив проверку подписи.Используя логику на сервере, злоумышленникам будет сложно перепроектировать файл APK. "
Я не понимаю логику этого утверждения - если предположить, что в приложении нет учетных записей пользователей.
Кажется, что оба метода реализуют проверку подписи - либо на устройстве, либо на удаленном сервере.
Я полагаю, что доступные инструменты взлома могут сканировать и отключать на устройстве.проверка безопасности - так что, возможно, это подразумевается под «усложнением».
В противном случае я не вижу разницы, будет ли обратный инженер искать проверку на устройстве по сравнению с поиском обхода сервера.Оба вызова могут быть удалены или заменены возвращаемым значением «всегда истинно».
В документе с рекомендациями также говорится: «убедитесь, что orderId является уникальным значением, которое вы ранее не обрабатывали» .Даже это кажется сомнительным для меня.
Предполагая, что реверс-инженер не может найти и заменить проверку в оба конца на сервере, и вы отслеживаете все идентификаторы заказов на удаленном сервере - они по-прежнему не привязаны ни к какому идентификатору пользователя.Итак, как вы можете решить,
- пользователь переключил устройства (или потерял свои данные) и восстанавливает покупки или
- кто-то пытается незаконно получить доступ к платному контенту?
(Я полагаю, вы могли бы проверить с помощью эвристики - скажем, разрешить 3 одинаковых идентификатора заказа за X месяцев, но всегда будет риск блокировки законных покупателей.)
Эти вопросы, похоже,довольно простой для меня - поэтому я предполагаю, что я просто не понимаю всю картину.Я был бы очень благодарен, если бы кто-то мог пролить свет на это.