Check out what’s new from Firebase@ Google I/O 2021, and join our alpha program for early access to the new Remote Config personalization feature. Learn more

Configurer une application cliente Firebase Cloud Messaging sur Android

Pour écrire votre application cliente Android Firebase Cloud Messaging, utilisez l'API FirebaseMessaging et Android Studio 1.4 ou supérieur avec Gradle. Les instructions de cette page supposent que vous avez terminé les étapes d' ajout de Firebase à votre projet Android .

Les clients FCM nécessitent des appareils exécutant Android 4.1 ou une version ultérieure sur lesquels l'application Google Play Store est également installée, ou un émulateur exécutant Android 4.1 avec les API Google. Notez que vous n'êtes pas limité au déploiement de vos applications Android via Google Play Store.

Configurer le SDK

Cette section couvre les tâches que vous avez peut-être effectuées si vous avez déjà activé d'autres fonctionnalités Firebase pour votre application.

Avant que tu commences

  • Installez ou mettez à jour Android Studio vers sa dernière version.

  • Assurez-vous que votre projet répond aux exigences suivantes :

    • Cible API niveau 16 (Jelly Bean) ou supérieur
    • Utilise Gradle 4.1 ou version ultérieure
    • Utilise Jetpack (AndroidX) , ce qui inclut le respect des exigences de version suivantes :
      • com.android.tools.build:gradle v3.2.1 ou version ultérieure
      • compileSdkVersion 28 ou ultérieure
  • Configurez un appareil physique ou utilisez un émulateur pour exécuter votre application.
    Notez que les SDK Firebase dépendant des services Google Play nécessitent l'installation des services Google Play sur l'appareil ou l'émulateur.

  • Connectez-vous à Firebase à l' aide de votre compte Google.

Si vous n'avez pas encore de projet Android et que vous souhaitez simplement essayer un produit Firebase, vous pouvez télécharger l'un de nos exemples de démarrage rapide .

Créer un projet Firebase

Avant de pouvoir ajouter Firebase à votre application Android, vous devez créer un projet Firebase pour vous connecter à votre application Android. Consultez Comprendre les projets Firebase pour en savoir plus sur les projets Firebase.

Enregistrez votre application avec Firebase

Pour utiliser Firebase dans votre application Android, vous devez enregistrer votre application avec votre projet Firebase. L'enregistrement de votre application est souvent appelé "ajout" de votre application à votre projet.

  1. Accédez à la console Firebase .

  2. Au centre de la page de du projet, cliquez sur l'icône Android ( ) ou sur Ajouter une application pour lancer le workflow de configuration.

  3. Saisissez le nom du package de votre application dans le champ Nom du package Android .

  4. (Facultatif) Saisissez d'autres informations sur l'application : surnom de l'application et certificat de signature de débogage SHA-1 .

  5. Cliquez sur Enregistrer l'application .

Ajouter un fichier de configuration Firebase

  1. Ajoutez le fichier de configuration Android Firebase à votre application :

    1. Cliquez sur Télécharger google-services.json pour obtenir votre fichier de configuration Android Firebase ( google-services.json ).

    2. Déplacez votre fichier de configuration dans le répertoire du module (au niveau de l'application) de votre application.

  2. Pour activer les produits Firebase dans votre application, ajoutez le plug-in google-services à vos fichiers Gradle.

    1. Dans votre fichier Gradle au niveau racine (au niveau du projet) ( build.gradle ), ajoutez des règles pour inclure le plug-in Google Services Gradle. Vérifiez également que vous disposez du référentiel Maven de Google.

      buildscript {
      
        repositories {
          // Check that you have the following line (if not, add it):
          google()  // Google's Maven repository
        }
      
        dependencies {
          // ...
      
          // Add the following line:
          classpath 'com.google.gms:google-services:4.3.8'  // Google Services plugin
        }
      }
      
      allprojects {
        // ...
      
        repositories {
          // Check that you have the following line (if not, add it):
          google()  // Google's Maven repository
          // ...
        }
      }
      
    2. Dans votre fichier Gradle de module (au niveau de l'application) (généralement app/build.gradle ), appliquez le plug-in Google Services Gradle :

      apply plugin: 'com.android.application'
      // Add the following line:
      apply plugin: 'com.google.gms.google-services'  // Google Services plugin
      
      android {
        // ...
      }
      

Ajouter des SDK Firebase à votre application

  1. À l'aide de Firebase Android BoM , déclarez la dépendance de la bibliothèque Android Firebase Cloud Messaging dans votre fichier Gradle de module (au niveau de l'application) (généralement app/build.gradle ).

    Pour une expérience optimale avec Firebase Cloud Messaging, nous vous recommandons d' activer Google Analytics dans votre projet Firebase et d'ajouter le SDK Firebase pour Google Analytics à votre application.

    Java

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:28.1.0')
    
        // Declare the dependencies for the Firebase Cloud Messaging and Analytics libraries
        // When using the BoM, you don't specify versions in Firebase library dependencies
        implementation 'com.google.firebase:firebase-messaging'
        implementation 'com.google.firebase:firebase-analytics'
    }
    

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

    (Alternative) Déclarer les dépendances de la bibliothèque Firebase sans utiliser la nomenclature

    Si vous choisissez de ne pas utiliser la nomenclature de Firebase, 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 fortement d'utiliser la nomenclature pour gérer les versions de la bibliothèque, ce qui garantit que toutes les versions sont compatibles.

    dependencies {
        // Declare the dependencies for the Firebase Cloud Messaging and Analytics libraries
        // When NOT using the BoM, you must specify versions in Firebase library dependencies
        implementation 'com.google.firebase:firebase-messaging:22.0.0'
        implementation 'com.google.firebase:firebase-analytics:19.0.0'
    }
    

    Kotlin+KTX

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:28.1.0')
    
        // Declare the dependencies for the Firebase Cloud Messaging and Analytics libraries
        // When using the BoM, you don't specify versions in Firebase library dependencies
        implementation 'com.google.firebase:firebase-messaging-ktx'
        implementation 'com.google.firebase:firebase-analytics-ktx'
    }
    

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

    (Alternative) Déclarer les dépendances de la bibliothèque Firebase sans utiliser la nomenclature

    Si vous choisissez de ne pas utiliser la nomenclature de Firebase, 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 fortement d'utiliser la nomenclature pour gérer les versions de la bibliothèque, ce qui garantit que toutes les versions sont compatibles.

    dependencies {
        // Declare the dependencies for the Firebase Cloud Messaging and Analytics libraries
        // When NOT using the BoM, you must specify versions in Firebase library dependencies
        implementation 'com.google.firebase:firebase-messaging-ktx:22.0.0'
        implementation 'com.google.firebase:firebase-analytics-ktx:19.0.0'
    }
    

  2. Synchronisez votre application pour vous assurer que toutes les dépendances ont les versions nécessaires.

Modifier le manifeste de votre application

Ajoutez les éléments suivants au manifeste de votre application :

  • Un service qui étend FirebaseMessagingService . Ceci est nécessaire si vous souhaitez gérer les messages au-delà de la réception de notifications sur les applications en arrière-plan. Pour recevoir des notifications dans les applications au premier plan, pour recevoir des données utiles, pour envoyer des messages en amont, etc., vous devez étendre ce service.
  • <service
        android:name=".java.MyFirebaseMessagingService"
        android:exported="false">
        <intent-filter>
            <action android:name="com.google.firebase.MESSAGING_EVENT" />
        </intent-filter>
    </service>
  • (Facultatif) Dans le composant d'application, des éléments de métadonnées pour définir une icône et une couleur de notification par défaut. Android utilise ces valeurs chaque fois que les messages entrants ne définissent pas explicitement l'icône ou la couleur.
  • <!-- Set custom default icon. This is used when no icon is set for incoming notification messages.
         See README(https://goo.gl/l4GJaQ) for more. -->
    <meta-data
        android:name="com.google.firebase.messaging.default_notification_icon"
        android:resource="@drawable/ic_stat_ic_notification" />
    <!-- Set color used with incoming notification messages. This is used when no color is set for the incoming
         notification message. See README(https://goo.gl/6BKBk7) for more. -->
    <meta-data
        android:name="com.google.firebase.messaging.default_notification_color"
        android:resource="@color/colorAccent" />
  • (Facultatif) À partir d'Android 8.0 (API niveau 26) et supérieur,les canaux de notification sont pris en charge et recommandés. FCM fournit un canal de notification par défaut avec des paramètres de base. Si vous préférez créer et utiliser votre propre canal par défaut, définissez default_notification_channel_id sur l'ID de votre objet de canal de notification, comme indiqué ; FCM utilisera cette valeur chaque fois que les messages entrants ne définissent pas explicitement un canal de notification. Pour en savoir plus, voirGérer les canaux de notification .
  • <meta-data
        android:name="com.google.firebase.messaging.default_notification_channel_id"
        android:value="@string/default_notification_channel_id" />

Accéder au jeton d'enregistrement de l'appareil

Au démarrage initial de votre application, le SDK FCM génère un jeton d'enregistrement pour l'instance d'application cliente. Si vous souhaitez cibler des appareils uniques ou créer des groupes d'appareils, vous devrez accéder à ce jeton en étendant FirebaseMessagingService et en onNewToken .

Cette section décrit comment récupérer le jeton et comment surveiller les modifications apportées au jeton. Étant donné que le jeton peut être tourné après le démarrage initial, il est fortement recommandé de récupérer le dernier jeton d'enregistrement mis à jour.

Le jeton d'enregistrement peut changer lorsque :

  • L'application est restaurée sur un nouvel appareil
  • L'utilisateur désinstalle/réinstalle l'application
  • L'utilisateur efface les données de l'application.

Récupérer le jeton d'enregistrement actuel

Lorsque vous devez récupérer le jeton actuel, appelez FirebaseMessaging.getInstance().getToken() :

Java

FirebaseMessaging.getInstance().getToken()
    .addOnCompleteListener(new OnCompleteListener<String>() {
        @Override
        public void onComplete(@NonNull Task<String> task) {
          if (!task.isSuccessful()) {
            Log.w(TAG, "Fetching FCM registration token failed", task.getException());
            return;
          }

          // Get new FCM registration token
          String token = task.getResult();

          // Log and toast
          String msg = getString(R.string.msg_token_fmt, token);
          Log.d(TAG, msg);
          Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show();
        }
    });

Kotlin+KTX

FirebaseMessaging.getInstance().token.addOnCompleteListener(OnCompleteListener { task ->
    if (!task.isSuccessful) {
        Log.w(TAG, "Fetching FCM registration token failed", task.exception)
        return@OnCompleteListener
    }

    // Get new FCM registration token
    val token = task.result

    // Log and toast
    val msg = getString(R.string.msg_token_fmt, token)
    Log.d(TAG, msg)
    Toast.makeText(baseContext, msg, Toast.LENGTH_SHORT).show()
})

Surveiller la génération de jetons

Le rappel onNewToken déclenche chaque fois qu'un nouveau jeton est généré.

Java

/**
 * There are two scenarios when onNewToken is called:
 * 1) When a new token is generated on initial app startup
 * 2) Whenever an existing token is changed
 * Under #2, there are three scenarios when the existing token is changed:
 * A) App is restored to a new device
 * B) User uninstalls/reinstalls the app
 * C) User clears app data
 */
@Override
public void onNewToken(String token) {
    Log.d(TAG, "Refreshed token: " + token);

    // If you want to send messages to this application instance or
    // manage this apps subscriptions on the server side, send the
    // FCM registration token to your app server.
    sendRegistrationToServer(token);
}

Kotlin+KTX

/**
 * Called if the FCM registration token is updated. This may occur if the security of
 * the previous token had been compromised. Note that this is called when the
 * FCM registration token is initially generated so this is where you would retrieve the token.
 */
override fun onNewToken(token: String) {
    Log.d(TAG, "Refreshed token: $token")

    // If you want to send messages to this application instance or
    // manage this apps subscriptions on the server side, send the
    // FCM registration token to your app server.
    sendRegistrationToServer(token)
}

Une fois que vous avez obtenu le jeton, vous pouvez l'envoyer à votre serveur d'applications et le stocker en utilisant votre méthode préférée.

Rechercher les services Google Play

Les applications qui reposent sur le SDK des services Play doivent toujours rechercher sur l'appareil un APK compatible avec les services Google Play avant d'accéder aux fonctionnalités des services Google Play. Il est recommandé de le faire à deux endroits : dans la méthode onCreate() l'activité principale et dans sa méthode onResume() . La vérification onCreate() garantit que l'application ne peut pas être utilisée sans une vérification réussie. La vérification onResume() garantit que si l'utilisateur revient à l'application en cours d'exécution par d'autres moyens, tels que le bouton de retour, la vérification est toujours effectuée.

Si l'appareil ne dispose pas d'une version compatible des services Google Play, votre application peut appeler GoogleApiAvailability.makeGooglePlayServicesAvailable() pour permettre aux utilisateurs de télécharger les services Google Play depuis le Play Store.

Empêcher l'initialisation automatique

Lorsqu'un jeton d'enregistrement FCM est généré, la bibliothèque télécharge l'identifiant et les données de configuration sur Firebase. Si vous préférez empêcher la génération automatique de jetons, désactivez la collecte Analytics et l'initialisation automatique FCM (vous devez désactiver les deux) en ajoutant ces valeurs de métadonnées à votre AndroidManifest.xml :

<meta-data
    android:name="firebase_messaging_auto_init_enabled"
    android:value="false" />
<meta-data
    android:name="firebase_analytics_collection_enabled"
    android:value="false" />

Pour réactiver l'initialisation automatique du FCM, effectuez un appel d'exécution :

Java

FirebaseMessaging.getInstance().setAutoInitEnabled(true);

Kotlin+KTX

Firebase.messaging.isAutoInitEnabled = true

Pour réactiver la collection Analytics, appelez la méthode setAnalyticsCollectionEnabled() de la classe FirebaseAnalytics . Par example:

setAnalyticsCollectionEnabled(true);

Ces valeurs persistent lors des redémarrages de l'application une fois définies.

Prochaines étapes

Une fois l'application cliente configurée, vous êtes prêt à commencer à envoyer des messages en aval avec le composeur de notifications . Cette fonctionnalité est illustrée dans l' exemple de démarrage rapide , que vous pouvez télécharger, exécuter et consulter.

Pour ajouter d'autres comportements plus avancés à votre application, vous pouvez déclarer un filtre d'intention et implémenter une activité pour répondre aux messages entrants. Pour plus de détails, consultez les guides d'envoi de messages depuis un serveur d'applications :

Gardez à l'esprit que, pour profiter de ces fonctionnalités, vous aurez besoin d'une implémentation serveur et des protocoles de serveur (HTTP ou XMPP), ou d'une implémentation du SDK Admin .