Obsługa kodów błędów interfejsu Play Integrity API

Jeśli aplikacja wyśle żądanie za pomocą interfejsu Play Integrity API i wywołanie się nie uda, zostanie zwrócony kod błędu. Typ zwracanego kodu błędu zależy od typu żądania:

Strategie ponawiania

W przypadku operacji Play Integrity, które są wykonywane w tle i nie wpływają na wrażenia użytkownika, zalecamy korzystanie z wykładniczego ponowienia.

Warto to robić na przykład przy potwierdzaniu nowych zakupów, ponieważ ta operacja może odbywać się w tle, a potwierdzanie nie musi następować w czasie rzeczywistym, jeśli wystąpi błąd.

Po pierwszym błędzie rozpocznij z początkowym opóźnieniem 5 sekund, zanim spróbujesz ponownie.

Zaimplementuj strategię ponawiania z maksymalną liczbą prób jako warunkiem wyjścia z wykładniczo rosnącym opóźnieniem (10 s lub 20 s).

Podczas ponownych prób sprawdź połączenie sieciowe i nie przeciążaj urządzenia.

Jeśli po 3 próbach nadal będą pojawiać się błędy, potraktuj wynik tak, jakby klient nie przeszedł wszystkich testów integralności. Powodów błędu może być kilka, takich jak przeciążenie urządzenia, problemy z połączeniem sieciowym lub próba ataku hakerów.

Wartości kodów błędów biblioteki 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

Dodatkowe wartości kodów błędów biblioteki natywnej

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

Kody błędów, na które ponawia się próbę

Przyczyną tych błędów są czasami przejściowe warunki, dlatego należy ponowić próbę połączenia.

NETWORK_ERROR (kod błędu -3)

Ten błąd oznacza, że wystąpił problem z połączeniem sieciowym między urządzeniem a systemami Google Play.

Możliwe rozwiązanie

Aby przywrócić dane, poproś użytkownika o sprawdzenie połączenia sieciowego oraz użycie prostych ponownych prób lub wykładniczego ponowienia w zależności od tego, które działanie spowodowało błąd.

Zobacz także:

NETWORK_ERROR w przypadku żądań klasycznych.

TOO_MANY_REQUESTS (kod błędu -8)

Aplikacja wywołująca wysyła zbyt wiele żądań do interfejsu API i została ograniczona.

Możliwe rozwiązanie

  1. Prośba o zwiększenie dziennej maksymalnej liczby żądań
  2. Spróbuj ponownie ze wzrastającym czasem do ponowienia.

Zobacz także:

TOO_MANY_REQUESTS w przypadku żądań klasycznych.

GOOGLE_SERVER_UNAVAILABLE (kod błędu -12)

Nieznany wewnętrzny błąd serwera Google.

Możliwe rozwiązanie

Spróbuj ponownie ze wzrastającym czasem do ponowienia. Rozważ zgłoszenie błędu, jeśli błąd będzie się powtarzał.

Zobacz także:

GOOGLE_SERVER_UNAVAILABLE w przypadku żądań klasycznych.

CLIENT_TRANSIENT_ERROR (kod błędu -18)

Na urządzeniu klienckim wystąpił przejściowy błąd.

W przypadku standardowych żądań do interfejsu API ta funkcja jest obsługiwana od wersji 1.3.0 biblioteki interfejsu Play Integrity API dla Kotlin i Javy, wtyczki Google Play Integrity dla Unity w wersji 1.3.0 lub nowszej oraz pakietu SDK Play Core Native w wersji 1.13.0 lub nowszej.

Możliwe rozwiązanie

Spróbuj ponownie ze wzrastającym czasem do ponowienia.

Zobacz także:

CLIENT_TRANSIENT_ERROR w przypadku żądań klasycznych.

Uwaga: w przypadku zgłoszenia z wykorzystaniem klasycznego żądania do interfejsu API zwracana wartość to -17.

INTERNAL_ERROR (kod błędu -100)

Nieznany błąd wewnętrzny.

Możliwe rozwiązanie

Spróbuj ponownie ze wzrastającym czasem do ponowienia. Jeśli błędy będą się powtarzać, rozważ zgłoszenie błędu.

Zobacz także:

INTERNAL_ERROR w przypadku żądań klasycznych.

STANDARD_INTEGRITY_INTERNAL_ERROR (kod błędu -100)

Nieznany błąd wewnętrzny.

Możliwe rozwiązanie

Spróbuj ponownie ze wzrastającym czasem do ponowienia. Jeśli błędy będą się powtarzać, rozważ zgłoszenie błędu.

Zobacz także:

Informacje o żądaniach klasycznych znajdziesz w artykule INTEGRITY_INTERNAL_ERROR.

STANDARD_INTEGRITY_INITIALIZATION_FAILED (kod błędu -102)

Podczas inicjowania standardowego interfejsu Integrity API wystąpił błąd.

Możliwe rozwiązanie

Spróbuj ponownie ze wzrastającym czasem do ponowienia. Jeśli błędy będą się powtarzać, rozważ zgłoszenie błędu.

Zobacz także:

Informacje o żądaniach klasycznych znajdziesz w artykule INTEGRITY_INITIALIZATION_FAILED.

Kody błędów bez ponowienia próby

Automatyczne ponawianie próby w takich przypadkach raczej nie pomoże. Ręczne ponowienie próby może pomóc, jeśli użytkownik rozwiąże problem, który spowodował problem. Jeśli na przykład użytkownik zaktualizuje wersję Sklepu Play do obsługiwanej wersji, spróbuj ponownie ręcznie wykonać pierwszą operację.

API_NOT_AVAILABLE (kod błędu -1)

Wersja Sklepu Play zainstalowana na urządzeniu może być stara, a interfejs Integrity API może być niedostępny. Inną możliwą przyczyną jest to, że interfejs Integrity API nie jest włączony w Konsoli Google Play.

Możliwe rozwiązanie

  • Upewnij się, że interfejs Integrity API jest włączony w Konsoli Google Play.
  • Poproś użytkownika o zaktualizowanie Sklepu Play.

Zobacz także:

Informacje o klasycznym żądaniu znajdziesz w sekcji API_NOT_AVAILABLE.

PLAY_STORE_NOT_FOUND (kod błędu -2)

Na urządzeniu nie znaleziono oficjalnej aplikacji Sklep Play.

Możliwe rozwiązanie

Poproś użytkownika o zainstalowanie lub włączenie Sklepu Google Play.

Zobacz także:

Informacje o klasycznym żądaniu znajdziesz w sekcji PLAY_STORE_NOT_FOUND.

PLAY_STORE_ACCOUNT_NOT_FOUND (kod błędu -4)

Uwaga: ta funkcja jest raportowana tylko w przypadku żądań klasycznych do IntegrityErrorCode.

Na urządzeniu nie znaleziono konta Sklepu Play. Pamiętaj, że interfejs Play Integrity API obsługuje teraz żądania nieuwierzytelnione. Ten kod błędu pojawia się tylko w starszych wersjach Sklepu Play, które go nie obsługują.

Możliwe rozwiązanie

Poproś użytkownika o zaktualizowanie aplikacji i zalogowanie się w Sklepie Google Play.

APP_NOT_INSTALLED (kod błędu -5)

Aplikacja do rozmów nie jest zainstalowana. Coś jest nie tak (to może być atak).

Możliwe rozwiązanie

Brak możliwości podjęcia działań. Traktuj wynik tak, jakby klient nie przeszedł wszystkich testów integralności.

Zobacz także:

Informacje o klasycznym żądaniu znajdziesz w sekcji APP_NOT_INSTALLED.

PLAY_SERVICES_NOT_FOUND (kod błędu -6)

Usługi Google Play są niedostępne lub wymagają aktualizacji.

Możliwe rozwiązanie

Poproś użytkownika o zainstalowanie, zaktualizowanie lub włączenie Usług Google Play.

Zobacz także:

Informacje o klasycznym żądaniu znajdziesz w sekcji APP_NOT_INSTALLED.

APP_UID_MISMATCH (kod błędu -7)

Identyfikator użytkownika (UID) aplikacji wywołującej nie jest zgodny z identyfikatorem w menedżerze pakietów.

Możliwe rozwiązanie

Brak możliwości podjęcia działań. Traktuj wynik tak, jakby klient nie przeszedł wszystkich testów integralności.

Zobacz także:

Informacje o klasycznym żądaniu znajdziesz w sekcji APP_UID_MISMATCH.

CANNOT_BIND_TO_SERVICE (kod błędu -9)

Nie udało się powiązać z usługą w Sklepie Play. Być może masz na urządzeniu zainstalowaną starszą wersję Sklepu Play.

Możliwe rozwiązanie

Poproś użytkownika o zaktualizowanie Sklepu Google Play.

Zobacz także:

Informacje o klasycznym żądaniu znajdziesz w sekcji CANNOT_BIND_TO_SERVICE.

NONCE_TOO_SHORT (kod błędu -10)

Uwaga: ta funkcja jest raportowana tylko w przypadku żądań klasycznych do IntegrityErrorCode.

Liczba jednorazowa jest za krótka. Liczba jednorazowa musi mieć co najmniej 16 bajtów przed zakodowaniem base64.

Możliwe rozwiązanie

Spróbuj ponownie, używając dłuższej liczby jednorazowej.

NONCE_TOO_LONG (kod błędu -11)

Uwaga: ta funkcja jest raportowana tylko w przypadku żądań klasycznych do IntegrityErrorCode.

Liczba jednorazowa jest za długa. Liczba jednorazowa musi mieć mniej niż 500 bajtów przed zakodowaniem base64.

Możliwe rozwiązanie

Podaj krótszą liczbę jednorazową i spróbuj ponownie.

NONCE_IS_NOT_BASE64 (kod błędu -13)

Uwaga: ta funkcja jest raportowana tylko w przypadku żądań klasycznych do IntegrityErrorCode.

Element jednorazowy nie jest kodowany w formacie base64 i bezpieczny w internecie jako ciąg znaków no-wrap.

Możliwe rozwiązanie

Spróbuj ponownie, podając liczbę jednorazową w prawidłowym formacie.

PLAY_STORE_VERSION_OUTDATED (kod błędu -14)

Musisz zaktualizować aplikację Sklep Google Play.

Możliwe rozwiązanie

Poproś użytkownika o zaktualizowanie Sklepu Google Play.

Zobacz także:

Informacje o klasycznym żądaniu znajdziesz w sekcji PLAY_STORE_VERSION_OUTDATED.

PLAY_SERVICES_VERSION_OUTDATED (kod błędu –15)

Usługi Google Play wymagają aktualizacji.

Możliwe rozwiązanie

Poproś użytkownika o zaktualizowanie Usług Google Play.

Zobacz także:

Informacje o klasycznym żądaniu znajdziesz w sekcji PLAY_SERVICES_VERSION_OUTDATED.

CLOUD_PROJECT_NUMBER_IS_INVALID (kod błędu -16)

Podany numer projektu w chmurze jest nieprawidłowy.

Możliwe rozwiązanie

Użyj numeru projektu Cloud dla projektu Cloud, w którym włączono Play Integrity API.

Zobacz także:

Informacje o klasycznym żądaniu znajdziesz w sekcji CLOUD_PROJECT_NUMBER_IS_INVALID.

REQUEST_HASH_TOO_LONG (kod błędu -17)

Uwaga: ta funkcja jest raportowana tylko w przypadku korzystania z żądania standardowego przez StandardIntegrityErrorCode.

Podany requestHash jest za długi. Element requestHash musi mieć mniej niż 500 znaków.

Możliwe rozwiązanie

Podaj krótszą wartość w polu requestHash.

INTEGRITY_TOKEN_PROVIDER_INVALID (kod błędu -19)

Uwaga: ta funkcja jest raportowana tylko w przypadku żądań standardowych przesyłanych do StandardIntegrityErrorCode.

Pole StandardIntegrityTokenProvider jest nieprawidłowe. Ten kod błędu jest dostępny tylko w przypadku standardowych żądań do interfejsu API (gdy jest obsługiwany od wersji 1.3.0 biblioteki języka programowania Kotlin i Java), wtyczki Google Play Integrity dla Unity w wersji 1.3.0 lub nowszej oraz pakietu Play Core Native SDK w wersji 1.13.0 lub nowszej.

Możliwe rozwiązanie

Poproś o nowego dostawcę tokenów integralności.

STANDARD_INTEGRITY_INITIALIZATION_NEEDED (kod błędu -101)

Nie zainicjowano StandardIntegrityManager.

Możliwe rozwiązanie

Najpierw zadzwoń pod numer StandardIntegrityManager_init().

Zobacz także:

Klasyczne żądania znajdziesz na stronie INTEGRITY_INITIALIZATION_NEEDED

STANDARD_INTEGRITY_INVALID_ARGUMENT (kod błędu -103)

Do interfejsu Standard Integrity API przekazano nieprawidłowy argument.

Możliwe rozwiązanie

Spróbuj ponownie, używając prawidłowego argumentu.

Zobacz także:

Klasyczne żądania znajdziesz na stronie INTEGRITY_INVALID_ARGUMENT.