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