• 20 heures
  • Moyenne

Ce cours est visible gratuitement en ligne.

course.header.alt.is_video

course.header.alt.is_certifying

J'ai tout compris !

Mis à jour le 18/02/2022

Diffusez une notification via l’interface Firebase

Notre chat étant maintenant fabuleux et largement utilisé par nos utilisateurs, nous souhaiterions pouvoir envoyer des messages de notification à l'ensemble de nos utilisateurs afin de les alerter manuellement quand un nouveau mentor s'est inscrit à l'application.

Pour cela, nous allons envoyer des messages de notification depuis Firebase grâce au produit Cloud Messaging !

Envoyez votre premier message de notification

Vous allez voir, envoyer un message de notification sur Android en utilisant Firebase est plutôt simple. Dans un premier temps, nous allons installer le module "firebase-messaging" du SDK de Firebase sur notre application Android.

Extrait du fichier build.gradle :

dependencies {
    ...
    // FIREBASE
    ...
    implementation 'com.google.firebase:firebase-messaging'

}

Une fois la librairie installée, nous allons implémenter un service qui écoutera les messages de notification envoyés par Firebase. Pour cela, nous allons créer un package appelé "notifications" et nous y placerons, à l'intérieur une classe que nous créerons également, NotificationsService.

Classe NotificationsService.java :

public class NotificationsService extends FirebaseMessagingService {

      @Override
    public void onMessageReceived(@NonNull RemoteMessage remoteMessage) {
        super.onMessageReceived(remoteMessage);
        if (remoteMessage.getNotification() != null) {
            // Get message sent by Firebase
            RemoteMessage.Notification notification = remoteMessage.getNotification();
            sendVisualNotification(notification);
        }
    }
}

Explications : Cette classe relativement simple hérite de FirebaseMessagingService, et nous permettra de gérer plus facilement la réception de messages de notification via Firebase. Cette classe implémente la méthode  onMessageReceived()  et récupère ainsi le message de notification pour ensuite l'afficher dans la console d'Android Studio.

Pourquoi l'afficher dans la console d'Android Studio ? Une notification s'affichera automatiquement sur le téléphone de l'utilisateur non ?

Eh non ! L'affichage de la notification sur le téléphone de l'utilisateur nécessite du code supplémentaire... On s'en occupe juste après !

Une fois la classe de ce service créée, nous allons devoir déclarer le service dans le manifeste de notre application Android.

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.openclassrooms.firebaseoc">

    ...

    <application
        ...>
        
        ...

        <!-- NOTIFICATION SERVICE -->
        <service
            android:name=".notification.NotificationService">
            <intent-filter>
                <action android:name="com.google.firebase.MESSAGING_EVENT"/>
            </intent-filter>
        </service>

    </application>

</manifest>

Et c'est tout ! Rendez-vous maintenant sur l'interface Web de Firebase afin d'envoyer un premier message de notification. Vous allez voir, la prise en main est très facile !

Une fois sur l'interface Web, allez dans le menu "Cloud Messaging" et cliquez sur le bouton "Send your first message". 

Une nouvelle page s'affichera et un formulaire apparaîtra.

Envoyer un message de notification
Envoyer un message de notification

Remplissez le champs concernant le titre et le contenu texte de votre notification et cliquez sur "Suivant".

Sélectionner la cible de la notification
Sélectionner la cible de la notification

Vous aurez à sélectionner la cible de votre notification. Vous pouvez simplement sélectionner votre application Android via son nom de package et cliquer sur "Suivant". 

Planification de la notification
Planification de la notification

Vous pourrez ensuite choisir la planification de votre notification (maintenant ou plus tard). Laissez tel quel et cliquez sur "Suivant".

Les deux dernières étapes sont facultatives, vous pouvez simplement cliquer sur "Suivant" à chaque fois afin d'arriver à la dernière étape.

Lancez votre application Android AVANT d'envoyer le message (c'est mieux pour visualiser le résultat) !

Une fois votre application Android exécutée, cliquez sur le bouton "Consulter" et "Publier" afin de valider l'envoi de la notification.

Vous devriez voir apparaître le message de notification depuis la console d'Android Studio (le tout premier message peut mettre un peu de temps à arriver).

Réception du message de notification
Réception du message de notification

Affichez une notification

A ce stade, votre message est bien envoyé à partir de Firebase et réceptionné sur votre application Android via notre service NotificationsService.

Cependant, comme vous l'aurez remarqué, sur Android les messages de notification s'affiche rarement via la console d'Android Studio. En effet, généralement, ces messages de notification sont affichés dans des... Notifications !

Voyons comment implémenter cela dans notre code. Pour cela, mettons à jour notre classe NotificationsService.

Classe NotificationsService :

public class NotificationService extends FirebaseMessagingService {

    private final int NOTIFICATION_ID = 007;
    private final String NOTIFICATION_TAG = "FIREBASEOC";

    @Override
    public void onMessageReceived(@NonNull RemoteMessage remoteMessage) {
        super.onMessageReceived(remoteMessage);
        if (remoteMessage.getNotification() != null) {
            // Get message sent by Firebase
            RemoteMessage.Notification notification = remoteMessage.getNotification();
            sendVisualNotification(notification);
        }
    }

    private void sendVisualNotification(RemoteMessage.Notification notification) {

        // Create an Intent that will be shown when user will click on the Notification
        Intent intent = new Intent(this, MainActivity.class);
        PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_ONE_SHOT);

        // Create a Channel (Android 8)
        String channelId = getString(R.string.default_notification_channel_id);

        // Build a Notification object
        NotificationCompat.Builder notificationBuilder =
                new NotificationCompat.Builder(this, channelId)
                        .setSmallIcon(R.drawable.ic_image_notification)
                        .setContentTitle(notification.getTitle())
                        .setContentText(notification.getBody())
                        .setAutoCancel(true)
                        .setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION))
                        .setContentIntent(pendingIntent);

        NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

        // Support Version >= Android 8
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            CharSequence channelName = "Firebase Messages";
            int importance = NotificationManager.IMPORTANCE_HIGH;
            NotificationChannel mChannel = new NotificationChannel(channelId, channelName, importance);
            notificationManager.createNotificationChannel(mChannel);
        }

        // Show notification
        notificationManager.notify(NOTIFICATION_TAG, NOTIFICATION_ID, notificationBuilder.build());
    }
}

Explications : Nous avons ici rajouté la méthode  sendVisualNotification()  dont l'objectif est de créer et afficher un message de notification à tous nos utilisateurs.

Dans un premier temps, nous créons un Intent contenant notre activité principale MainActivity. Cet Intent sera appelé dès lors que l'utilisateur cliquera sur la Notification. Rien ne vous empêche par la suite de la faire pointer vers une activité dédiée comme NotificationsActivity, qui pourrait par exemple afficher une liste de toutes les notifications envoyées à un utilisateur.

Ensuite, nous créons un identifiant unique pour notre canal ("channel" en anglais) que nous avons préalablement ajouté à notre fichier strings.xml

Euh, c'est quoi un canal (ou channel) ?

Bonne question !

Ce dernier aura alors directement la possibilité de modifier les paramètres (comme l'importance, le son, la lumière, la vibration, etc...) des notifications inscrites dans un canal, sans que vous ayez besoin de le coder dans votre application Android.

Enfin, on passe aux choses sérieuses en créant notre Notification grâce au builder NotificationCompat.Builder. Ce dernier nous permettra de créer et personnaliser une Notification grâce aux éléments que nous avons pré-configurés plus haut.

Nous transférons cette Notification nouvellement créée au NotificationManager qui se chargera de l'afficher à l'écran. Nous créons également un nouveau canal pour les versions d'Android supérieures ou égales à 8.

Pour terminer, n'oubliez pas d'appeler cette méthode nouvellement créée dans le  onMessageReceived()  de notre service.

Lancez votre application et envoyez à nouveau une notification depuis Firebase. Le message devrait à présent s'afficher dans une notification.

 

En résumé

  • Vous pouvez envoyer des notifications planifiées à vos utilisateurs grâce à Firebase Messaging.

  • Afin de pouvoir traiter ces notifications, vous avez besoin d'un service au sein de votre application.

Exemple de certificat de réussite
Exemple de certificat de réussite