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

Jeśli aplikacja wyśle żądanie do interfejsu Play Integrity API i wywołanie się nie powiedzie, otrzyma kod błędu. Błędy te mogą wystąpić z różnych powodów, np. z powodu problemów środowiskowych, takich jak słabe połączenie sieciowe, problemów z integracją interfejsu API lub złośliwych działań i aktywnych ataków. Typ zwracanego kodu błędu zależy od typu żądania:

Strategie ponawiania

W przypadku operacji Play Integrity, które odbywają się w tle i nie wpływają na wrażenia użytkownika podczas sesji, używaj wycofywania wykładniczego.

Na przykład warto to zrobić w przypadku potwierdzania nowych zakupów, ponieważ ta operacja może być wykonywana w tle, a potwierdzenie nie musi następować w czasie rzeczywistym, jeśli wystąpi błąd.

Po pierwszej próbie, która się nie powiodła, przed ponowną próbą zacznij od początkowego opóźnienia wynoszącego 5 sekund.

Wdróż strategię ponawiania z maksymalną liczbą prób jako warunkiem zakończenia, używając za każdym razem wykładniczo zwiększanego opóźnienia (10 s, 20 s).

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

Jeśli po 3 próbach ponowienia nadal widzisz błędy, potraktuj wynik tak, jakby klient nie przeszedł wszystkich testów integralności. Błąd może wystąpić z różnych powodów, w tym (ale nie tylko): przeciążenie urządzenia, problemy z połączeniem sieciowym lub próba ataku.

Wartości kodów błędów w bibliotece 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 w bibliotece 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, które można ponowić

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

NETWORK_ERROR (kod błędu –3)

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

Możliwe rozwiązanie

Aby rozwiązać ten problem, poproś użytkownika o sprawdzenie połączenia sieciowego i użyj prostych ponownych prób lub wycofywania wykładniczego w zależności od tego, które działanie spowodowało błąd.

Zobacz również

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 lub przekroczyła dzienny limit żądań.

Możliwe rozwiązanie

  1. Ponów próbę ze wzrastającym czasem do ponowienia.
  2. Prośba o zwiększenie maksymalnej dziennej liczby żądań

Zobacz również

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

Ponów próbę ze wzrastającym czasem do ponowienia. Jeśli testy stale się nie powiodą, zgłoś błąd.

Zobacz również

GOOGLE_SERVER_UNAVAILABLE – w przypadku żądań klasycznych.

CLIENT_TRANSIENT_ERROR (kod błędu –18)

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

W przypadku żądań interfejsu Standard API jest to obsługiwane od wersji 1.3.0 biblioteki Play Integrity API dla języków Kotlin i Java, wtyczki Google Play Integrity do Unity w wersji 1.3.0 lub nowszej oraz podstawowej biblioteki Play do aplikacji natywnych w wersji 1.13.0 lub nowszej.

Możliwe rozwiązanie

Ponów próbę ze wzrastającym czasem do ponowienia.

Zobacz również

CLIENT_TRANSIENT_ERROR – w przypadku żądań klasycznych.

Uwaga: jeśli wartość jest raportowana podczas korzystania z żądania interfejsu Classic API, zwracana wartość to –17.

INTERNAL_ERROR (kod błędu –100)

Nieznany błąd wewnętrzny.

Możliwe rozwiązanie

Ponów próbę ze wzrastającym czasem do ponowienia. Jeśli test nie przechodzi konsekwentnie, zgłoś błąd.

Zobacz również

INTERNAL_ERROR – w przypadku żądań klasycznych.

STANDARD_INTEGRITY_INTERNAL_ERROR (kod błędu –100)

Nieznany błąd wewnętrzny.

Możliwe rozwiązanie

Ponów próbę ze wzrastającym czasem do ponowienia. Jeśli test nie przechodzi konsekwentnie, zgłoś błąd.

Zobacz również

W przypadku żądań klasycznych zobacz INTEGRITY_INTERNAL_ERROR.

STANDARD_INTEGRITY_INITIALIZATION_FAILED (kod błędu -102)

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

Możliwe rozwiązanie

Ponów próbę ze wzrastającym czasem do ponowienia. Jeśli test nie przechodzi konsekwentnie, zgłoś błąd.

Zobacz również

W przypadku żądań klasycznych zobacz INTEGRITY_INITIALIZATION_FAILED.

Kody błędów, których nie można ponowić

W takich przypadkach automatyczne ponawianie prób raczej nie pomoże. Jeśli jednak użytkownik rozwiąże problem, ręczne ponowienie próby może pomóc. Jeśli na przykład użytkownik zaktualizuje wersję Sklepu Play do obsługiwanej wersji, ręczna ponowna próba wykonania pierwotnej operacji może się powieść.

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żliwością jest to, że interfejs Integrity API nie jest włączony w Konsoli Play.

Możliwe rozwiązanie

  • Sprawdź, czy interfejs Integrity API jest włączony w Konsoli Google Play.
  • Poproś użytkownika o zaktualizowanie Sklepu Play.

Zobacz również

W przypadku żądania klasycznego zobacz 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 również

W przypadku żądania klasycznego zobacz PLAY_STORE_NOT_FOUND.

PLAY_STORE_ACCOUNT_NOT_FOUND (kod błędu -4)

Uwaga: jest to zgłaszane tylko w przypadku klasycznych żądań wysyłanych przez IntegrityErrorCode.

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

Możliwe rozwiązanie

Poproś użytkownika o zaktualizowanie Sklepu Google Play i zalogowanie się w nim.

APP_NOT_INSTALLED (kod błędu –5)

Aplikacja do połączeń nie jest zainstalowana. Coś jest nie tak (prawdopodobnie atak).

Możliwe rozwiązanie

Nie umożliwia wykonania czynności. Traktuj wynik tak, jakby klient nie przeszedł wszystkich testów integralności.

Zobacz również

W przypadku żądania klasycznego zobacz APP_NOT_INSTALLED.

PLAY_SERVICES_NOT_FOUND (kod błędu –6)

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

Możliwe rozwiązanie

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

Zobacz również

W przypadku żądania klasycznego zobacz APP_NOT_INSTALLED.

APP_UID_MISMATCH (kod błędu –7)

Identyfikator UID aplikacji wywołującej (identyfikator użytkownika) nie pasuje do identyfikatora z Menedżera pakietów.

Możliwe rozwiązanie

Nie umożliwia wykonania czynności. Traktuj wynik tak, jakby klient nie przeszedł wszystkich testów integralności.

Zobacz również

W przypadku żądania klasycznego zobacz APP_UID_MISMATCH.

CANNOT_BIND_TO_SERVICE (kod błędu –9)

Nie udało się powiązać z usługą w Sklepie Play. Może to być spowodowane tym, że na urządzeniu jest zainstalowana starsza wersja Sklepu Play.

Możliwe rozwiązanie

Poproś użytkownika o zaktualizowanie Sklepu Google Play.

Zobacz również

W przypadku żądania klasycznego zobacz CANNOT_BIND_TO_SERVICE.

NONCE_TOO_SHORT (kod błędu –10)

Uwaga: jest to zgłaszane tylko w przypadku klasycznych żądań wysyłanych przez IntegrityErrorCode.

Długość liczby jednorazowej jest zbyt mała. Przed zakodowaniem w formacie base64 wartość nonce musi mieć co najmniej 16 bajtów.

Możliwe rozwiązanie

Spróbuj ponownie z dłuższym ciągiem jednorazowym.

NONCE_TOO_LONG (kod błędu -11)

Uwaga: jest to zgłaszane tylko w przypadku klasycznych żądań wysyłanych przez IntegrityErrorCode.

Długość liczby jednorazowej jest zbyt duża. Przed kodowaniem w formacie base64 wartość nonce musi mieć mniej niż 500 bajtów.

Możliwe rozwiązanie

Spróbuj ponownie z krótszym ciągiem nonce.

NONCE_IS_NOT_BASE64 (kod błędu –13)

Uwaga: jest to zgłaszane tylko w przypadku klasycznych żądań wysyłanych przez IntegrityErrorCode.

Liczba jednorazowa nie jest zakodowana jako bezpieczny dla sieci ciąg tekstowy w formacie base64 bez zawijania wierszy.

Możliwe rozwiązanie

Spróbuj ponownie z wartością nonce w prawidłowym formacie.

PLAY_STORE_VERSION_OUTDATED (kod błędu -14)

Aplikacja Sklep Google Play wymaga aktualizacji.

Możliwe rozwiązanie

Poproś użytkownika o zaktualizowanie Sklepu Google Play.

Zobacz również

W przypadku żądania klasycznego zobacz 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 również

W przypadku żądania klasycznego zobacz 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 w Google Cloud, w którym masz włączony interfejs Play Integrity API.

Zobacz również

W przypadku żądania klasycznego zobacz CLOUD_PROJECT_NUMBER_IS_INVALID.

REQUEST_HASH_TOO_LONG (kod błędu -17)

Uwaga: ten typ zdarzenia jest raportowany tylko wtedy, gdy używasz standardowego żądania za pomocą StandardIntegrityErrorCode.

Podany ciąg requestHash jest za długi. Długość requestHash musi być mniejsza niż 500 znaków.

Możliwe rozwiązanie

Spróbuj ponownie z krótszym requestHash.

INTEGRITY_TOKEN_PROVIDER_INVALID (kod błędu -19)

Uwaga: jest to zgłaszane tylko w przypadku standardowych żądań wysyłanych przez StandardIntegrityErrorCode.

StandardIntegrityTokenProvider nie jest już ważny. Może to być spowodowane wygaśnięciem dostawcy tokena lub wyczyszczeniem przez użytkownika danych aplikacji Sklep Play, co spowodowało usunięcie dostawcy tokena.

Ten kod błędu jest dostępny tylko w przypadku żądań interfejsu Standard API. Jest on obsługiwany od wersji 1.3.0 biblioteki w językach programowania Kotlin i Java, wtyczki Google Play Integrity Plugin do Unity w wersji 1.3.0 lub nowszej oraz podstawowego pakietu SDK Play do aplikacji natywnych 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)

StandardIntegrityManager nie został zainicjowany.

Możliwe rozwiązanie

Najpierw zadzwoń pod numer StandardIntegrityManager_init().

Zobacz również

Więcej informacji o żądaniach klasycznych znajdziesz w sekcji INTEGRITY_INITIALIZATION_NEEDED.

STANDARD_INTEGRITY_INVALID_ARGUMENT (kod błędu -103)

Do standardowego interfejsu Integrity API przekazano nieprawidłowy argument.

Możliwe rozwiązanie

Spróbuj ponownie, podając prawidłowy argument.

Zobacz również

Więcej informacji o żądaniach klasycznych znajdziesz w sekcji INTEGRITY_INVALID_ARGUMENT.