По умолчанию ServerManagedPolicy
, который Google предоставляет в своей License Verification Library, зависит от ответов сервера, чтобы определить интервал повторной проверки лицензии. Это приводит к необходимости повторной аттестации каждые несколько дней, на неограниченный срок. Это не только неприятность для пользователей, это может быть серьезной проблемой для пользователей, которые проходят расширенные периоды без подключения. (У нас просто был запрос от пользователя, который ожидает, что будет без подключения к Интернету в течение нескольких недель, что и мотивирует этот вопрос.)
В общем, я ищу алгоритм, который выполнит две вещи:
- резко сокращает требования к подключению по сравнению с
ServerManagedPolicy
; - обеспечивают тот же уровень защиты от пиратства.
В ответе этот вопрос предлагаемый политический алгоритм должен игнорировать время, указанное в ответе от сервера Google, и вместо этого использовать период истечения срока действия ЛИЦЕНЗИИ около месяц, при попытке проверки лицензии каждые несколько дней (для продления срока действия, если получен ответ LICENSED).
Хотя этот подход частично решает первую цель, он все равно требует подключения пользователей один раз в месяц при использовании приложения, поэтому он не будет работать (по крайней мере, одному из) наших пользователей.
Следующий алгоритм выполняет первый гол, но я не знаю второго. Любые комментарии, указывающие на недостатки этого алгоритма или предложения по другому подходу, будут приветствоваться.
- При первом запуске выполните проверку лицензии и настаивайте на ответе LICENSED, прежде чем предоставлять полную функциональность. После получения установите относительно короткий срок действия (но дольше, чем срок возврата, который Google Play обеспечивает, в настоящее время 15 минут). Также зарегистрируйте льготный период за несколько дней до этого.
- Приложение начнет проверку снова после истечения срока действия лицензии. Если он не смог подключиться (режим полета и т.д.), Он все равно будет функционировать до истечения льготного периода.
- По истечении льготного периода настаивайте на втором ответе LICENSED, прежде чем разрешить нормальное функционирование приложения.
- После получения второго ответа LICENSED навсегда включите все функции приложения и никогда не проверяйте его снова.
- Если в любой момент получен ответ UNLICENSED, навсегда отключите полную функциональность. (Пользователь может, конечно, вернуться к шагу 1, удалив все данные приложения.)
Дополнительные пункты:
- Было предложено отказаться от первой проверки лицензии и подождать до истечения периода возврата до выполнения проверки лицензии. Цель настаивать на первом ответе LICENSED - это предотвратить эксплойт, когда после проверки лицензии пользователь просто останавливает процесс приложения, очищает данные приложения и перезапускает приложение. (Приложение предоставляет значение, даже если оно используется только 15 минут за раз.)
- Цель настаивать на втором ответе LICENSED - это обойти эксплойт buy-run-backup-return-restore.
- Я не спрашиваю, является ли проверка лицензии на обратную связь хорошей идеей или нет (то, что Google предлагает вместо своего устаревшего механизма защиты от копирования). Я также хорошо знаю, что защита от пиратства не является надежной, и весь механизм лицензирования Google может быть обойден (в этом случае все вопросы о разработке алгоритма политики не имеют значения). Основной темой этого вопроса является относительный риск (для нас) и преимущества (для пользователя) вышеуказанного алгоритма по сравнению с другими политиками (например,
ServerManagedPolicy
).