Firebase Cloud Messaging (FCM) est un service multiplateforme de livraison de notifications push et de messages de Google, conçu pour les applications mobiles et web. FCM assure un transfert de données fiable entre le serveur et les appareils clients sans nécessité de maintenir une connexion réseau permanente. Selon Firebase Documentation, 2026, plus de 300 milliards de messages transitent chaque jour dans le monde via l'infrastructure FCM. Le service prend en charge à la fois les notifications avec affichage automatique et les messages data pour le transfert de données en arrière-plan.
Points clés
Firebase Cloud Messaging est un service cloud de Google qui assure la livraison de notifications push et de messages data entre le serveur d'application et les appareils clients. Le service a remplacé l'ancien Google Cloud Messaging (GCM) et est devenu la solution standard pour la livraison push dans l'écosystème Firebase. FCM prend en charge Android, iOS, Web et Unity, offrant une interface d'envoi unifiée indépendamment de la plateforme cible.
Le service propose plusieurs mécanismes de livraison de messages, chacun résolvant une tâche spécifique. Les messages notification sont affichés automatiquement par le système à la réception — le développeur n'a pas besoin d'écrire de code pour afficher la notification. Les messages data transmettent une charge utile arbitraire sous forme de paires clé-valeur et sont traités dans l'application. Les messages combinés contiennent à la fois des parties visibles et cachées pour une flexibilité maximale.
Implémenter son propre serveur push nécessite de maintenir une connexion TCP constante avec chaque appareil, ce qui est inefficace et peu sécurisé. FCM utilise l'infrastructure unifiée de Google qui maintient des connexions avec des milliards d'appareils simultanément. Le service gère automatiquement les tentatives de réenvoi, les files d'attente de messages et l'équilibrage de charge, libérant le développeur de la nécessité de résoudre ces tâches lui-même.
L'architecture FCM se compose de trois composants clés : le serveur fournisseur (votre backend), le serveur Firebase Cloud Messaging et l'application cliente sur l'appareil. Lorsque le serveur envoie un message, il atteint d'abord l'infrastructure FCM, qui le route vers l'appareil cible. Si l'appareil est hors ligne, FCM stocke le message dans une file d'attente et le livre lors du rétablissement de la connexion.
Au premier lancement, l'application appelle le SDK Firebase, qui enregistre l'appareil auprès du service FCM et reçoit un Registration Token unique. Ce jeton est une chaîne d'environ 150 caractères qui identifie une instance d'application spécifique sur un appareil spécifique. Le jeton peut changer lors de la réinstallation de l'application, de l'effacement des données ou de la restauration à partir d'une sauvegarde — le développeur doit gérer la mise à jour du jeton via le délégué onNewToken.
Lorsque le serveur envoie une requête via l'API FCM, le message passe par plusieurs étapes. Réception et validation — FCM vérifie la validité de la requête et l'existence de l'appareil cible. File d'attente — si l'appareil n'est pas disponible, le message entre dans une file de stockage. Routage — FCM détermine le canal de livraison optimal (WiFi ou données mobiles). Livraison — le système transmet le message à l'application cible. Après une livraison réussie, FCM retourne un identifiant de message au serveur.
Firebase Cloud Messaging prend en charge trois types de messages, chacun ayant ses particularités de traitement côté client. Les messages notification sont traités par le service système Google Play Services sur Android et APNs sur iOS, et sont affichés automatiquement sous forme de bannières push. Les messages data sont livrés directement à l'application et traités via le callback onMessageReceived sur Android et application(_:didReceiveRemoteNotification:) sur iOS.
Un message notification contient des champs prédéfinis : titre, corps, URL d'image et son de notification. Le système crée et affiche automatiquement la notification dans la barre système, même si l'application est en arrière-plan ou terminée. L'utilisateur voit une bannière standard avec un titre et du texte, et en tapant, l'application s'ouvre avec les données transmises dans la charge utile. Si l'application est active, le message notification peut être intercepté et traité dans le code.
Un message data est un ensemble personnalisé de paires clé-valeur sans champs prédéfinis. La charge utile n'est pas traitée automatiquement par le système — l'application reçoit les données brutes et peut les interpréter arbitrairement. Les messages data sont utilisés pour la synchronisation de données en arrière-plan, la mise à jour du cache local, le déclenchement de synchronisation ou l'envoi de commandes sans afficher de notification. Sur Android, le message data est toujours livré, même si l'application est terminée ou en arrière-plan.
FCM permet d'envoyer un message contenant à la fois une partie notification (pour l'affichage) et une partie data (pour le traitement). La charge utile combinée inclut à la fois les champs prédéfinis de notification et les clés data arbitraires. Le système affiche la notification de la partie notification, tandis que la partie data est transmise dans les extras d'intent de l'application lors de l'ouverture. Ceci est utile pour les scénarios où il faut montrer une notification à l'utilisateur et en même temps transmettre un contexte pour naviguer vers un écran spécifique.
| Type | Auto-affichage | Traitement en arrière-plan | Exemple |
|---|---|---|---|
| Notification | Oui, par le système | Automatique, sans code | Notification push de bienvenue |
| Data | Non | Via callback de l'application | Synchronisation de données en arrière-plan |
| Combiné | Oui, partie notification | Partie data à l'ouverture | Notification + lien de commande |
L'intégration de FCM dans Android commence par la connexion du SDK Firebase via le fichier build.gradle au niveau de l'application. Après avoir ajouté les dépendances et le fichier google-services.json, l'application reçoit automatiquement un Registration Token, transmis via le callback FirebaseMessagingService. Pour recevoir des notifications, il est nécessaire de créer un service étendant FirebaseMessagingService et de l'enregistrer dans AndroidManifest.xml.
Après la connexion du SDK Firebase, le jeton d'appareil est généré automatiquement sans code supplémentaire. Le jeton est disponible via FirebaseMessaging.getInstance().token, qui retourne un Task<String>. Pour suivre les mises à jour du jeton, la méthode onNewToken est surchargée dans le service. Le jeton doit être envoyé au serveur fournisseur afin que celui-ci puisse envoyer des notifications push à cet appareil.
class MyFirebaseMessagingService :
FirebaseMessagingService() {
override fun onNewToken(token: String) {
sendTokenToServer(token)
}
override fun onMessageReceived(
message: RemoteMessage
) {
val data = message.data
val title = "Nouveau message"
val body = data["body"] ?: ""
showNotification(title, body)
}
}
Le service de réception des messages FCM doit être enregistré dans AndroidManifest.xml avec les intent-filter appropriés. Ajoutez la balise service avec la permission INTERNET et l'action spécifiée. Sans enregistrement du service, les messages ne seront pas livrés à l'application en arrière-plan. Pour afficher les notifications sur Android 13+, la permission d'exécution POST_NOTIFICATIONS est requise.
<!-- AndroidManifest.xml -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name=
"android.permission.POST_NOTIFICATIONS" />
<service
android:name=".MyFirebaseMessagingService"
android:exported="false">
<intent-filter>
<action android:name=
"com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
L'intégration de FCM dans iOS nécessite une configuration à la fois du côté d'Apple Push Notification Service (APNs) et dans Firebase Console. Contrairement à Android où FCM gère la connexion directement, dans iOS FCM utilise APNs comme couche de transport. L'application s'enregistre pour recevoir les notifications push via UIApplication.shared.registerForRemoteNotifications, et le SDK Firebase intercepte le jeton d'appareil reçu et le lie au Registration Token FCM.
Pour que FCM fonctionne sur iOS, une clé ou un certificat APNs doit être téléchargé dans Firebase Console. La clé APNs est une méthode d'authentification moderne sans certificats (recommandée par Apple). La clé est créée dans Apple Developer Portal dans la section Keys et téléchargée dans les paramètres Cloud Messaging de Firebase Console. Après la configuration APNs, l'application demande l'autorisation de notification via UNUserNotificationCenter et s'enregistre via APNs.
import Firebase
import UserNotifications
class AppDelegate: NSObject, UIApplicationDelegate {
func application(
_ application: UIApplication,
didFinishLaunchingWithOptions
launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
FirebaseApp.configure()
UNUserNotificationCenter.current()
.requestAuthorization(options: [.alert, .sound, .badge])
application.registerForRemoteNotifications()
return true
}
func application(
_ application: UIApplication,
didRegisterForRemoteNotificationsWithDeviceToken
deviceToken: Data
) {
Messaging.messaging()
.apnsToken = deviceToken
}
}
Pour traiter les notifications reçues, le délégué UNUserNotificationCenter est implémenté. La méthode willPresent est appelée lorsqu'une notification est reçue avec l'application active — ici vous pouvez afficher une notification personnalisée in-app ou ignorer la bannière système. La méthode didReceive est appelée lorsque l'utilisateur tape sur la notification — ici la navigation vers l'écran correspondant est effectuée. Pour les messages data, le délégué MessagingDelegate est utilisé, qui reçoit la charge utile lors de la réception d'un message FCM en arrière-plan.
L'envoi côté serveur des messages FCM s'effectue via l'API HTTP v1 de Firebase Cloud Messaging ou l'API legacy. L'API HTTP v1 est la méthode recommandée, utilise l'authentification OAuth 2.0 via un Service Account et prend en charge toutes les fonctionnalités modernes de FCM, y compris l'analyse de livraison et les tests A/B des notifications. La requête est envoyée par méthode POST au endpoint https://fcm.googleapis.com/v1/projects/{project_id}/messages:send.
Le corps de la requête contient un objet JSON avec les informations du message : target (jeton, sujet ou condition), notification (pour l'affichage) et data (charge utile personnalisée). L'authentification se fait via une clé JSON de Service Account chargée dans les variables d'environnement du serveur. Le jeton d'accès est généré à l'aide de la bibliothèque google-auth-library. Google recommande d'utiliser Firebase Admin SDK pour la gestion automatique de l'authentification et des tentatives.
const admin = require("firebase-admin")
const serviceAccount = require("./serviceAccountKey.json")
admin.initializeApp({ credential: admin.credential.cert(serviceAccount) })
const message = {
token: "device_registration_token",
notification: { title: "Réduction de 20%", body: "Sur tous les services aujourd'hui" },
data: { screen: "promo", promoId: "324" },
android: { priority: "high" },
apns: { payload: { aps: { sound: "default" } } }
}
admin.messaging().send(message)
.then(response => {
console.log("Envoyé avec succès :", response)
})
.catch(error => {
console.log("Erreur d'envoi :", error)
})
Pour envoyer des notifications à un groupe d'utilisateurs, FCM prend en charge les abonnements aux sujets. Un sujet (topic) est un canal nommé auquel l'application cliente s'abonne via FirebaseMessaging.getInstance().subscribeToTopic(). Le serveur peut envoyer un message à un sujet et il sera livré à tous les appareils abonnés. Les sujets conviennent aux newsletters, aux notifications promotionnelles et aux push basés sur des événements. Pour une segmentation plus précise, des conditions basées sur plusieurs sujets avec des opérateurs logiques sont utilisées.
Questions fréquentes
FCM fonctionne sur Android via sa propre infrastructure Google, tandis que sur iOS il utilise APNs comme protocole de transport. FCM fournit une API unifiée pour les deux plateformes, un stockage automatique des messages hors ligne et une analyse de livraison, qui ne sont pas disponibles dans APNs pur.
Oui, via Firebase Console dans la section Cloud Messaging, vous pouvez envoyer manuellement des notifications à des appareils, sujets ou segments d'audience sélectionnés. Cette fonction convient aux tests et aux envois ponctuels, mais ne remplace pas l'intégration serveur pour les applications de production.
Abonnez-vous aux mises à jour du jeton via onNewToken dans FirebaseMessagingService (Android) ou MessagingDelegate (iOS). Lorsque le jeton change, envoyez le nouveau jeton au serveur et supprimez l'ancien. Le serveur doit mettre à jour la base de données et cesser les tentatives d'envoi vers l'ancien jeton.
FCM stocke le message dans une file d'attente jusqu'à 28 jours et le livre lors du rétablissement de la connexion. Pour les messages notification, seul le dernier message de chaque groupe de collapse est replié. Les messages data sont stockés séparément et livrés dans l'ordre d'envoi sans repli.
FCM est entièrement gratuit sans limite sur le nombre de messages. L'utilisation de FCM n'est facturée ni dans le plan Spark ni dans le plan Blaze. Il existe uniquement des limites de taille de charge utile : jusqu'à 4 Ko pour les messages notification et jusqu'à 2 Ko pour les messages data.
Résumé
Nous développerons une application mobile clé en main
IT Sectr crée des applications iOS et Android pour les startups et les entreprises depuis 2017. Nous vous conseillerons et vous proposerons la meilleure solution.
Lisez aussi