Utiliser App Check avec le fournisseur de débogage sur Android

Si, après avoir enregistré votre application pour App Check, vous souhaitez exécuter votre application dans un environnement que App Check ne classerait normalement pas comme valide, par exemple, un émulateur pendant le développement ou un environnement d'intégration continue (CI), vous pouvez créer une version de débogage de votre application qui utilise le fournisseur de débogage App Check au lieu d'un véritable fournisseur d'attestation.

Utiliser le fournisseur de débogage dans un émulateur

Pour utiliser le fournisseur de débogage lorsque vous exécutez votre application de manière interactive dans un émulateur (pendant le développement, par exemple) :

  1. Dans le fichier Gradle de votre module (au niveau de l'application) (généralement <project>/<app-module>/build.gradle.kts ou <project>/<app-module>/build.gradle), ajoutez la dépendance pour la bibliothèque App Check pour Android. Nous vous recommandons d'utiliser la Firebase Android BoM pour contrôler la gestion des versions de la bibliothèque.

    dependencies {
        // Import the BoM for the Firebase platform
        implementation(platform("com.google.firebase:firebase-bom:34.13.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")
    }

    En utilisant les Firebase Android BoM, votre application utilisera toujours des versions compatibles des bibliothèques Firebase Android.

    (Autre solution)  Ajouter des dépendances de bibliothèque Firebase sans utiliser la BoM

    Si vous choisissez de ne pas utiliser la Firebase BoM, vous devez spécifier chaque version de la bibliothèque Firebase dans sa ligne de dépendance.

    Notez que si vous utilisez plusieurs bibliothèques Firebase dans votre application, nous vous recommandons vivement d'utiliser la BoM pour gérer les versions de la bibliothèque, ce qui garantit que toutes les versions sont compatibles.

    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. Dans votre version de débogage, configurez App Check pour qu'il utilise la fabrique de fournisseurs de débogage :

    Kotlin

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

    Java

    FirebaseApp.initializeApp(/*context=*/ this);
    FirebaseAppCheck firebaseAppCheck = FirebaseAppCheck.getInstance();
    firebaseAppCheck.installAppCheckProviderFactory(
            DebugAppCheckProviderFactory.getInstance());
  3. Lancez l'application et déclenchez un appel à un service backend Firebase. Un jeton de débogage local sera enregistré lorsque le SDK tentera d'envoyer une requête au backend. Exemple :

    D DebugAppCheckProvider: Enter this debug secret into the allow list in
    the Firebase Console for your project: 123a4567-b89c-12d3-e456-789012345678
  4. Dans la console Firebase, accédez à Sécurité > App Check.

  5. Enregistrez le jeton de débogage que vous venez d'enregistrer.

    1. Dans l'onglet Applications, recherchez votre application.
    2. Dans le menu à trois points de votre application, sélectionnez Gérer les jetons de débogage.
    3. Suivez les instructions à l'écran pour enregistrer votre jeton de débogage.

    Capture d&#39;écran de l&#39;élément de menu &quot;Gérer les jetons de débogage&quot;

Une fois le jeton enregistré, les services backend Firebase l'accepteront comme valide.

Étant donné que ce jeton permet d'accéder à vos ressources Firebase sans appareil valide, il est essentiel de le garder privé. Ne l'intégrez pas à un dépôt public. Si un jeton enregistré est compromis, révoquez-le immédiatement dans la Firebase console.

Utiliser le fournisseur de débogage pour les tests unitaires dans un environnement d'intégration continue

Pour utiliser le fournisseur de débogage pour les tests unitaires dans un environnement d'intégration continue (CI) :

  1. Dans la console Firebase, accédez à Sécurité > App Check.

  2. Créez un jeton de débogage. Vous en aurez besoin à l'étape suivante.

    1. Dans l'onglet Applications, recherchez votre application.
    2. Dans le menu à trois points de votre application, sélectionnez Gérer les jetons de débogage.
    3. Suivez les instructions à l'écran pour créer un jeton de débogage.

    Étant donné que ce jeton permet d'accéder à vos ressources Firebase sans appareil valide, il est essentiel de le garder privé. Ne l'intégrez pas à un dépôt public. Si un jeton enregistré est compromis, révoquez-le immédiatement dans la Firebase console.

    Capture d&#39;écran de l&#39;élément de menu &quot;Gérer les jetons de débogage&quot;

  3. Ajoutez le jeton de débogage que vous venez de créer au magasin de clés sécurisé de votre système d'intégration continue (par exemple, les secrets chiffrés de GitHub Actions ou les variables chiffrées de Travis CI).

  4. Si nécessaire, configurez votre système d'intégration continue pour que votre jeton de débogage soit disponible dans l'environnement d'intégration continue en tant que variable d'environnement. Nommez la variable, par exemple, APP_CHECK_DEBUG_TOKEN_FROM_CI.

  5. Dans le fichier Gradle de votre module (au niveau de l'application) (généralement <project>/<app-module>/build.gradle.kts ou <project>/<app-module>/build.gradle), ajoutez la dépendance pour la bibliothèque App Check pour Android. Nous vous recommandons d'utiliser la Firebase Android BoM pour contrôler la gestion des versions de la bibliothèque.

    Kotlin

    dependencies {
        // Import the BoM for the Firebase platform
        implementation(platform("com.google.firebase:firebase-bom:34.13.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")
    }

    En utilisant les Firebase Android BoM, votre application utilisera toujours des versions compatibles des bibliothèques Firebase Android.

    (Autre solution)  Ajouter des dépendances de bibliothèque Firebase sans utiliser la BoM

    Si vous choisissez de ne pas utiliser la Firebase BoM, vous devez spécifier chaque version de la bibliothèque Firebase dans sa ligne de dépendance.

    Notez que si vous utilisez plusieurs bibliothèques Firebase dans votre application, nous vous recommandons vivement d'utiliser la BoM pour gérer les versions de la bibliothèque, ce qui garantit que toutes les versions sont compatibles.

    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.13.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")
    }

    En utilisant les Firebase Android BoM, votre application utilisera toujours des versions compatibles des bibliothèques Firebase Android.

    (Autre solution)  Ajouter des dépendances de bibliothèque Firebase sans utiliser la BoM

    Si vous choisissez de ne pas utiliser la Firebase BoM, vous devez spécifier chaque version de la bibliothèque Firebase dans sa ligne de dépendance.

    Notez que si vous utilisez plusieurs bibliothèques Firebase dans votre application, nous vous recommandons vivement d'utiliser la BoM pour gérer les versions de la bibliothèque, ce qui garantit que toutes les versions sont compatibles.

    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")
    }

  6. Ajoutez le code suivant à la configuration de votre variante de compilation d'intégration continue :

    testInstrumentationRunnerArguments["firebaseAppCheckDebugSecret"] =
        System.getenv("APP_CHECK_DEBUG_TOKEN_FROM_CI") ?: ""
    
  7. Dans vos classes de test, utilisez le DebugAppCheckTestHelper pour encapsuler tout code nécessitant un App Check jeton :

    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.
                    });
        }
    }
    

Lorsque votre application s'exécute dans un environnement d'intégration continue, les services backend Firebase acceptent le jeton qu'elle envoie comme valide.