Обработка кодов ошибок Play Integrity API

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

Стратегии повторных попыток

Используйте экспоненциальную задержку для операций Play Integrity, которые происходят в фоновом режиме и не влияют на пользовательский интерфейс во время сеанса.

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

После первой неудачи начните с первоначальной задержки в 5 секунд, прежде чем повторить попытку.

Реализуйте стратегию повторных попыток с максимальным количеством попыток в качестве условия выхода, используя экспоненциально увеличивающуюся задержку каждый раз (10 с, 20 с).

Во время повторных попыток проверяйте наличие сетевого подключения и не перегружайте устройство.

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

Значения кодов ошибок для библиотеки Java

IntegrityErrorCode StandardIntegrityErrorCode
-1 API_NOT_AVAILABLE API_NOT_AVAILABLE
-2 PLAY_STORE_NOT_FOUND PLAY_STORE_NOT_FOUND
-3 NETWORK_ERROR NETWORK_ERROR
-4 PLAY_STORE_ACCOUNT_NOT_FOUND
-5 APP_NOT_INSTALLED APP_NOT_INSTALLED
-6 PLAY_SERVICES_NOT_FOUND PLAY_SERVICES_NOT_FOUND
-7 APP_UID_MISMATCH APP_UID_MISMATCH
-8 TOO_MANY_REQUESTS TOO_MANY_REQUESTS
-9 CANNOT_BIND_TO_SERVICE CANNOT_BIND_TO_SERVICE
-10 NONCE_TOO_SHORT
-11 NONCE_TOO_LONG
-12 GOOGLE_SERVER_UNAVAILABLE GOOGLE_SERVER_UNAVAILABLE
-13 NONCE_IS_NOT_BASE64
-14 PLAY_STORE_VERSION_OUTDATED PLAY_STORE_VERSION_OUTDATED
-15 PLAY_SERVICES_VERSION_OUTDATED PLAY_SERVICES_VERSION_OUTDATED
-16 CLOUD_PROJECT_NUMBER_IS_INVALID CLOUD_PROJECT_NUMBER_IS_INVALID
-17 CLIENT_TRANSIENT_ERROR REQUEST_HASH_TOO_LONG
-18 CLIENT_TRANSIENT_ERROR
-19 INTEGRITY_TOKEN_PROVIDER_INVALID
-100 INTERNAL_ERROR INTERNAL_ERROR

Дополнительные значения кодов ошибок для собственной библиотеки

IntegrityErrorCode StandardIntegrityErrorCode
-100 INTEGRITY_INTERNAL_ERROR STANDARD_INTEGRITY_INTERNAL_ERROR
-101 INTEGRITY_INITIALIZATION_NEEDED STANDARD_INTEGRITY_INITIALIZATION_NEEDED
-102 INTEGRITY_INITIALIZATION_FAILED STANDARD_INTEGRITY_INITIALIZATION_FAILED
-103 INTEGRITY_INVALID_ARGUMENT STANDARD_INTEGRITY_INVALID_ARGUMENT

Повторяемые коды ошибок

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

NETWORK_ERROR (код ошибки -3)

Эта ошибка указывает на то, что возникла проблема с сетевым соединением между устройством и системами Play.

Возможное разрешение

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

Смотрите также

NETWORK_ERROR для классических запросов.

TOO_MANY_REQUESTS (код ошибки -8)

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

Возможное разрешение

  1. Повторите попытку с экспоненциальной задержкой.
  2. Запрос на увеличение вашего ежедневного максимального количества запросов

Смотрите также

TOO_MANY_REQUESTS для классических запросов.

GOOGLE_SERVER_UNAVAILABLE (код ошибки -12)

Неизвестная внутренняя ошибка сервера Google.

Возможное разрешение

Повторите попытку с экспоненциальной задержкой. Если ошибка повторяется, рассмотрите возможность отправки сообщения об ошибке .

Смотрите также

GOOGLE_SERVER_UNAVAILABLE для классических запросов.

CLIENT_TRANSIENT_ERROR (код ошибки -18)

На клиентском устройстве произошла временная ошибка.

Для стандартных запросов API эта поддержка поддерживается, начиная с версии 1.3.0 библиотеки Play Integrity API для Kotlin и Java , плагина Google Play Integrity для Unity 1.3.0 или выше и Play Core Native SDK 1.13.0 или выше.

Возможное разрешение

Повторите попытку с экспоненциальной задержкой.

Смотрите также

CLIENT_TRANSIENT_ERROR для классических запросов.

Примечание: при использовании запроса Classic API возвращается значение -17.

INTERNAL_ERROR (код ошибки -100)

Неизвестная внутренняя ошибка.

Возможное разрешение

Повторите попытку с экспоненциальной задержкой. Если ошибка повторяется, рассмотрите возможность отправки сообщения об ошибке.

Смотрите также

INTERNAL_ERROR для классических запросов.

STANDARD_INTEGRITY_INTERNAL_ERROR (код ошибки -100)

Неизвестная внутренняя ошибка.

Возможное разрешение

Повторите попытку с экспоненциальной задержкой. Если ошибка повторяется, рассмотрите возможность отправки сообщения об ошибке.

Смотрите также

См. INTEGRITY_INTERNAL_ERROR для классических запросов.

STANDARD_INTEGRITY_INITIALIZATION_FAILED (код ошибки -102)

Произошла ошибка инициализации стандартного API целостности.

Возможное разрешение

Повторите попытку с экспоненциальной задержкой. Если ошибка повторяется, рассмотрите возможность отправки сообщения об ошибке.

Смотрите также

См. INTEGRITY_INITIALIZATION_FAILED для классических запросов.

Коды ошибок, не подлежащие повторному использованию

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

API_NOT_AVAILABLE (код ошибки -1)

Возможно, на устройстве установлена старая версия Play Store, и API Integrity недоступен. Также возможно, что API Integrity не включён в Google Play Console.

Возможное разрешение

  • Убедитесь, что Integrity API включен в Google Play Console.
  • Попросите пользователя обновить Play Store.

Смотрите также

См API_NOT_AVAILABLE для классического запроса.

PLAY_STORE_NOT_FOUND (код ошибки -2)

Официального приложения Play Store на устройстве не обнаружено.

Возможное разрешение

Попросите пользователя установить или включить Google Play Store.

Смотрите также

Классический запрос см. в PLAY_STORE_NOT_FOUND .

PLAY_STORE_ACCOUNT_NOT_FOUND (код ошибки -4)

Примечание: это сообщается только для классического запроса через IntegrityErrorCode .

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

Возможное разрешение

Попросите пользователя обновиться и войти в Google Play Store.

APP_NOT_INSTALLED (код ошибки -5)

Приложение для звонков не установлено. Что-то не так (возможно, атака).

Возможное разрешение

Не требует принятия мер. Относитесь к результату так, как будто клиент не прошёл все проверки благонадежности.

Смотрите также

Классический запрос см. в APP_NOT_INSTALLED .

PLAY_SERVICES_NOT_FOUND (код ошибки -6)

Сервисы Play недоступны или требуют обновления.

Возможное разрешение

Попросите пользователя установить, обновить или включить Play Services.

Смотрите также

Классический запрос см. в APP_NOT_INSTALLED .

APP_UID_MISMATCH (код ошибки -7)

UID вызывающего приложения (идентификатор пользователя) не совпадает с идентификатором из диспетчера пакетов.

Возможное разрешение

Не требует принятия мер. Относитесь к результату так, как будто клиент не прошёл все проверки благонадежности.

Смотрите также

Классический запрос см. в APP_UID_MISMATCH .

CANNOT_BIND_TO_SERVICE (код ошибки -9)

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

Возможное разрешение

Попросите пользователя обновить Google Play Store.

Смотрите также

См. CANNOT_BIND_TO_SERVICE для классического запроса.

NONCE_TOO_SHORT (код ошибки -10)

Примечание: это сообщается только для классического запроса через IntegrityErrorCode .

Длина одноразового значения слишком короткая. Длина одноразового значения должна быть не менее 16 байт до кодирования в формате base64.

Возможное разрешение

Повторите попытку с более длинным одноразовым кодом.

NONCE_TOO_LONG (код ошибки -11)

Примечание: это сообщается только для классического запроса через IntegrityErrorCode .

Длина одноразового значения слишком велика. Перед кодированием в формате base64 одноразовое значение должно быть меньше 500 байт.

Возможное разрешение

Повторите попытку с более коротким одноразовым кодом.

NONCE_IS_NOT_BASE64 (код ошибки -13)

Примечание: это сообщается только для классического запроса через IntegrityErrorCode .

Nonce не кодируется как безопасная веб-строка base64 без переносов.

Возможное разрешение

Повторите попытку с одноразовым кодом в правильном формате.

PLAY_STORE_VERSION_OUTDATED (код ошибки -14)

Необходимо обновить приложение Google Play Store.

Возможное разрешение

Попросите пользователя обновить Google Play Store.

Смотрите также

См. PLAY_STORE_VERSION_OUTDATED для классического запроса.

PLAY_SERVICES_VERSION_OUTDATED (код ошибки -15)

Необходимо обновить сервисы Google Play.

Возможное разрешение

Попросите пользователя обновить сервисы Google Play.

Смотрите также

Классический запрос см. в PLAY_SERVICES_VERSION_OUTDATED .

CLOUD_PROJECT_NUMBER_IS_INVALID (код ошибки -16)

Указанный номер облачного проекта недействителен.

Возможное разрешение

Используйте номер облачного проекта для облачного проекта, для которого вы включили Play Integrity API.

Смотрите также

См. CLOUD_PROJECT_NUMBER_IS_INVALID для классического запроса.

REQUEST_HASH_TOO_LONG (код ошибки -17)

Примечание: об этом сообщается только при использовании стандартного запроса через StandardIntegrityErrorCode .

Предоставленный requestHash слишком длинный. Длина requestHash должна быть меньше 500 символов.

Возможное разрешение

Повторите попытку с более коротким requestHash .

INTEGRITY_TOKEN_PROVIDER_INVALID (код ошибки -19)

Примечание: это сообщается только для стандартного запроса через StandardIntegrityErrorCode .

StandardIntegrityTokenProvider больше недействителен. Это могло произойти из-за истёкшего срока действия поставщика токена или из-за того, что пользователь очистил данные приложения Play Store, что привело к удалению поставщика токена.

Этот код ошибки доступен только для стандартных запросов API, где он поддерживается начиная с версии библиотеки 1.3.0 для языков программирования Kotlin и Java, плагина Google Play Integrity для Unity 1.3.0 или выше и Play Core Native SDK 1.13.0 или выше.

Возможное разрешение

Запросите нового поставщика токена целостности.

STANDARD_INTEGRITY_INITIALIZATION_NEEDED (код ошибки -101)

StandardIntegrityManager не инициализирован.

Возможное разрешение

Сначала вызовите StandardIntegrityManager_init() .

Смотрите также

См. INTEGRITY_INITIALIZATION_NEEDED для классических запросов.

STANDARD_INTEGRITY_INVALID_ARGUMENT (код ошибки -103)

Неверный аргумент передан в стандартный API целостности.

Возможное разрешение

Повторите попытку, указав правильный аргумент.

Смотрите также

См. INTEGRITY_INVALID_ARGUMENT для классических запросов.