Utilizzare App Check con il provider di debug su Android

Se, dopo aver registrato l'app per App Check, vuoi eseguire la tua app in un ambiente che App Check normalmente non classificherebbe come valido, ad esempio un emulatore durante lo sviluppo o un ambiente di integrazione continua (CI), puoi creare una build di debug dell'app che utilizza il provider di debug di App Check anziché un provider di attestazione reale.

Utilizzare il provider di debug in un emulatore

Per utilizzare il provider di debug durante l'esecuzione interattiva dell'app in un emulatore (ad esempio durante lo sviluppo):

  1. Nel file Gradle del modulo (a livello di app) (in genere <project>/<app-module>/build.gradle.kts o <project>/<app-module>/build.gradle), aggiungi la dipendenza per la libreria App Check per Android. Ti consigliamo di utilizzare la Firebase Android BoM per controllare il controllo delle versioni della libreria.

    dependencies {
        // Import the BoM for the Firebase platform
        implementation(platform("com.google.firebase:firebase-bom:34.11.0"))
    
        // Add the dependencies for the App Check libraries
        // When using the BoM, you don't specify versions in Firebase library dependencies
        implementation("com.google.firebase:firebase-appcheck-debug")
    }

    Con la Firebase Android BoM, la tua app utilizzerà sempre versioni compatibili delle librerie Firebase Android.

    (Alternativa)  Aggiungere dipendenze della libreria Firebase senza utilizzare la BoM

    Se scegli di non utilizzare la Firebase BoM, devi specificare la versione di ogni libreria Firebase nella riga di dipendenza.

    Tieni presente che, se utilizzi più librerie Firebase nella tua app, ti consigliamo vivamente di utilizzare la BoM per gestire le versioni delle librerie, in modo da garantire che tutte le versioni siano compatibili.

    dependencies {
        // Add the dependencies for the App Check libraries
        // When NOT using the BoM, you must specify versions in Firebase library dependencies
        implementation("com.google.firebase:firebase-appcheck-debug:19.0.2")
    }

  2. Nella build di debug, configura App Check in modo che utilizzi la factory del provider di debug:

    Kotlin

    Firebase.initialize(context = this)
    Firebase.appCheck.installAppCheckProviderFactory(
        DebugAppCheckProviderFactory.getInstance(),
    )

    Java

    FirebaseApp.initializeApp(/*context=*/ this);
    FirebaseAppCheck firebaseAppCheck = FirebaseAppCheck.getInstance();
    firebaseAppCheck.installAppCheckProviderFactory(
            DebugAppCheckProviderFactory.getInstance());
  3. Avvia l'app e attiva una chiamata a un servizio di backend Firebase. Quando l'SDK tenta di inviare una richiesta al backend, viene registrato un token di debug locale. Ad esempio:

    D DebugAppCheckProvider: Enter this debug secret into the allow list in
    the Firebase Console for your project: 123a4567-b89c-12d3-e456-789012345678
  4. Nella sezione App Check della console Firebase, scegli Gestisci token di debug dal menu overflow dell'app. Quindi, registra il token di debug a cui ti sei connesso nel passaggio precedente.

    Screenshot della voce di menu Gestisci token di debug

Dopo aver registrato il token, i servizi di backend Firebase lo accetteranno come valido.

Poiché questo token consente l'accesso alle risorse Firebase senza un dispositivo valido, è fondamentale mantenerlo privato. Non eseguirne il commit in un repository pubblico e, se un token registrato viene compromesso, revocalo immediatamente nella Firebase console.

Utilizzare il provider di debug per i test delle unità in un ambiente CI

Per utilizzare il provider di debug per i test delle unità in un ambiente di integrazione continua (CI):

  1. Nella sezione App Check della console Firebase, scegli Gestisci token di debug dal menu overflow dell'app. Quindi, crea un nuovo token di debug. Avrai bisogno del token nel passaggio successivo.

    Poiché questo token consente l'accesso alle risorse Firebase senza un dispositivo valido, è fondamentale mantenerlo privato. Non eseguirne il commit in un repository pubblico e, se un token registrato viene compromesso, revocalo immediatamente nella Firebase console.

    Screenshot della voce di menu Gestisci token di debug

  2. Aggiungi il token di debug appena creato all'archivio chiavi sicuro del sistema CI (ad esempio, i secret criptati di GitHub Actions o le variabili criptate di Travis CI).

  3. Se necessario, configura il sistema CI in modo che il token di debug sia disponibile nell'ambiente CI come variabile di ambiente. Assegna alla variabile un nome simile a APP_CHECK_DEBUG_TOKEN_FROM_CI.

  4. Nel file Gradle del modulo (a livello di app) (in genere <project>/<app-module>/build.gradle.kts o <project>/<app-module>/build.gradle), aggiungi la dipendenza per la libreria App Check per Android. Ti consigliamo di utilizzare la Firebase Android BoM per controllare il controllo delle versioni della libreria.

    Kotlin

    dependencies {
        // Import the BoM for the Firebase platform
        implementation(platform("com.google.firebase:firebase-bom:34.11.0"))
    
        // Add the dependency for the App Check library
        // When using the BoM, you don't specify versions in Firebase library dependencies
        implementation("com.google.firebase:firebase-appcheck-debug")
    }

    Con la Firebase Android BoM, la tua app utilizzerà sempre versioni compatibili delle librerie Firebase Android.

    (Alternativa)  Aggiungere dipendenze della libreria Firebase senza utilizzare la BoM

    Se scegli di non utilizzare la Firebase BoM, devi specificare la versione di ogni libreria Firebase nella riga di dipendenza.

    Tieni presente che, se utilizzi più librerie Firebase nella tua app, ti consigliamo vivamente di utilizzare la BoM per gestire le versioni delle librerie, in modo da garantire che tutte le versioni siano compatibili.

    dependencies {
        // Add the dependency for the App Check library
        // When NOT using the BoM, you must specify versions in Firebase library dependencies
        implementation("com.google.firebase:firebase-appcheck-debug:19.0.2")
    }

    Java

    dependencies {
        // Import the BoM for the Firebase platform
        implementation(platform("com.google.firebase:firebase-bom:34.11.0"))
    
        // Add the dependency for the App Check library
        // When using the BoM, you don't specify versions in Firebase library dependencies
        implementation("com.google.firebase:firebase-appcheck-debug")
    }

    Con la Firebase Android BoM, la tua app utilizzerà sempre versioni compatibili delle librerie Firebase Android.

    (Alternativa)  Aggiungere dipendenze della libreria Firebase senza utilizzare la BoM

    Se scegli di non utilizzare la Firebase BoM, devi specificare la versione di ogni libreria Firebase nella riga di dipendenza.

    Tieni presente che, se utilizzi più librerie Firebase nella tua app, ti consigliamo vivamente di utilizzare la BoM per gestire le versioni delle librerie, in modo da garantire che tutte le versioni siano compatibili.

    dependencies {
        // Add the dependency for the App Check library
        // When NOT using the BoM, you must specify versions in Firebase library dependencies
        implementation("com.google.firebase:firebase-appcheck-debug:19.0.2")
    }

  5. Aggiungi quanto segue alla configurazione della variante di compilazione CI:

    testInstrumentationRunnerArguments["firebaseAppCheckDebugSecret"] =
        System.getenv("APP_CHECK_DEBUG_TOKEN_FROM_CI") ?: ""
    
  6. Nelle classi di test, utilizza DebugAppCheckTestHelper per eseguire il wrapping di qualsiasi codice che richieda un App Check token:

    Kotlin

    @RunWith(AndroidJunit4::class)
    class MyTests {
        private val debugAppCheckTestHelper =
            DebugAppCheckTestHelper.fromInstrumentationArgs()
    
        @Test
        fun testWithDefaultApp() {
            debugAppCheckTestHelper.withDebugProvider {
                // Test code that requires a debug AppCheckToken.
            }
        }
    
        @Test
        fun testWithNonDefaultApp() {
            debugAppCheckTestHelper.withDebugProvider(
                FirebaseApp.getInstance("nonDefaultApp")
            ) {
                // Test code that requires a debug AppCheckToken.
            }
        }
    }
    

    Java

    @RunWith(AndroidJunit4.class)
    public class YourTests {
        private final DebugAppCheckTestHelper debugAppCheckTestHelper =
                DebugAppCheckTestHelper.fromInstrumentationArgs();
    
        @Test
        public void testWithDefaultApp() {
            debugAppCheckTestHelper.withDebugProvider(() -> {
                // Test code that requires a debug AppCheckToken.
            });
        }
    
        @Test
        public void testWithNonDefaultApp() {
            debugAppCheckTestHelper.withDebugProvider(
                    FirebaseApp.getInstance("nonDefaultApp"),
                    () -> {
                        // Test code that requires a debug AppCheckToken.
                    });
        }
    }
    

Quando l'app viene eseguita in un ambiente CI, i servizi di backend Firebase accettano il token inviato come valido.