Utiliser App Check pour sécuriser le SDK Navigation pour Android

Firebase App Check protège les appels de votre application vers Google Maps Platform en bloquant le trafic provenant de sources autres que vos applications légitimes. Pour ce faire, il demande à un fournisseur d'attestation tel que Play Integrity d'évaluer l'authenticité de l'application ou de l'appareil. Lorsque vous intégrez votre application à App Check, vous ajoutez une protection contre les requêtes malveillantes et non autorisées, ce qui protège votre facturation contre les débits non autorisés. App Check améliore également de manière significative le signalement des perturbations en temps réel dans l'écosystème de votre application de gestion de flotte, ce qui profite à tous les conducteurs qui l'utilisent. Pour en savoir plus, consultez Signaler des perturbations.

Pourquoi utiliser App Check ?

App Check protège deux zones distinctes du SDK Navigation pour Android : la fonctionnalité de navigation principale et le signalement des perturbations.

App Check permet de bloquer les requêtes principales du SDK Navigation pour Android provenant de sources malveillantes ou non autorisées. Cela vous profite directement en protégeant votre projet contre la fraude à la facturation et l'épuisement des quotas.

Signalement des perturbations

App Check est vivement recommandé si votre application permet de signaler des perturbations en temps réel et de voter. En activant App Check, vous vous assurez que vos conducteurs bénéficient des itinéraires les plus précis, en tenant compte de tous les commentaires en temps réel.

Pourquoi App Check est important pour les rapports :

  • Niveau de confiance élevé pour les fermetures : les événements ayant un impact sur l'itinéraire, comme les routes fermées, peuvent modifier considérablement le comportement de l'itinéraire pour tous les conducteurs. Pour protéger la carte contre d'éventuels actes de vandalisme, du spam ou des signalements inexacts, l'infrastructure de modération de Google pour les perturbations liées aux routes fermées s'appuie sur des signaux d'intégrité forts de l'appareil et de l'application.
  • Comment App Check valide les signalements : les signalements et les votes des utilisateurs envoyés depuis le SDK Navigation pour Android incluent le jeton App Check, qui est utilisé par le backend de Google pour valider la légitimité des commentaires, ce qui augmente leur niveau de confiance et permet de les évaluer pour l'impact sur la carte en ligne.
  • Impact de l'omission d'App Check : les rapports envoyés sans jeton App Check valide sont évalués selon un modèle de confiance inférieur et peuvent être traités uniquement comme des signaux silencieux. Cela signifie que même si vos utilisateurs peuvent toujours signaler des incidents et voter, leurs signalements sont moins susceptibles d'être visibles sur la carte ou d'affecter les itinéraires des autres conducteurs, et nécessiteront une validation supplémentaire.

App Check est-il adapté à mes besoins ?

App Check est recommandé dans la plupart des cas. Toutefois, il n'est pas nécessaire ni compatible dans les scénarios suivants :

  • Applications privées ou expérimentales : si votre application n'est pas accessible au public, App Check n'est pas nécessaire.
  • Appareils dont la sécurité est compromise : les fournisseurs d'attestation recommandés empêchent le SDK Navigation pour Android de s'exécuter sur des appareils non fiables, tels que les téléphones rootés ou jailbreakés. Pour prendre en charge ces appareils, déployez un fournisseur d'attestation personnalisé.
  • Appareils Android non GMS : les appareils Android doivent exécuter les services Google Mobile (GMS) pour Play Integrity. Si vous prévoyez de prendre en charge des appareils Android non GMS, déployez un fournisseur d'attestation personnalisé.

Présentation des étapes d'implémentation

De manière générale, vous devez suivre ces étapes pour intégrer votre application à App Check :

  1. Ajoutez Firebase à votre application.
  2. Ajoutez la bibliothèque App Check et initialisez App Check.
  3. Ajoutez un fournisseur de jetons. Cette étape appelle le fournisseur d'attestation de votre choix pour vérifier l'intégrité de l'appareil ou de l'application.
  4. Initialisez les API Navigation et App Check.
  5. Activez le débogage. Cela est utile pendant le développement ou dans les environnements d'intégration continue (CI).
  6. Surveillez les requêtes de votre application avant d'activer l'application des règles. De cette façon, vous appliquez App Check de manière fluide sans perturber vos utilisateurs.

Éléments à prendre en compte lors de la planification d'une intégration d'App Check

  • Quotas du fournisseur d'attestation : le fournisseur d'attestation que nous recommandons, Play Integrity, applique une limite d'appels quotidienne pour son niveau d'utilisation de l'API standard. Pour en savoir plus sur les limites d'appels, consultez la page Configuration de la documentation pour les développeurs Google Play Integrity.
  • Latence au démarrage : dans la plupart des cas, les utilisateurs ne subissent pas de latence lors d'une utilisation normale, car les jetons App Check sont mis en cache sur l'appareil. Le système actualise automatiquement les jetons App Check en arrière-plan avant leur expiration pour maintenir des performances optimales. Toutefois, si aucun jeton App Check valide n'est présent, les utilisateurs de votre application subiront une certaine latence au démarrage. Par exemple, cette latence se produit lors des démarrages à froid lorsqu'un jeton mis en cache a expiré ou est manquant.
  • TTL du jeton : la valeur TTL (Time To Live) détermine la durée de validité du jeton App Check avant qu'il ne doive être actualisé. Vous pouvez configurer cette durée de 30 minutes à 7 jours dans la console Firebase. Une durée d'une heure est recommandée comme référence sécurisée, mais le SDK tente automatiquement d'actualiser en arrière-plan à environ la moitié de la durée de la valeur TTL. Pour obtenir des instructions détaillées sur la console, consultez la documentation de Firebase App Check.

Intégrer votre application à App Check

Prérequis et exigences

  • Une application avec le SDK Navigation pour Android version 7.9 ou ultérieure installé.
  • Empreinte du certificat SHA-256 de votre application.
  • Nom du package de votre application.
  • Vous devez être le propriétaire de l'application dans la console Google Cloud.
  • ID du projet de votre application dans la console Google Cloud.

Étape 1 : Ajoutez Firebase à votre application

Suivez les instructions de la documentation pour les développeurs Firebase pour ajouter Firebase à votre application. Ajoutez votre fichier google-services.json au répertoire au niveau de l'application de votre projet.

Étape 2 : Ajoutez la bibliothèque App Check et initialisez App Check

Ajoutez la dépendance App Check au fichier build.gradle de votre application :

Groovy (build.gradle)

dependencies {
    // Import the Firebase BoM
    implementation platform('com.google.firebase:firebase-bom:34.17.0')
    // Add the dependency for the App Check library with Play Integrity
    implementation 'com.google.firebase:firebase-appcheck-playintegrity'
}

Initialisez App Check dans votre classe Application ou votre activité principale :

Java

import com.google.firebase.FirebaseApp;
import com.google.firebase.appcheck.FirebaseAppCheck;
import com.google.firebase.appcheck.playintegrity.PlayIntegrityAppCheckProviderFactory;

// Initialize Firebase App
FirebaseApp.initializeApp(/* context= */ this);

// Initialize App Check
FirebaseAppCheck firebaseAppCheck = FirebaseAppCheck.getInstance();
firebaseAppCheck.installAppCheckProviderFactory(
    PlayIntegrityAppCheckProviderFactory.getInstance());

Kotlin

import com.google.firebase.Firebase
import com.google.firebase.appcheck.appCheck
import com.google.firebase.appcheck.playintegrity.PlayIntegrityAppCheckProviderFactory
import com.google.firebase.initialize

// Initialize Firebase App
Firebase.initialize(context = this)

// Initialize App Check
Firebase.appCheck.installAppCheckProviderFactory(
    PlayIntegrityAppCheckProviderFactory.getInstance(),
)

Étape 3 : Ajoutez le fournisseur de jetons

Créez une implémentation de l'interface MapsAppCheckTokenProvider. Ce fournisseur récupère de manière asynchrone les jetons App Check à partir de Firebase App Check et les transmet à la pile réseau du SDK Navigation pour Android à l'aide de MapsAppCheckTokenCallback :

Java

import com.google.android.gms.maps.MapsAppCheckTokenCallback;
import com.google.android.gms.maps.MapsAppCheckTokenProvider;
import com.google.firebase.appcheck.FirebaseAppCheck;

public class NavigationTokenProvider implements MapsAppCheckTokenProvider {
  @Override
  public void fetchToken(MapsAppCheckTokenCallback callback) {
    FirebaseAppCheck.getInstance()
        .getAppCheckToken(false) // forcingRefresh = false
        .addOnSuccessListener(
            tokenResult -> {
              String token = tokenResult.getToken();
              callback.onSuccess(token);
            })
        .addOnFailureListener(
            e -> {
              callback.onFailure();
            });
  }
}

Kotlin

import com.google.android.gms.maps.MapsAppCheckTokenCallback
import com.google.android.gms.maps.MapsAppCheckTokenProvider
import com.google.firebase.appcheck.FirebaseAppCheck

class NavigationTokenProvider : MapsAppCheckTokenProvider {
    override fun fetchToken(callback: MapsAppCheckTokenCallback) {
        FirebaseAppCheck.getInstance()
            .getAppCheckToken(false)
            .addOnSuccessListener { tokenResult ->
                callback.onSuccess(tokenResult.token)
            }
            .addOnFailureListener {
                callback.onFailure()
            }
    }
}

Étape 4 : Initialiser les API Navigation et App Check

Initialisez le SDK Navigation pour Android et enregistrez votre instance de fournisseur de jetons unifié à l'aide de MapsApiSettings.setAppCheckTokenProvider() :

Java

import com.google.android.gms.maps.MapsApiSettings;

// Register your App Check token provider before initializing Navigation SDK for Android
MapsApiSettings.setAppCheckTokenProvider(context, new NavigationTokenProvider());

Kotlin

import com.google.android.gms.maps.MapsApiSettings

// Register your App Check token provider before initializing Navigation SDK for Android
MapsApiSettings.setAppCheckTokenProvider(context, NavigationTokenProvider())

Étape 5 : Activez le débogage (facultatif)

Une fois qu'App Check est appliqué au SDK Navigation pour Android, les fonctionnalités de votre application qui dépendent du SDK Navigation pour Android ne s'exécutent pas dans un simulateur ni dans un environnement d'intégration continue (CI), car ces environnements ne sont pas considérés comme des appareils valides. Pour exécuter votre application dans ces environnements pendant le développement et les tests, vous devez créer une version de débogage de votre application qui utilise le fournisseur de débogage App Check au lieu d'un fournisseur d'attestation de production.

  1. Ajoutez la dépendance du fournisseur de débogage au fichier build.gradle de votre application :

    Groovy (build.gradle)

    dependencies {
        implementation 'com.google.firebase:firebase-appcheck-debug'
    }
  2. Configurez App Check pour qu'il utilise la fabrique de fournisseurs de débogage dans vos versions de débogage :

    Java

    import com.google.firebase.appcheck.debug.DebugAppCheckProviderFactory;
    import com.google.firebase.appcheck.playintegrity.PlayIntegrityAppCheckProviderFactory;
    
    if (BuildConfig.DEBUG) {
        firebaseAppCheck.installAppCheckProviderFactory(
            DebugAppCheckProviderFactory.getInstance()
        );
    } else {
        firebaseAppCheck.installAppCheckProviderFactory(
            PlayIntegrityAppCheckProviderFactory.getInstance()
        );
    }

    Kotlin

    import com.google.firebase.Firebase
    import com.google.firebase.appcheck.appCheck
    import com.google.firebase.appcheck.debug.DebugAppCheckProviderFactory
    import com.google.firebase.appcheck.playintegrity.PlayIntegrityAppCheckProviderFactory
    
    if (BuildConfig.DEBUG) {
        Firebase.appCheck.installAppCheckProviderFactory(
            DebugAppCheckProviderFactory.getInstance(),
        )
    } else {
        Firebase.appCheck.installAppCheckProviderFactory(
            PlayIntegrityAppCheckProviderFactory.getInstance(),
        )
    }
  3. Lancez votre application sur un émulateur ou un appareil de débogage. App Check affichera un jeton de débogage local dans votre sortie logcat.
  4. Copiez et enregistrez ce jeton de débogage dans la console Firebase. Pour en savoir plus, consultez la documentation sur le fournisseur de débogage Firebase App Check.

Étape 6 : Surveillez les demandes d'application et décidez des mesures à prendre

Avant d'activer l'application, surveillez les requêtes de votre application pour vous assurer que vous ne perturberez pas les utilisateurs légitimes.

  1. Accédez à l'écran des métriques App Check dans la console Firebase pour voir le pourcentage de trafic validé par rapport au trafic non validé.
  2. Une fois que vous êtes sûr que la majorité de votre trafic est validée et que les utilisateurs légitimes ont installé une version de votre application contenant votre implémentation d'App Check, activez l'application.
  3. Une fois l'application activée, App Check refusera tout le trafic sans jeton App Check valide.