Переход с API аттестации SafetyNet

Если вы уже проверяете ответы, используя доверенный сервер, переход с API аттестации SafetyNet на API целостности Play не вызывает затруднений. Play Integrity API также можно использовать в качестве замены проверок лицензирования приложений , выполняемых непосредственно с приложением Play Store через AIDL, например, тех, которые выполняются Библиотекой проверки лицензирования (LVL) . Большинство необходимых изменений будет на стороне доверенного сервера, которому необходимо прочитать и проанализировать токен ответа Play Integrity. Обратите внимание, что во время миграции и приложение, и сервер должны поддерживать оба API одновременно, чтобы поддерживать старые клиенты, которые еще не обновились.

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

Для поддержки Play Integrity API необходимы следующие изменения:

Android-клиент:

  • Убедитесь, что код передает правильно отформатированный одноразовый номер построителю IntegrityTokenRequest :
    • String (вместо массива байтов)
    • URL-безопасный
    • Закодировано как Base64 и без переноса
    • Минимум 16 символов
    • Максимум 500 символов
  • Просмотрите логику повторов и убедитесь, что приложение правильно обрабатывает ошибки.
  • Убедитесь, что данные ответа, отправленные на доверенный сервер, позволяют различать ответы API аттестации SafetyNet и ответы API целостности игры.

Доверенный сервер:

  • Просмотрите логику создания nonce и убедитесь, что она соответствует требованиям Play Integrity API .
  • Убедитесь, что код сервера может различать ответы API аттестации SafetyNet и ответы API целостности игры. Убедитесь, что код правильно анализирует и проверяет эти ответы.
  • Добавьте логику для проверки и анализа ответов Play Integrity API.
  • Поскольку новый ответ Play Integrity API предоставляет дополнительную информацию, может потребоваться улучшить логику принятия решений и данные обратной связи, отправляемые обратно на клиентские устройства. Дополнительные сведения см. в разделе «Сопоставление ответов API» этой темы.

Nonce-кодирование

Одноразовый номер, связанный с целостностью, должен быть передан в Play Integrity API в виде закодированной в Base64 URL-безопасной и незавернутой String . Этот формат отличается от API аттестации SafetyNet, для которого требуется byte[] .

  • «URL-безопасный» означает использование варианта Base64 «безопасный для URL и имени файла» (см. раздел 5 RFC 4648), где вместо «+» и «/» используются «-» и «_». Дополнительную информацию о кодировке Base64 см. в RFC 4648 .
  • «без переноса» означает пропуск всех терминаторов строки. Это означает, что вывод представляет собой одну длинную строку.
.setNonce(Base64.encodeToString(NONCE_BYTES,
        Base64.URL_SAFE | Base64.NO_WRAP))

Кроме того, убедитесь, что создание nonce соответствует рекомендациям Play Integrity API .

Сопоставление ответов API

В следующей таблице поля SafetyNet Attestation API сопоставлены с их эквивалентами Play Integrity API.

API аттестации SafetyNet Воспроизвести API целостности Примечания
timestampMs requestDetails.timestampMillis
nonce requestDetails.nonce
apkPackageName appIntegrity.packageName
apkCertificateDigestSha256 appIntegrity.certificateSha256Digest Убедитесь, что для appRecognitionVerdict установлено значение PLAY_RECOGNIZED
ctsProfileMatch Объединено в deviceIntegrity.deviceRecognitionVerdict
basicIntegrity Объединено в deviceIntegrity.deviceRecognitionVerdict
evaluationType Объединено в deviceIntegrity.deviceRecognitionVerdict
advice Not available
error Not available Список меток целостности устройства будет пуст.

Сопоставление вердиктов целостности устройства

API аттестации SafetyNet API целостности игры
ctsProfileMatch basicIntegrity evaluationType deviceRecognitionVerdict
FALSE FALSE Нет ярлыков
FALSE TRUE MEETS_BASIC_INTEGRITY
TRUE FALSE Нет ярлыков
TRUE TRUE BASIC MEETS_DEVICE_INTEGRITY, MEETS_BASIC_INTEGRITY
TRUE TRUE HARDWARE_BACKED MEETS_STRONG_INTEGRITY, MEETS_DEVICE_INTEGRITY, MEETS_BASIC_INTEGRITY

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

Логика повторов Play Integrity API

Приложению следует повторить вызовы API в случае возникновения определенных кодов ошибок. Убедитесь, что вы просмотрели все коды ошибок и убедитесь, что приложение при необходимости повторяет попытку с экспоненциальной задержкой. Убедитесь, что минимальная задержка составляет не менее 5 секунд и увеличивается в геометрической прогрессии (5, 10, 20, 40 и т. д.), чтобы предоставить API достаточно времени для оценки целостности устройства и приложения.

Дополнительная замена API лицензирования приложений

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

Получайте ответы до полного ответа

Если вы еще не перешли на Play Integrity API или не удалили аттестацию SafetyNet до крайнего срока перехода (31 января 2024 г.), вы можете заполнить эту форму , чтобы запросить продление. Если продление будет одобрено, ваше приложение продолжит получать ответы от SafetyNet Attestation до истечения крайнего срока отказа (31 января 2025 г.).