Migrazione dall'API SafetyNet Attestation

Se verifichi già le risposte utilizzando un server attendibile, la migrazione dall'API SafetyNet Attestation all'API Play Integrity è semplice. L'API Play Integrity può essere utilizzata anche in sostituzione dei controlli di Gestione licenze delle app eseguiti direttamente con l'app Play Store tramite AIDL, come quelli eseguiti dalla licensing Verification Library (LVL). La maggior parte delle modifiche richieste verrà applicata sul lato server attendibile, che deve leggere e analizzare il token di risposta di Play Integrity. Tieni presente che, durante la migrazione, sia l'applicazione che il server devono supportare entrambe le API contemporaneamente per supportare i client meno recenti non ancora aggiornati.

Se alla tua app sono stati concessi limiti di quota aumentati per l'API SafetyNet Attestation, devi controllare il livello di utilizzo assegnato per l'API Play Integrity e, se necessario, la richiesta di passaggio al livello aumentato.

Per supportare l'API Play Integrity sono necessarie le modifiche che seguono:

Client Android:

  • Assicurati che il codice passi il nonce formattato correttamente allo strumento di creazione IntegrityTokenRequest:
    • String (anziché un array di byte)
    • Sicurezza per URL
    • Codificato come Base64 e senza wrapping
    • Minimo 16 caratteri
    • Massimo 500 caratteri
  • Esamina la logica dei nuovi tentativi e assicurati che l'applicazione gestisca gli errori in modo appropriato.
  • Assicurati che i dati di risposta inviati al server attendibile consentano di distinguere tra le risposte dell'API SafetyNet Attestation e le risposte dell'API Play Integrity.

Server attendibile:

  • Esamina la logica di generazione nonce e assicurati che soddisfi i requisiti dell'API Play Integrity.
  • Assicurati che il codice del server sia in grado di distinguere tra le risposte dell'API SafetyNet Attestation e le risposte dell'API Play Integrity. Assicurati che il codice analizza e convalida correttamente le risposte.
  • Aggiungi logica per convalidare e analizzare le risposte dell'API Play Integrity.
  • Poiché la nuova risposta dell'API Play Integrity fornisce dettagli aggiuntivi, potrebbe essere necessario migliorare la logica del processo decisionale e i dati dei feedback inviati ai dispositivi client. Per ulteriori informazioni, consulta la sezione Mappatura delle risposte API in questo argomento.

Codifica Nonce

È necessario passare un nonce relativo all'integrità all'API Play Integrity come String con codifica Base64, sicuro per URL e senza wrapping. Questo formato è diverso dall'API SafetyNet Attestation, che richiede byte[].

  • Per "URL sicuro" si intende l'utilizzo della variante "URL e nome file-safe" di Base64 (vedi RFC 4648 sezione 5), dove "-" e "_" vengono utilizzati al posto di "+" e "/". Per ulteriori informazioni sulla codifica Base64, consulta RFC 4648.
  • "no-wrap" indica l'omissione di tutti i caratteri di terminazione di riga. Ciò significa che l'output è una singola lunga riga.
.setNonce(Base64.encodeToString(NONCE_BYTES,
        Base64.URL_SAFE | Base64.NO_WRAP))

Inoltre, assicurati che la generazione del nonce sia in linea con le linee guida dell'API Play Integrity.

Mappatura delle risposte API

La tabella seguente mappa i campi dell'API SafetyNet Attestation ai relativi equivalenti dell'API Play Integrity.

API SafetyNet Attestation API Play Integrity Notes
timestampMs requestDetails.timestampMillis
nonce requestDetails.nonce
apkPackageName appIntegrity.packageName
apkCertificateDigestSha256 appIntegrity.certificateSha256Digest Assicurati che appRecognitionVerdict sia impostato su PLAY_RECOGNIZED
ctsProfileMatch Combinato in deviceIntegrity.deviceRecognitionVerdict
basicIntegrity Combinato in deviceIntegrity.deviceRecognitionVerdict
evaluationType Combinato in deviceIntegrity.deviceRecognitionVerdict
advice Not available
error Not available L'elenco delle etichette di integrità del dispositivo sarà vuoto.

Mappatura dell'esito relativo all'integrità del dispositivo

API SafetyNet Attestation API Play Integrity
ctsProfileMatch basicIntegrity evaluationType deviceRecognitionVerdict
FALSE FALSE Nessuna etichetta
FALSE TRUE MEETS_BASIC_INTEGRITY
TRUE FALSE Nessuna etichetta
TRUE TRUE BASIC MEETS_DEVICE_INTEGRITY, MEETS_BASIC_INTEGRITY
TRUE TRUE HARDWARE_BACKED MEETS_STRONG_INTEGRITY, MEETS_DEVICE_INTEGRITY, MEETS_BASIC_INTEGRITY

Potrebbe essere necessario configurare l'insieme delle risposte relative all'integrità del dispositivo se la tua applicazione utilizza una strategia di applicazione complessa e ha bisogno di tutti i valori possibili.

Logica di nuovo tentativo dell'API Play Integrity

Un'app dovrebbe riprovare le chiamate API in caso di determinati codici di errore. Assicurati di aver esaminato tutti i codici di errore e che l'applicazione esegua un nuovo tentativo con un backoff esponenziale quando necessario. Assicurati che il ritardo minimo sia di almeno 5 secondi, aumentando in modo esponenziale (5, 10, 20, 40 e così via), per fornire all'API tempo sufficiente per valutare l'integrità del dispositivo e dell'applicazione.

Sostituzione facoltativa dell'API App Licensing

Se usi l'API App Licensing, se vuoi puoi eseguire la migrazione per utilizzare l'API Play Integrity, poiché un token dell'API Play Integrity include le informazioni sulle licenze dell'applicazione. Come per la migrazione dell'API SafetyNet Attestation, è probabile che un certo numero di dispositivi mantenga una versione precedente dell'applicazione. Il tuo server attendibile dovrebbe essere in grado di elaborare le risposte dell'API App Licensing e dell'API Play Integrity.

Ricevi le risposte fino al ritiro completo

Se non hai ancora eseguito la migrazione all'API Play Integrity o hai rimosso SafetyNetAttestation entro la scadenza della migrazione (31 gennaio 2024), puoi compilare questo modulo per richiedere un'estensione. In caso di approvazione di un'estensione, la tua app continuerà a ricevere risposte da SafetyNet Attestation fino alla scadenza completa della disattivazione (31 gennaio 2025).