Comment envoyer des notifications push Firebase sur Android ?
Published: 2024-03-12 22:28:46

Lorsque l'on crée des applications mobiles, il est difficile de penser à un cas d'utilisation où l'on n'a **pas** besoin de notifier les utilisateurs avec des alertes ou des notifications push.

Avant d'aller plus loin, nous avons également une [démo](https://www.pubnub.com/demos/push/) et un [tutoriel](https://www.pubnub.com/tutorials/mobile-push-notifications/) dédiés aux notifications push sur Andorid et iOS.

Prenons par exemple le scénario suivant : Vous développez une application sportive en temps réel qui [fournit à ses utilisateurs des informations cruciales pendant un match](https://www.pubnub.com/solutions/live-audience-engagement/). Une fonctionnalité clé de l'application serait d'envoyer des notifications push fiables aux utilisateurs dès que leur équipe préférée marque un but.

Chaque système d'exploitation mobile propose sa propre solution pour les notifications push des applications natives, et il peut donc être difficile de les intégrer à votre application. Sous Android, le mécanisme utilisé par les applications natives pour les notifications push est [Firebase Cloud Messaging](https://firebase.google.com/docs/cloud-messaging/) (FCM). [PubNub a poussé FCM un peu plus loin](https://pubnub.com/docs/messages/push/send) et a intégré l'utilisation des notifications Firebase Cloud Messaging dans la plateforme de communication en temps réel PubNub.

Lorsqu'une application est au premier plan, les canaux de PubNub font un excellent travail en fournissant des flux de données en temps réel. Le cas le plus délicat est lorsque l'application est en arrière-plan, lorsque l'utilisateur a son téléphone verrouillé, et surtout lorsque l'utilisateur a un accès intermittent à une connexion internet via WiFi ou LTE. Pour faire face à ces cas délicats, la solution la plus simple est d'implémenter les notifications push de Firebase.

Un aperçu de la façon d'envoyer des notifications push Firebase à Android en utilisant FCM
------------------------------------------------------------------------------------------

FCM est un service gratuit de Google qui permet aux utilisateurs d'envoyer des notifications push Firebase de manière fiable et sans frais.

[Vous pouvez envoyer deux types de messages à votre application avec FCM](https://support.pubnub.com/hc/en-us/articles/360051495472-Why-are-my-FCM-push-notifications-not-working-):

-   Les**messages de notification**, parfois appelés "messages d'affichage". Ils sont gérés automatiquement par le SDK FCM.
-   Les**messages de données**, qui sont traités par l'application cliente.
-   Les messages de notification contiennent un ensemble prédéfini de clés visibles par l'utilisateur et peuvent contenir une charge utile de données facultative.
-   Les messages de données contiennent uniquement des paires clé-valeur personnalisées définies par l'utilisateur.
-   La charge utile maximale pour les deux types de messages est de 4 Ko.

Vous pouvez envoyer un message de données, un message de notification ou les deux, mais cela n'a pas d'importance si vous n'envoyez qu'un message de données, car votre code est explicitement responsable de l'affichage de la notification push. Un message de notification sera automatiquement traité par FCM pour afficher la charge utile de la notification.

Vous devez utiliser les messages de notification lorsque vous souhaitez que Firebase gère l'affichage d'une notification pour le compte de votre application cliente et vous devez utiliser les messages de données lorsque vous souhaitez traiter les messages dans votre application cliente. Vous pouvez envoyer un message de notification avec des données optionnelles et le FCM se chargera de l'affichage de la notification tandis que votre application cliente se chargera des données.

Le système FCM prend en compte trois parties :

-   L'application cliente.
-   Les serveurs FCM de Google (le backend)
-   Votre serveur de push tiers.

Lorsqu'un utilisateur installe une application, celle-ci doit s'enregistrer pour activer le FCM. Voici le flux de travail du FCM pour l'envoi d'une notification:

-   Votre serveur push tiers envoie la notification push aux serveurs FCM de Google. **C'est la partie que PubNub peut remplacer et simplifier.**
-   Ces serveurs relaient le message à toutes vos applications mobiles enregistrées.
-   Les messages sont stockés pour les appareils hors ligne.
-   Dès qu'un appareil revient en ligne, les serveurs FCM relaient le message en file d'attente.
-   Les messages sont reçus sur l'appareil de l'utilisateur et présentés conformément à l'implémentation spécifique à la plateforme.

Comment envoyer une notification push Firebase à Android avec PubNub
--------------------------------------------------------------------

Si vous utilisez PubNub Real-time Messaging, vous communiquez déjà en temps réel avec tous vos appareils - mais si vous souhaitez envoyer des notifications push pour une expérience Android native, FCM est un allié de choix.[![Mobile Push Notification Powered By PubNub](https://images.ctfassets.net/3prze68gbwl1/asset-17suaysk1qa1jf1/eceb4bfec526edd82b8c9324bfd21c81/poweredbypubnub_325.gif "Mobile Push Notification Powered By PubNub")](https://pubnub.com/products/mobile-push-notifications/)

Si votre application est destinée à de multiples plateformes, PubNub vous facilite la vie en supportant Apple Push Notification Service (APNs) et Firebase dès le départ. Même si vous ne supportez pas **encore** plusieurs plateformes, l'utilisation du support PubNub pour FCM rationalisera votre code en utilisant un seul ensemble de bibliothèques pour les flux de données PubNub ainsi que pour les notifications Firebase.

PubNub s'intègre facilement à FCM. Un canal PubNub remplace les serveurs tiers qui envoient ces notifications aux serveurs FCM de Google. Vous pouvez demander à n'importe quel point d'extrémité enregistré d'envoyer une notification push à vos appareils connectés.

Cela permet à l'application d'envoyer des notifications push à des appareils enregistrés sur des canaux spécifiques en un rien de temps. Il combine l'API de notification Android native de Google avec le réseau de flux de données en temps réel de PubNub. Vos notifications push en temps réel seront comprises nativement par n'importe quel appareil Android. Si vous avez déjà FCM dans votre application et que vous envisagez d'utiliser PubNub, vous n'aurez pratiquement rien à changer dans votre application, probablement en supprimant du code !

Pour en revenir au scénario de l'application d'actualités sportives, vous pouvez demander à votre critique sportif d'envoyer le score en temps réel depuis son téléphone et de déclencher une notification push sur les appareils du reste de l'audience. PubNub rend cela simple - les serveurs supplémentaires que vous devez opérer peuvent être exclus de l'équation et avec l'auto-scaling géré par PubNub !

Firebase Cloud Messaging (FCM) est un rebranding de Google Cloud Messaging (GCM) et il n'y a pas de différence fonctionnelle pour le gérer dans PubNub. FCM devrait être utilisé à la place si vous voyez des références à GCM.

Démarrer avec Firebase Push Notifications avec PubNub
-----------------------------------------------------

Vous souhaitez télécharger le projet de notification push Firebase terminé ? [https://github.com/PubNubDevelopers/Android-Push-Notifications](https://github.com/PubNubDevelopers/Android-Push-Notifications)

Dans ce tutoriel, nous allons créer une nouvelle application Android, configurer les notifications push de firebase, activer les notifications push mobiles de PubNub et configurer le [SDK Android de PubNub](https://pubnub.com/docs/sdks/java/android/) pour recevoir des notifications push mobiles. Vous devez d'abord vous inscrire pourun [compte PubNub](https://admin.pubnub.com/signup/?devrel_gh=android-push-notifications)toujours gratuit . Une fois inscrit, créez une nouvelle application, puis obtenez vos clés PubNub uniques à partir du [PubNub Admin Dashboard](https://pubnub.com//admin.pubnub.com/signup). Enregistrez la **clé de publication** et la **clé d'abonnement** afin de pouvoir les utiliser ultérieurement.

Créer une nouvelle application Android
--------------------------------------

Passez cette section si vous avez déjà une application que vous souhaitez utiliser avec FCM et PubNub.

Installez le [kit de développement Java SE (JDK 8 ou jamais)](https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html).

[Téléchargez et installez Android Studio](https://developer.android.com/studio/index.html).

Dans la fenêtre Bienvenue dans Android Studio, cliquez sur "Démarrer un nouveau projet Android Studio".

Définissez le nom de l'application, le domaine de l'entreprise et modifiez éventuellement l'emplacement du projet. Si vous souhaitez écrire une application Kotlin ou Flutter, cochez la case correspondante. Notez le nom du paquet, vous en aurez besoin plus tard. Laissez les autres options telles quelles. Cliquez sur "Suivant".

[![Create New Android App](https://images.ctfassets.net/3prze68gbwl1/asset-17suaysk1qa1jf2/39e6d4ccae36799d6775028e5532dd8e/newapp-1024x749.png "Create New Android App")](https://developer.android.com/studio/index.html)

Définissez le SDK minimum sur "API23 : Android 6.0 (Mashmallow)". Cliquez sur "Suivant".

Sélectionnez "Activité vide". Cliquez sur "Suivant". Conservez les valeurs par défaut et cliquez sur "Terminer".

Ajouter Firebase Cloud Messaging pour créer des notifications en temps réel
---------------------------------------------------------------------------

Créez un compte [Firebase](https://firebase.google.com/) ou connectez-vous-y.

Cliquez sur "Ajouter un projet" dans votre [console Firebase](https://console.firebase.google.com/) pour créer un projet Firebase.

[![Add Project to Firebase](https://images.ctfassets.net/3prze68gbwl1/asset-17suaysk1qa1jf3/b51dd4a3613381c59feacb5e4d70911e/addproject.png "Add Project to Firebase")](https://console.firebase.google.com/)

Définissez le nom et l'emplacement du projet.

[![Add a project to firebase ](https://images.ctfassets.net/3prze68gbwl1/asset-17suaysk1qa1jf4/9cb74ae2fc49d8e5626e2412f709aa3b/addaproject-907x1024.png "Add a project to firebase ")](https://console.firebase.google.com/)

Ajoutez ensuite firebase à votre application Android.

[![Add Firebase to App](https://images.ctfassets.net/3prze68gbwl1/asset-17suaysk1qa1jf5/45a880cdef449d6da23a28731da50105/addfirebasetoapp.png "Add Firebase to App")](https://console.firebase.google.com/)

Saisissez le nom du paquet et un surnom pour votre application. Vous trouverez le nom du paquetage de votre application en haut de "android/app/src/main/java/com/\[YourAppName\]/MainApplication.java". Omettez le SHA-1 (non nécessaire dans ce tutoriel). Cliquez sur "Register app".

Téléchargez le fichier google-services.json dans le répertoire racine du module de votre application Android. N'ajoutez pas le SDK Firebase. Passez à la [console Firebase](https://console.firebase.google.com/) et continuez avec les étapes de ce tutoriel pour ajouter le SDK Firebase et le SDK PubNub dans votre application.

[![Download Config File For Android App](https://images.ctfassets.net/3prze68gbwl1/asset-17suaysk1qa1jf6/0f473a41a0b842d0a5c2f6c99788a495/download-config-file-for-android-app.png "Download Config File For Android App")](https://console.firebase.google.com/)

Allez dans votre [PubNub Admin Dashboard](https://pubnub.com//admin.pubnub.com/signup?devrel_gh=android-push-notifications), sélectionnez votre application, puis votre jeu de clés.

Descendez jusqu'à "Mobile Push Notifications", [activez l'add-on Push Notifications](https://support.pubnub.com/hc/en-us/articles/360051974791-How-do-I-enable-add-on-features-for-my-keys-) (s'il n'est pas déjà activé), et entrez la clé API de l'application que vous venez de créer dans la [console Firebase](https://console.firebase.google.com/). Vous pouvez trouver votre clé API (répertoriée comme clé de serveur dans la console Firebase) en allant dans "Project Overview" dans la barre latérale gauche, cliquez sur le bouton de menu kebob (**"⋮")**situé en haut à droite des métriques de votre application, cliquez sur "Settings", et sélectionnez l'onglet "Cloud Messaging".

Configurer FCM et PubNub pour vos notifications push mobiles firebase
---------------------------------------------------------------------

Modifiez votre fichier build.gradle au niveau du projet (<projet>/build.gradle) et ajoutez la ligne suivante :

```js
buildscript {
  dependencies {
    // Add this line
    classpath 'com.google.gms:google-services:4.0.1'
  }
}
```

Après avoir ajouté ceci, vous verrez un message jaune, vous demandant de synchroniser le projet. Ignorez-le pour le moment.

Editez votre fichier build.gradle au niveau de l'application (<projet>/<app-module>/build.gradle) et ajoutez ce qui suit :

```js
dependencies {
  // Add this line.
  implementation 'com.google.firebase:firebase-core:16.0.1'
  // Firebase Messaging library for sending push notifications. Add this line.
  implementation 'com.google.firebase:firebase-messaging:17.3.3'
  // PubNub Android SDK. Add this line.
  implementation group: 'com.pubnub', name: 'pubnub-gson', version: '4.20.0'
}
...
// Add to the bottom of the file
apply plugin: 'com.google.gms.google-services'
```

Cliquez sur "Sync now" dans la barre qui apparaît dans Android Studio.

[![Android Studio Sync Message](https://images.ctfassets.net/3prze68gbwl1/asset-17suaysk1qa1jf7/66be78ce887d2c92161fa5fbb11f2554/android_studio_sync.png "Android Studio Sync Message")](https://console.firebase.google.com/)

Modifiez votre fichier MainActivity.java pour initialiser le SDK Android PubNub. Vous devez également créer des canaux de notification pour Android API level 26+ afin d'afficher les notifications push.

```js
package com.pubnub.hellopush;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.content.Context;
import android.graphics.Color;
import android.os.Build;
import com.pubnub.api.PNConfiguration;
import com.pubnub.api.PubNub;
public class MainActivity extends AppCompatActivity {
    public static PubNub pubnub; // PubNub instance
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initPubnub();
        createChannel();
    }
    // Creates PubNub instance with your PubNub credentials. https://admin.pubnub.com/signup
    // This instance will be used when we need to create connection to PubNub.
    private void initPubnub() {
        PNConfiguration pnConfiguration = new PNConfiguration();
        pnConfiguration.setPublishKey("YOUR_PUB_KEY_HERE");
        pnConfiguration.setSubscribeKey("YOUR_SUB_KEY_HERE");
        pnConfiguration.setSecure(true);
        pubnub = new PubNub(pnConfiguration);
    }
    // Creates notification channel.
    private void createChannel() {
        // Notification channel should only be created for devices running Android API level 26+. 
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
            NotificationChannel chan1 = new NotificationChannel(
                    "default",
                    "default",
                    NotificationManager.IMPORTANCE_NONE);
            chan1.setLightColor(Color.TRANSPARENT);
            chan1.setLockscreenVisibility(Notification.VISIBILITY_SECRET);
            notificationManager.createNotificationChannel(chan1);
        }
    }
}
```

Obtenez vos clés PubNub uniques à partir du [PubNub Admin Dashboard](https://pubnub.com//admin.pubnub.com/signup). Remplacez "YOUR\_PUB\_KEY\_HERE" et "YOUR\_SUB\_KEY\_HERE" par vos clés à partir du [PubNub Admin Dashboard](https://admin.pubnub.com/login).

Vous devez ajouter un service pour obtenir le jeton de l'appareil et une méthode pour envoyer le jeton à votre serveur d'enregistrement (PubNub). En utilisant le SDK Android de PubNub, associez un canal à un jeton d'enregistrement. Pour pouvoir traiter les messages de données ou gérer l'affichage des messages de notification au premier plan, vous devez également ajouter un service qui étend FirebaseMessagingService.

Dans l'explorateur de projet, développez les répertoires "app > java > \[nom du package\]". Cliquez ensuite avec le bouton droit de la souris et sélectionnez "New > Java Class". Nommez la classe "MyFirebaseMessageService.Java".

```js
package com.pubnub.hellopush;
import android.util.Log;
import com.google.firebase.messaging.FirebaseMessagingService;
import com.google.firebase.messaging.RemoteMessage;
import com.pubnub.api.callbacks.PNCallback;
import com.pubnub.api.enums.PNPushType;
import com.pubnub.api.models.consumer.PNStatus;
import com.pubnub.api.models.consumer.push.PNPushAddChannelResult;
import java.util.Arrays;
public class MyFirebaseMessagingService extends FirebaseMessagingService {
    private static final String TAG = "FirebaseService";
    @Override
    public void onNewToken(String token) {
        super.onNewToken(token);
        Log.d(TAG,"NEW_TOKEN: "+token);
        sendRegistrationToPubNub(token);
    }
    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {
        // If the application is in the foreground handle or display both data and notification FCM messages here.
        // Here is where you can display your own notifications built from a received FCM message.
        super.onMessageReceived(remoteMessage);
        Log.d(TAG, "From: " + remoteMessage.getFrom());
        if (remoteMessage.getData().size() > 0) {
            Log.d(TAG, "Message data payload: " + remoteMessage.getData());
        }
        if (remoteMessage.getNotification() != null) {
            Log.d(TAG, "Message Notification Body: " + remoteMessage.getNotification().getBody());
        }
        // displayNotification(remoteMessage.getNotification().getBody());
    }
    private void sendRegistrationToPubNub(String token) {
        // Configure PubNub mobile push notifications.
        MainActivity.pubnub.addPushNotificationsOnChannels()
            .pushType(PNPushType.GCM)
            .channels(Arrays.asList("HelloPush", "TestPushChannel"))
            .deviceId(token)
            .async(new PNCallback<PNPushAddChannelResult>() {
                @Override
                public void onResponse(PNPushAddChannelResult result, PNStatus status) {
                    Log.d("PUBNUB", "-->PNStatus.getStatusCode = " + status.getStatusCode());
                }
            });
    }
}
```

Ajoutez la classe dans votre fichier AndroidManifest.xml.

```js
<service android:name=".MyFirebaseMessagingService">
    <intent-filter>
        <action android:name="com.google.firebase.MESSAGING_EVENT"/>
    </intent-filter>
</service>
```

Ajoutez ces permissions dans votre fichier AndroidManifest.xml avant la balise `<application>`.

```js
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
```

### Envoi de notifications mobiles Push depuis PubNub

Créez et exécutez votre application sur un appareil Android ou avec un émulateur Android.

Vous pouvez envoyer des notifications push mobiles avec PubNub en publiant un message sur le ou les canaux auxquels les appareils ont été ajoutés. Il est important de noter que les **appareils n'ont pas besoin de s'abonner à un canal pour recevoir des notifications pour ce canal**. Les appareils doivent seulement s'inscrire au canal pour les notifications push et ils recevront alors des notifications push pour tous les messages qui ont des clés de notifications push pour ce type d'appareil.

[![PubNub Debug Client](https://images.ctfassets.net/3prze68gbwl1/asset-17suaysk1qa1jf8/a8b147f50bf2dd0d6ae393f422a17e4d/debugclient.png "PubNub Debug Client")](https://pubnub.com//admin.pubnub.com/signup)

-   Les appareils FCM associés ne recevront que les données contenues dans la clé `pn_gcm`.
-   Les abonnés PubNub natifs recevront l'intégralité de l'objet littéral, y compris les clés de notification.

Dans ce tutoriel, vous avez enregistré l'appareil dans le canal "Notifications". Tous les messages envoyés à ce canal avec des clés `pn_gcm` seront envoyés en tant que notification push mobile aux appareils enregistrés.

La manière la plus simple de tester les notifications push mobiles est de les envoyer depuis la PubNub Debug Console à partir du [PubNub Admin Dashboard](https://pubnub.com//admin.pubnub.com/signup?devrel_gh=android-push-notifications).

Allez dans votre [PubNub Admin Dashboard](https://pubnub.com//admin.pubnub.com/signup?devrel_gh=android-push-notifications), sélectionnez votre application, et ensuite sélectionnez votre jeu de clés.

Cliquez sur "Debug Console" et créez un client avec "Default Channel" réglé sur `Notifications`.

Avec le client que vous venez de créer, vous pouvez envoyer une notification à votre appareil en envoyant un message contenant les clés `pn_gcm`.

Envoyez une notification push Android à l'aide de la clé de `notification`:

```js
{"pn_gcm":{"notification":{"body":"Hello World."}}}
```

![Hello World Android Push Notification](https://images.ctfassets.net/3prze68gbwl1/asset-17suaysk1qa1jf0/2c03580d2163ac7ca6c86e1b85104d00/helloworld_short.gif "Hello World Android Push Notification")Reportez-vous au [guide de dépannage](https://support.pubnub.com/hc/en-us/articles/360051495432-How-can-I-troubleshoot-my-push-notification-issues-) si vous rencontrez des problèmes lors de l'envoi de notifications push mobiles.

#### Contenu

[Aperçu de l'envoi de notifications Firebase Push vers Android à l'aide de FCMComment](#h-0)[envoyer une notification Firebase Push vers Android avec](#h-1)[PubNubCréer](#h-2)[une nouvelle application AndroidAjouter](#h-3)[Firebase Cloud Messaging pour créer vos notifications en temps réelConfigurer](#h-4)[FCM et PubNub pour vos notifications Firebase Push mobilesEnvoyer des](#h-5) notifications Mobile Push à[partir de PubNub](#h-6)

Comment PubNub peut-il vous aider ?
===================================

Cet article a été publié à l'origine sur [PubNub.com](https://www.pubnub.com/blog/sending-android-mobile-push-notifications-firebase-cloud-messaging-pubnub/)

Notre plateforme aide les développeurs à construire, livrer et gérer l'interactivité en temps réel pour les applications web, les applications mobiles et les appareils IoT.

La base de notre plateforme est le réseau de messagerie en temps réel le plus grand et le plus évolutif de l'industrie. Avec plus de 15 points de présence dans le monde, 800 millions d'utilisateurs actifs mensuels et une fiabilité de 99,999 %, vous n'aurez jamais à vous soucier des pannes, des limites de concurrence ou des problèmes de latence causés par les pics de trafic.

Découvrez PubNub
----------------

Découvrez le [Live Tour](https://www.pubnub.com/tour/introduction/) pour comprendre les concepts essentiels de chaque application alimentée par PubNub en moins de 5 minutes.

S'installer
-----------

Créez un [compte PubNub](https://admin.pubnub.com/signup/) pour un accès immédiat et gratuit aux clés PubNub.

Commencer
---------

La [documentation PubNub](https://www.pubnub.com/docs) vous permettra de démarrer, quel que soit votre cas d'utilisation ou votre [SDK](https://www.pubnub.com/docs).