Migracja z interfejsu SafetyNet Attestation API

Jeśli weryfikujesz już odpowiedzi przy użyciu zaufanego serwera, a następnie przeprowadź migrację z interfejsu SafetyNet Attestation API do Interfejs Play Integrity API jest prosty. Interfejsu Play Integrity API można też używać zamiast aplikacji Kontrole licencji przeprowadzane bezpośrednio w aplikacji ze Sklepu Play za pomocą AIDL, np. aplikacji wykorzystywanych przez Licencjonowanie Biblioteka weryfikacji (LVL) Większość wymaganych zmian zostanie wprowadzonych po stronie zaufanego serwera, co wymaga odczytywać i analizować token odpowiedzi Play Integrity. Pamiętaj, że podczas migracji zarówno aplikacja, jak i serwer muszą obsługiwać oba interfejsy API jednocześnie, Obsługuj starszych klientów, którzy nie zostali jeszcze zaktualizowani.

Jeśli Twojej aplikacji przyznano zwiększony limit atestu SafetyNet API, sprawdź przypisany poziom wykorzystania na potrzeby Play Integrity API oraz w razie potrzeby żądanie przeniesienia do podwyższonego poziomu.

Do obsługi interfejsu Play Integrity API musisz wprowadzić te zmiany:

Klient na Androida:

  • Upewnij się, że kod przekazuje prawidłowo sformatowaną liczbę jednorazową do funkcji Kreator IntegrityTokenRequest:
      .
    • String (zamiast tablicy bajtów)
    • Odpowiednie w adresie URL
    • Zakodowane w formacie Base64 bez zawijania wierszy
    • Minimum 16 znaków
    • Maksymalnie 500 znaków.
  • Sprawdź logikę ponawiania prób i upewnij się, że aplikacja obsługuje błędy w odpowiedni sposób.
  • Upewnij się, że dane odpowiedzi wysyłane do zaufanego serwera pozwalają na rozróżnianie między odpowiedziami SafetyNet Attestation API a Play Integrity API odpowiedzi.

Zaufany serwer:

  • Zapoznaj się z logiką generowania liczby jednorazowej i upewnij się, że jest ona zgodna z Play Integrity API .
  • Upewnij się, że kod serwera rozróżnia interfejs SafetyNet Attestation API z odpowiedziami i odpowiedziami interfejsu Play Integrity API. Upewnij się, że kod został przeanalizowany poprawnie zweryfikuje te odpowiedzi.
  • Dodaj funkcje logiczne, aby sprawdzać i analizować Odpowiedzi interfejsu Play Integrity API.
  • Nowa odpowiedź Play Integrity API zawiera dodatkowe informacje, może być konieczne do ulepszenia procesów decyzyjnych i wysyłanie danych z powrotem do urządzeń klienckich. Więcej informacji znajdziesz w artykule Interfejs API Mapowanie odpowiedzi w tym temacie.

Kodowanie jednorazowe

Liczba jednorazowa związana z integralnością musi być przekazywana do interfejsu Play Integrity API jako zakodowany w formacie Base64, bezpiecznego adresu URL, bez opakowań String. Ten format różni się od interfejsu SafetyNet Attestation API, który wymaga byte[].

  • „Bezpieczne dla adresu URL” oznacza użycie tagu „adres URL i nazwa pliku bezpieczne” wariantu Base64 (patrz RFC 4648, sekcja 5), gdzie „-” i „_” są używane zamiast znaków „+” i „/”. Więcej informacji na temat kodowania Base64 znajdziesz w RFC 4648).
  • „no-wrap” oznacza pominięcie wszystkich zakończeń wierszy. Oznacza to, że dane wyjściowe to jeden długi wiersz.
.setNonce(Base64.encodeToString(NONCE_BYTES,
        Base64.URL_SAFE | Base64.NO_WRAP))

Upewnij się też, że generowanie liczby jednorazowej jest zgodne z zasadami Play Integrity. wytycznych dotyczących interfejsu API.

Mapowanie odpowiedzi interfejsu API

Tabela poniżej mapuje pola SafetyNet Attestation API na ich pola Google Play Odpowiedniki Integrity API.

SafetyNet Atestation API Interfejs Play Integrity API Notes
timestampMs requestDetails.timestampMillis
nonce requestDetails.nonce
apkPackageName appIntegrity.packageName
apkCertificateDigestSha256 appIntegrity.certificateSha256Digest Upewnij się, appRecognitionVerdict ma wartość PLAY_RECOGNIZED
ctsProfileMatch Połączona w deviceIntegrity.deviceRecognitionVerdict
basicIntegrity Połączona w deviceIntegrity.deviceRecognitionVerdict
evaluationType Połączona w deviceIntegrity.deviceRecognitionVerdict
advice Not available
error Not available Lista etykiet integralności urządzenia – wartość będzie pusta.

Mapowanie oceny integralności urządzenia

Interfejs API atestu SafetyNet Play Integrity API
ctsProfileMatch basicIntegrity evaluationType deviceRecognitionVerdict
FALSE FALSE Brak etykiet
FALSE TRUE MEETS_BASIC_INTEGRITY
TRUE FALSE Brak etykiet
TRUE TRUE BASIC MEETS_DEVICE_INTEGRITY, MEETS_BASIC_INTEGRITY
TRUE TRUE HARDWARE_BACKED MEETS_STRONG_INTEGRITY, MEETS_DEVICE_INTEGRITY, MEETS_BASIC_INTEGRITY

Może być konieczne skonfigurowanie zestawu integralności urządzenia odpowiedzi, jeśli aplikacja korzysta ze złożonej strategii egzekwowania zasad i wymaga wszystkich możliwych wartości.

Logika ponawiania prób w interfejsie Play Integrity API

W przypadku wystąpienia pewnych kodów błędów aplikacja powinna ponawiać próby wywołania interfejsu API. Upewnij się, że masz sprawdzono wszystkie błędy i upewnij się, że aplikacja ponawia próbę w razie potrzeby ze wzrastającym czasem do ponowienia. Proszę upewnij się, że minimalne opóźnienie wynosi co najmniej 5 sekund i zwiększa się wykładniczo (5s, 10 s, 20 s, 40 s itd.), aby zapewnić API wystarczająco dużo czasu na ocenę urządzenia integralności aplikacji.

Opcjonalne zastąpienie interfejsu App Licensing API

Jeśli używasz interfejsu App Licensing API, możesz opcjonalnie przejść na korzystanie z interfejsu Interfejs Play Integrity API, ponieważ token Play Integrity API zawiera informacje licencyjne. Tak jak w przypadku migracji interfejsu SafetyNet Attestation API, należy spodziewać się, że na wielu urządzeniach będzie przechowywana starszą wersję aplikacji. Zaufany serwer powinien być w stanie przetwarzać zarówno interfejs App Licensing API, jak i Odpowiedzi interfejsu Play Integrity API.

Otrzymywać odpowiedzi do momentu pełnego wyłączenia funkcji

Jeśli nie udało Ci się jeszcze przejść na interfejs Play Integrity API ani usunąć SafetyNet poświadczania przed terminem migracji (do 31 stycznia 2024 r.). Możesz zrobić to formularz aby poprosić o przedłużenie terminu. Jeśli prośba o przedłużenie terminu zostanie zatwierdzona, aplikacja będzie nadal działać otrzymywanie odpowiedzi od atestu SafetyNet do terminu pełnego wycofania (31 stycznia 2025 r.).