Android avancé dans Kotlin 01.2: Android Cloud Messaging Firebase

Cet atelier de programmation fait partie du cours "Advanced Android" en langage Kotlin. Vous tirerez pleinement parti de ce cours si vous suivez les ateliers en séquence, mais ce n'est pas obligatoire. Tous les ateliers de programmation du cours sont répertoriés sur la page de destination des ateliers de programmation Android avancés sur Kotlin.

Introduction

Dans l'atelier de programmation précédent, vous avez ajouté des notifications à votre minuteur qui sont créées et déclenchées dans votre application. Autre exemple important de notifications : vous pouvez envoyer des notifications push à distance, même lorsque votre application n'est pas en cours d'exécution.

Qu'est-ce qu'une notification push ?

Les notifications push sont des notifications que le serveur transmet aux appareils mobiles. Ils peuvent être distribués sur un appareil, que votre application soit en cours d'exécution ou non.

Les notifications push sont un excellent moyen de informer les utilisateurs d'une mise à jour ou de leur rappeler une tâche ou une fonctionnalité. Imaginez qu'un produit soit de nouveau en stock. Ainsi, vous n'avez plus à vérifier l'état de vos stocks au quotidien.

Les notifications push utilisent le modèle publish/subscribe qui permet aux applications backend de transmettre du contenu pertinent aux clients intéressés. Sans le modèle "Publier/S'abonner", les utilisateurs de votre application doivent régulièrement vérifier si des mises à jour sont disponibles. Ce processus est fastidieux et peu fiable pour les utilisateurs. De plus, à mesure que le nombre de clients augmente, ces vérifications périodiques imposent une charge trop importante aux ressources de mise en réseau et de traitement, aussi bien pour le serveur de votre application que pour l'appareil de l'utilisateur.

Comme avec tous les autres types de notifications, veillez à respecter vos utilisateurs grâce aux notifications push. Si le contenu des notifications n'est pas intéressant ou opportun pour l'utilisateur, il peut facilement désactiver toutes les notifications de votre application.

Présentation de Firebase Cloud Messaging

Firebase Cloud Messaging fait partie de la plate-forme Firebase pour le développement sur mobile. En règle générale, vous devez configurer un serveur qui peut communiquer avec les appareils mobiles pour déclencher des notifications. Avec Firebase Cloud Messaging, vous pouvez envoyer des notifications à tous les utilisateurs de votre application installée, ou à certains d'entre eux, sans configurer de serveur. Par exemple, vous pouvez envoyer un rappel aux utilisateurs ou leur offrir une promotion spéciale, comme un cadeau.Vous pouvez envoyer une notification à distance sur un ou plusieurs appareils.

Vous pouvez également utiliser Firebase Cloud Messages pour transférer des données depuis votre application backend ou depuis un projet Firebase vers vos utilisateurs.

Dans cet atelier de programmation, vous apprendrez à utiliser Firebase Cloud Messaging pour envoyer des notifications push à votre application Android, ainsi que des données.

Si vous rencontrez des problèmes (bugs de code, erreurs grammaticales, formulation peu claire, etc.) au cours de cet atelier de programmation, veuillez les signaler via le lien Signaler une erreur situé dans l'angle inférieur gauche de l'atelier de programmation.

Ce que vous devez déjà savoir

Vous devez être au fait:

  • Créer des applications Android en langage Kotlin et plus particulièrement le SDK Android.
  • Concevoir une application à l'aide de composants d'architecture et de liaison de données
  • Connaissances de base des récepteurs de radiodiffusion
  • Connaissances de base sur AlarmManager
  • Créer et envoyer des notifications avec NotificationManager

Points abordés

  • Comment transférer des messages à l'utilisateur via Firebase Cloud Messaging
  • Envoyer des données d'un backend à votre application à l'aide de messages de données (intégré à Firebase Cloud Messaging)

Objectifs de l'atelier

  • Ajouter des notifications push à l'application de départ
  • Gérez Firebase Cloud Messaging lorsque votre application est en cours d'exécution.
  • Transférez des données avec Firebase Cloud Messaging

Dans cet atelier de programmation, vous allez travailler sur le code de l'atelier de programmation précédent "Utiliser les notifications" dans Android Apps. Dans l'atelier de programmation précédent, vous avez créé une application de minuteur qui envoie des notifications lorsque le minuteur de cuisson est écoulé. Dans cet atelier de programmation, vous allez ajouter Firebase Cloud Messaging pour envoyer des notifications push aux utilisateurs de votre application afin de leur rappeler de manger des œufs.

Pour obtenir l'exemple d'application, vous pouvez:

Clonez le dépôt depuis GitHub et passez à la branche starter:

$  git clone https://github.com/googlecodelabs/android-kotlin-notifications-fcm


Vous pouvez également télécharger le dépôt sous forme de fichier ZIP, le décompresser et l'ouvrir dans Android Studio.

Télécharger le fichier ZIP

Étape 1: Créer un projet Firebase

Avant de pouvoir ajouter Firebase à votre application Android, vous devez créer un projet Firebase à associer à votre application Android.

  1. Connectez-vous à la console Firebase.
  2. Cliquez sur Ajouter un projet, puis sélectionnez ou saisissez un nom de projet. Nommez votre projet fcm-codelab.
  3. Cliquez sur Continuer.
  4. Vous pouvez également ignorer Google Analytics en désactivant le bouton Activer Google Analytics pour ce projet.
  5. Cliquez sur Créer un projet pour terminer la configuration du projet Firebase.

Étape 2: Enregistrez votre application auprès de Firebase

Maintenant que vous disposez d'un projet Firebase, vous pouvez y ajouter votre application Android.

  1. Au centre de la page de présentation du projet Firebase, cliquez sur l'icône Android pour lancer le processus de configuration.

  1. Dans le champ Nom du package Android, saisissez com.example.android.eggtimernotifications.
  2. Cliquez sur Enregistrer l'application.

Important: Vérifiez l'ID correct de votre application, car vous ne pourrez pas ajouter ni modifier cette valeur une fois que vous aurez enregistré votre application dans votre projet Firebase.

Étape 3: Ajoutez le fichier de configuration Firebase à votre projet

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

  1. Cliquez sur Télécharger google-services.json pour obtenir votre fichier de configuration Firebase pour Android (google-services.json). Assurez-vous que le fichier de configuration n'est pas ajouté avec des caractères supplémentaires et qu'il porte exactement le nom google-services.json.
  2. Déplacez votre fichier de configuration dans le répertoire des modules (au niveau de l'application) de votre application.

Étape 4: Configurez votre projet Android pour activer les produits Firebase

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

  1. Dans votre fichier Gradle au niveau du projet (build.gradle), vérifiez que vous disposez du dépôt Maven de Google.
  2. Ajoutez ensuite des règles pour inclure le plug-in Google Services.

build.gradle

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.2'  // Google Services plugin
  }
}

allprojects {
  // ...

  repositories {
    // Check that you have the following line (if not, add it):
    google()  // Google's Maven repository
    // ...
  }
}
  1. Dans le fichier Gradle de votre module (au niveau de l'application, généralement app/build.gradle), ajoutez une ligne pour appliquer le plug-in au bas du fichier.

app/build.gradle

apply plugin: 'com.android.application'

android {
  // ...
}

// Add the following line to the bottom of the file:
apply plugin: 'com.google.gms.google-services'  // Google Play services Gradle plugin

Dans cette tâche, vous allez ajouter Firebase Cloud Messaging (FCM) à votre projet pour utiliser les notifications push.

Le code de service Android pour FCM de cet atelier de programmation est indiqué dans MyFirebaseMessagingService.kt. Au cours des étapes suivantes, vous allez ajouter du code à votre application Android.

Vous utiliserez l'outil Notifications Composer pour tester votre implémentation. L'outil de rédaction de notifications vous aide à rédiger et à envoyer des messages à partir du site Web de la console Firebase.

  1. Ouvrir MyFirebaseMessagingService.kt
  2. Inspectez le fichier et, en particulier, les fonctions suivantes:
  • onNewToken() : appelé automatiquement si votre service est enregistré dans le fichier manifeste Android Cette fonction est appelée lorsque vous exécutez votre application pour la première fois et chaque fois que Firebase émet un nouveau jeton pour votre application. Un jeton est une clé d'accès à votre projet backend Firebase. Il est généré pour votre appareil client spécifique. Ce jeton permet à Firebase de savoir à quel client le backend doit envoyer des messages. Firebase sait également si ce client est valide et peut accéder à ce projet Firebase.
  • onMessageReceived : appelée lorsque votre application est en cours d'exécution et que Firebase lui envoie un message. Cette fonction reçoit un objet RemoteMessage qui peut transmettre une notification ou une charge utile de message de données. Vous en apprendrez plus sur les différences entre les notifications et les charges utiles de message de données plus tard dans cet atelier de programmation.

Étape 1: Envoyez des notifications FCM à un seul appareil

La console Notifications vous permet de tester l'envoi de notifications. Pour envoyer un message à un appareil spécifique à l'aide de la console, vous devez connaître le jeton d'enregistrement de cet appareil.

Lorsque le backend Firebase génère un jeton nouveau ou actualisé, la fonction onNewToken() est appelée, et le nouveau jeton est transmis en tant qu'argument. Si vous voulez cibler un seul appareil ou créer un groupe d'appareils auxquels vous souhaitez envoyer un message d'annonce, vous devez accéder à ce jeton en étendant FirebaseMessagingService et en remplaçant onNewToken().

  1. Ouvrez AndroidManifest.xml et annulez la mise en commentaire du code suivant afin d'activer le MyFirebaseMessagingService pour l'application Minuteur d'œuf. Les métadonnées du service dans le fichier manifeste Android enregistrent MyFirebaseMessagingService en tant que service et ajoute un filtre d'intent pour que ce service reçoive les messages envoyés par FCM. La dernière partie des métadonnées déclare breakfast_notification_channel_id comme default_notification_channel_id pour Firebase. Vous utiliserez cet identifiant lors de l'étape suivante.
<!-- AndroidManifest.xml -->
<!-- TODO: Step 3.0 uncomment to start the service  -->

        <service
                android:name=".MyFirebaseMessagingService"
                android:exported="false">
            <intent-filter>
                <action android:name="com.google.firebase.MESSAGING_EVENT"/>
            </intent-filter>
        </service>
        <!-- [START fcm_default_icon] -->
        <!--
 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/common_google_signin_btn_icon_dark"/>
        <!--
 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"/> <!-- [END fcm_default_icon] -->
        <!-- [START fcm_default_channel] -->
        <meta-data
            android:name="com.google.firebase.messaging.default_notification_channel_id"
            android:value="@string/breakfast_notification_channel_id" />
        <!-- [END fcm_default_channel] -->

Nous vous recommandons de créer un canal de notification pour la FCM, car vos utilisateurs peuvent activer/désactiver les notifications push ou le minuteur pour l'œuf séparément.

  1. Ouvrez ui/EggTimerFragment.kt . Dans onCreateView(), ajoutez le code de création de chaîne suivant.
// EggTimerFragment.kt

   // TODO: Step 3.1 create a new channel for FCM
    createChannel(
        getString(R.string.breakfast_notification_channel_id),
        getString(R.string.breakfast_notification_channel_name)
    )
  1. Ouvrez MyFirebaseMessagingService.kt et annulez la mise en commentaire de la fonction onNewToken(). Cette fonction est appelée lorsqu'un nouveau jeton est généré.
// MyFirebaseMessagingService.kt

   // TODO: Step 3.2 log registration token
    // [START on_new_token]
    /**
     * Called if InstanceID token is updated. This may occur if the security of
     * the previous token had been compromised. Note that this is called when the     
     * InstanceID 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
        // Instance ID token to your app server.
        sendRegistrationToServer(token)
    }
    // [END on_new_token]
  1. Exécutez le minuteur du minuteur.
  2. Observez logcat (View > Tool Windows > Logcat). Vous devriez voir une ligne de journal affichant votre jeton semblable à celui présenté ci-dessous. Il s'agit du jeton dont vous avez besoin pour envoyer un message à cet appareil. Cette fonction n'est appelée que lorsqu'un nouveau jeton est créé.
2019-07-23 13:09:15.243 2312-2459/com.example.android.eggtimernotifications D/MyFirebaseMsgService: Refreshed token: f2esflBoQbI:APA91bFMzNNFaIskjr6KIV4zKjnPA4hxekmrtbrtba2aDbh593WQnm11ed54Mv6MZ9Yeerver7pzgwfKx7R9BHFffLBItLEgPvrtF0TtX9ToCrXZ5y7Hd-m

Remarque: Si vous ne voyez pas le jeton dans les messages logcat, cela signifie que votre application a peut-être déjà reçu le jeton. Dans ce cas, vous pouvez désinstaller l'application pour recevoir un nouveau jeton.

Vous pouvez à présent effectuer un test en envoyant une notification. Pour envoyer une notification, vous devez utiliser l'éditeur de notifications.

  1. Ouvrez la console Firebase et sélectionnez votre projet.
  2. Ensuite, sélectionnez Cloud Messaging dans le menu de navigation de gauche.
  3. Cliquez sur Envoyer votre premier message.

  1. Saisir Time for Breakfast! comme titre de la notification et Don't forget to eat eggs! comme texte de notification, puis sélectionner Envoyer un message de test. La boîte de dialogue Tester sur l'appareil s'affiche. Vous devez alors fournir un jeton d'inscription FCM.

  1. Copiez votre jeton d'application depuis logcat.

  1. Collez ce jeton dans le champ Ajouter un jeton d'enregistrement FCM de la fenêtre pop-up, puis cliquez sur le bouton Ajouter à côté de celui-ci.
  2. Dans la liste qui s'affiche, sélectionnez le jeton. Le bouton Test doit normalement être activé.

  1. Sur votre appareil, placez l'application Minuteur d'œufs en arrière-plan.
  2. Dans la fenêtre pop-up, cliquez sur Test (Tester).
  1. Une fois que vous avez cliqué sur Tester, l'appareil client cible sur lequel votre application s'exécute en arrière-plan devrait recevoir la notification dans la barre de notifications du système. (Nous verrons plus tard comment gérer les messages FCM lorsque votre application est exécutée au premier plan.)

Tâche: envoyer des notifications FCM à un sujet

Les messages thématiques FCM sont basés sur le modèle publier/s'abonner.

Une application de chat est un bon exemple pour le modèle Publish/Subscribe. Imaginez qu'une application recherche les nouveaux messages toutes les 10 secondes. Non seulement celle-ci décharge la batterie de votre téléphone, mais les ressources réseau inutiles sont utilisées, ce qui crée une charge inutile sur le serveur de l'application. À la place, un appareil client peut s'abonner et recevoir des notifications lorsque de nouveaux messages sont distribués via votre application.

Les thèmes vous permettent d'envoyer un message à plusieurs appareils sur lesquels le sujet en question est activé. Pour les clients, les thèmes sont des sources de données spécifiques qui les intéressent. Pour le serveur, les sujets sont des groupes d'appareils qui ont accepté de recevoir des mises à jour sur une source de données spécifique. Les sujets peuvent être utilisés pour présenter des catégories de notifications, telles que les actualités, les prévisions météo et les résultats sportifs. Dans cette partie de l'atelier de programmation, vous allez créer un sujet pour rappeler aux utilisateurs intéressés de manger des œufs au petit-déjeuner.

Pour vous abonner à un sujet, l'application cliente appelle la fonction Firebase Cloud Messaging subscribeToTopic() avec le nom de sujet breakfast. Cet appel peut avoir deux résultats. Si l'appelant réussit, le rappel OnCompleteListener sera appelé avec le message d'abonnement. Si le client ne s'abonne pas, le rappel reçoit un message d'erreur.

Dans votre application, vous serez abonné automatiquement au sujet du petit déjeuner. Toutefois, il est préférable de donner aux utilisateurs la possibilité de choisir les sujets auxquels ils peuvent s'abonner dans la plupart des applications de production.

  1. Ouvrez EggTimerFragment.kt et recherchez la fonction subscribeTopic() vide.
  2. Obtenez une instance de FirebaseMessaging et appelez la fonction subscibeToTopic() avec le nom du sujet.
  3. Ajoutez un addOnCompleteListener pour recevoir une notification de FCM vous indiquant si votre abonnement a abouti ou non.
// EggTimerFragment.kt

   // TODO: Step 3.3 subscribe to breakfast topic
    private fun subscribeTopic() {
        // [START subscribe_topics]
        FirebaseMessaging.getInstance().subscribeToTopic(TOPIC)
            .addOnCompleteListener { task ->
                var msg = getString(R.string.message_subscribed)
                if (!task.isSuccessful) {
                    msg = getString(R.string.message_subscribe_failed)
                }
                Toast.makeText(context, msg, Toast.LENGTH_SHORT).show()
            }
        // [END subscribe_topics]
    }
  1. Appelez la fonction subscribeTopic() pour vous abonner à un sujet au démarrage de l'application. Faites défiler l'écran jusqu'à onCreateView() et ajoutez un appel au subscribeTopic().
// EggTimerFragment.kt

   // TODO: Step 3.4 call subscribe topics on start
    subscribeTopic()

    return binding.root
  1. Pour vous abonner au sujet du petit déjeuner, exécutez à nouveau l'application. Vous devez voir s'afficher un message dans un toast avec le message "Abonné à ce sujet".

Vous pouvez maintenant tester l'envoi de messages à un sujet:

  1. Ouvrez l'onglet Notifications Composer, puis sélectionnez Compose Notification (Nouveau message).
  2. Définissez le titre de la notification et le texte de la notification comme auparavant.
  3. Cette fois, au lieu d'envoyer le message sur un seul appareil, cliquez sur Sujet sous Cible et saisissez breakfast comme sujet du message.

  1. Sélectionnez Maintenant pour la planification.

  1. Vérifiez que votre application s'exécute en arrière-plan sur votre appareil de test.
  1. Cliquez sur Examiner, puis sur Publier. Si vous pouvez exécuter l'application sur plusieurs appareils, vous pouvez vérifier que la notification est bien reçue sur tous les appareils associés à ce sujet.

L'application propose les notifications pour les notifications suivantes : Egg et Breakfast. Sur un appareil client, effectuez un clic long sur l'icône de l'application, sélectionnez Infos,puis cliquez sur Notifications. Vous devriez voir les canaux de notification Egg et Breakfast, comme illustré dans la capture d'écran suivante. Si vous désélectionnez le mode Petit déjeuner, votre application ne recevra aucune notification envoyée via ce canal.

Lorsque vous utilisez les notifications, n'oubliez pas que les utilisateurs peuvent désactiver un canal de notification à tout moment.

Étape 1: messages de données

Les messages FCM peuvent également contenir une charge utile de données qui traite les messages dans l'application cliente, et utilise des messages de données plutôt que des messages de notification.

Pour gérer les messages de données, vous devez gérer la charge utile de données dans la fonction onMessageReceived() de MyFirebaseMessagingService. La charge utile est stockée dans la propriété data de l'objet remoteMessage. L'objet remoteMessage et la propriété data peuvent être null.

  1. Ouvrir MyFirebaseMessagingService.
  2. Vérifiez si la propriété data de l'objet remoteMessage présente une valeur et imprimez les données dans le journal.
// MyFirebaseMessagingService.kt

    // [START receive_message]
    override fun onMessageReceived(remoteMessage: RemoteMessage?) {
        // Not getting messages here? See why this may be: https://goo.gl/39bRNJ
        Log.d(TAG, "From: ${remoteMessage?.from}")
        
       // TODO: Step 3.5 check messages for data
        // Check if the message contains a data payload.
        remoteMessage?.data?.let {
            Log.d(TAG, "Message data payload: " + remoteMessage.data)
        }

    }
    // [END receive_message]

Pour tester votre code, vous pouvez utiliser à nouveau le service de rédaction de notifications.

  1. Ouvrez le compositeur de la notification, créez un message et définissez la cible sur le sujet "&petit".
  2. Cette fois, à l'étape 4, Options supplémentaires, définissez les propriétés de clé et de valeur Données personnalisées comme suit:
  1. Clé: eggs
  2. Valeur: 3

  1. Vérifiez que votre application s'exécute au premier plan. Si votre application est en arrière-plan, le message FCM déclenche une notification automatique, et la fonction onMessageReceived() ne reçoit que l'objet remoteMessage lorsque l'utilisateur clique sur la notification.
  2. Envoyez le message depuis le compositeur des notifications et observez le journal des messages de données qui s'affiche dans logcat.

Étape 2: Traitez les messages au premier plan et en arrière-plan

Lorsqu'un appareil client exécutant votre application reçoit un message qui inclut à la fois des charges utiles de notification et de données, le comportement de l'application varie selon que votre application est en arrière-plan ou au premier plan sur cet appareil:

  • Si l'application exécute l'arrière-plan, si le message présente une charge utile de notification, la notification s'affiche automatiquement dans la barre de notification. Si le message comporte également une charge utile de données, celle-ci est gérée par l'application lorsque l'utilisateur appuie sur la notification.
  • Si l'application est exécutée au premier plan, elle ne s'affiche pas automatiquement si la notification de message possède une charge utile de notification. L'application doit décider comment gérer la notification dans la fonction onMessageReceived(). Si le message comporte également une charge utile de données, les deux charges utiles sont gérées par l'application.

Dans cet atelier de programmation, vous allez rappeler aux utilisateurs de l'application de préparer des œufs pour le petit déjeuner. Vous n'envisagez pas d'envoyer des données, mais vous souhaitez également vous assurer que la notification de rappel apparaît toujours, que l'application soit exécutée au premier plan ou en arrière-plan.

Lorsque vous envoyez un message FCM aux appareils sur lesquels l'application de minuteur est installée, le message de notification s'affiche automatiquement si l'application n'est pas en cours d'exécution ou s'il est en arrière-plan. Cependant, si l'application s'exécute au premier plan, la notification ne s'affiche pas automatiquement ; à la place, c'est le code de l'application qui décide de la procédure à suivre pour ce message. Si l'application est exécutée au premier plan lorsqu'elle reçoit un message FCM, la fonction onMessageReceived() est automatiquement déclenchée avec le message FCM. C'est là que votre appli peut traiter les notifications et les charges utiles de données en mode silencieux ou déclencher une notification.

Vous devez vous assurer que l'utilisateur reçoit le rappel lorsque l'application est exécutée au premier plan. Nous allons donc insérer du code pour déclencher une notification:

  1. Ouvrez à nouveau la fonction onMessageReceived() dans MyFirebaseMessagingService.
  2. Immédiatement après le code que vous avez récemment ajouté pour consulter le message de données, ajoutez le code suivant qui envoie une notification à l'aide du framework de notification.
// MyFirebaseMessagingService.kt

    // TODO: Step 3.6 check messages for notification and call sendNotification
    // Check if the message contains a notification payload.
    remoteMessage.notification?.let {
        Log.d(TAG, "Message Notification Body: ${it.body}")
        sendNotification(it.body as String)
    }
  1. Si vous exécutez à nouveau l'application et que vous envoyez une notification à l'aide de l'outil de rédaction des notifications, une notification devrait s'afficher comme dans la première partie de l'atelier de programmation, que l'application soit au premier plan ou en arrière-plan.

Le code de la solution se trouve dans la branche principale du code téléchargé.

  • Implémentez un BroadcastReceiver FCM en étendant FirebaseMessagingService.
  • Configurez un projet FCM Firebase (FCM) et ajoutez FCM à votre application Android.
  • Testez votre application en envoyant des notifications push depuis l'application Notifications.
  • Abonnez-vous aux sujets FCM en appelant la fonction subscribeToTopic() de la classe FirebaseMessaging.
  • Envoyez une charge utile de données à l'aide d'un objet RemoteMessage.
  • Gérez les données dans la fonction onMessageReceived().
  • Ajoutez une logique pour gérer FCM lorsque l'application est exécutée au premier plan et lorsqu'elle est exécutée en arrière-plan.

Cours Udacity:

Documentation Firebase:

Pour obtenir des liens vers d'autres ateliers de programmation dans ce cours, consultez la page de destination Advanced Android dans Kotlin.