Обзор лицензирования

Лицензирование Google Play — это сетевая служба, позволяющая приложению обращаться к доверенному серверу лицензирования Google Play, чтобы определить, лицензировано ли приложение для текущего пользователя устройства. Служба лицензирования основана на способности сервера лицензирования Google Play определять, имеет ли данный пользователь лицензию на использование данного приложения. Google Play считает пользователя лицензированным, если он является зарегистрированным покупателем приложения.

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

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

Рисунок 1. Ваше приложение инициирует проверку лицензии через библиотеку проверки лицензий и клиент Google Play, который обрабатывает связь с сервером Google Play.

Примечание: Раньше вы могли протестировать приложение, загрузив неопубликованную версию «черновика». Эта функция больше не поддерживается; вместо этого необходимо опубликовать приложение в закрытом или открытом тестировании. Подробнее см. в статье «Черновики приложений больше не поддерживаются» .

Чтобы правильно идентифицировать пользователя и определить статус лицензии, серверу лицензирования требуется информация о приложении и пользователе — ваше приложение и клиент Google Play работают вместе для сбора информации, а клиент Google Play передает ее на сервер.

Чтобы помочь вам добавить лицензирование в ваше приложение, Android SDK предоставляет загружаемый набор исходных библиотек, которые вы можете включить в свой проект: пакет лицензирования Google Market. Библиотека проверки лицензий (LVL) — это библиотека, которую вы можете добавить в свое приложение и которая обрабатывает все операции по лицензированию со службой лицензирования Google Play. После добавления LVL ваше приложение сможет определять статус лицензирования для текущего пользователя, просто вызывая метод и реализуя обратный вызов, который получает ответ о статусе.

Ваше приложение не обращается напрямую к серверу лицензирования, а вместо этого обращается к клиенту Google Play через удалённый IPC для инициирования запроса лицензии. В запросе лицензии:

  • Ваше приложение предоставляет: имя своего пакета, одноразовый код, который впоследствии используется для проверки любого ответа от сервера, и обратный вызов, с помощью которого ответ может быть возвращен асинхронно.
  • Клиент Google Play собирает необходимую информацию о пользователе и устройстве, такую как имя пользователя основного аккаунта Google, IMSI и другие данные. Затем он отправляет запрос на проверку лицензии на сервер от имени вашего приложения.
  • Сервер Google Play оценивает запрос, используя всю доступную информацию, пытаясь установить личность пользователя с достаточной степенью достоверности. Затем сервер сверяет личность пользователя с записями о покупках вашего приложения и возвращает ответ о лицензии, который клиент Google Play возвращает вашему приложению через обратный вызов IPC.

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

Обратите внимание, что во время проверки лицензии ваше приложение не управляет никакими сетевыми соединениями и не использует какие-либо API, связанные с лицензированием на платформе Android.

Ответы на вопросы о лицензии безопасны

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

Служба лицензирования генерирует одну пару лицензионных ключей для каждого приложения и публикует открытый ключ на странице «Службы и API» вашего приложения в Play Console. Вам необходимо скопировать открытый ключ из Play Console и встроить его в исходный код приложения. Сервер хранит закрытый ключ внутри себя и использует его для подписи ответов на запросы лицензий для приложений, публикуемых с использованием этой учетной записи.

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

Библиотека проверки лицензирования

Android SDK предоставляет загружаемый пакет под названием «Пакет лицензирования Google Market», включающий библиотеку проверки лицензий (LVL). LVL значительно упрощает процесс добавления лицензирования в приложение и помогает обеспечить более безопасную и надёжную реализацию приложения. LVL предоставляет внутренние классы, которые обрабатывают большинство стандартных операций запроса лицензии, таких как обращение к клиенту Google Play для инициирования запроса лицензии, а также проверка и валидация ответов. Он также предоставляет интерфейсы, позволяющие легко подключать собственный код для определения политики лицензирования и управления доступом в соответствии с потребностями вашего приложения. Ключевые интерфейсы LVL:

Policy
Ваша реализация определяет, разрешать ли доступ к приложению, на основе ответа о лицензии, полученного от сервера, и любых других доступных данных (например, от внутреннего сервера, связанного с вашим приложением). Реализация может оценивать различные поля ответа о лицензии и при необходимости применять другие ограничения. Реализация также позволяет управлять обработкой проверок лицензий, которые приводят к ошибкам, например, сетевым ошибкам.
LicenseCheckerCallback
Ваша реализация управляет доступом к приложению на основе результата обработки ответа о лицензии объектом Policy . Реализация может управлять доступом любым необходимым способом, включая отображение результата проверки лицензии в пользовательском интерфейсе или предложение пользователю приобрести приложение (если у него ещё нет лицензии).

Чтобы помочь вам начать работу с Policy , LVL предоставляет две полностью завершенные реализации Policy , которые вы можете использовать без изменений или адаптировать к своим потребностям:

ServerManagedPolicy
Гибкая Policy , использующая настройки сервера лицензирования для управления кэшированием ответов и доступом к приложению, когда устройство находится в автономном режиме (например, когда пользователь находится в самолете). Для большинства приложений настоятельно рекомендуется использовать ServerManagedPolicy .
StrictPolicy
Ограничительная Policy , которая не кэширует никакие данные ответа и разрешает приложению доступ только в том случае, если сервер возвращает лицензированный ответ.

Библиотека LVL доступна в виде загружаемого пакета Android SDK. Пакет включает в себя как саму LVL, так и пример приложения, демонстрирующий, как интегрировать библиотеку с вашим приложением и как ваше приложение должно управлять данными ответа, взаимодействием с пользовательским интерфейсом и ошибками.

Исходные коды LVL предоставляются в виде проекта библиотеки Android, что позволяет поддерживать единый набор исходных кодов библиотеки и использовать их в нескольких приложениях. Полноценная тестовая среда также доступна через SDK, что позволяет разрабатывать и тестировать реализацию лицензирования в своих приложениях перед их публикацией, даже если у вас нет доступа к физическому устройству.

Требования и ограничения

Служба лицензирования Google Play предназначена для управления лицензиями приложений, публикуемых через Google Play. Она не позволяет контролировать доступ к приложениям, опубликованным не через Google Play, или работающим на устройствах, на которых не установлен клиент Google Play.

Вот несколько моментов, которые следует учитывать при внедрении лицензирования в ваше приложение:

  • Приложение может использовать сервис только в том случае, если на его хост-устройстве установлен клиент Google Play и устройство работает под управлением Android 1.5 (API уровня 3) или выше.
  • Для проверки лицензии сервер лицензирования должен быть доступен по сети. Вы можете реализовать кэширование лицензий для управления доступом к приложению при отсутствии сетевого подключения.
  • Безопасность управления лицензированием вашего приложения в конечном итоге зависит от архитектуры вашей реализации. Сервис предоставляет базовые элементы, позволяющие безопасно проверять лицензирование, но фактическое применение и обработка лицензии зависят от вас. Следуя рекомендациям, изложенным в следующих документах, вы сможете обеспечить безопасность своей реализации.
  • Добавление лицензирования к приложению не влияет на работу приложения при запуске на устройстве, на котором не установлен Google Play.
  • Вы можете реализовать элементы управления лицензированием для бесплатного приложения, но только если вы используете службу для предоставления файлов расширения APK .

Замена защиты от копирования

Лицензирование Google Play — это гибкий и безопасный механизм управления доступом к вашим приложениям. Он фактически заменяет механизм защиты от копирования (больше не поддерживается), который ранее предлагался в Google Play, и расширяет возможности распространения ваших приложений.

Лицензирование позволяет перейти к модели лицензирования, действующей на всех устройствах с доступом к Google Play. Доступ не привязан к характеристикам хост-устройства, а к вашему приложению в Google Play (через открытый ключ приложения) и заданной вами политике лицензирования. Ваше приложение можно установить и управлять им на любом устройстве и на любом носителе, включая SD-карту.

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

Чтобы начать добавлять лицензирование приложений в свое приложение, перейдите к разделу Настройка лицензирования .