Ce document fournit une référence de la syntaxe HTTP utilisée pour transmettre des messages de votre serveur d'application aux applications clientes via Firebase Cloud Messaging.
Lorsque vous utilisez l'ancien protocole HTTP, votre serveur d'application doit rediriger toutes les requêtes HTTP vers ce point de terminaison:
https://fcm.googleapis.com/fcm/send
Les paramètres et options disponibles se répartissent en grandes catégories:
Syntaxe des messages en aval
Cette section fournit la syntaxe pour envoyer des messages en aval et interpréter les réponses HTTP de Firebase Cloud Messaging.
Messages HTTP en aval (JSON)
Le tableau suivant indique les cibles, les options et la charge utile des messages JSON HTTP.
Paramètre | Utilisation | Description | |
---|---|---|---|
Targets (Cibles) | |||
to |
Facultatif, chaîne |
Ce paramètre spécifie le destinataire d'un message.
La valeur peut être le jeton d'enregistrement d'un appareil, la clé de notification d'un groupe d'appareils ou un seul sujet (préfixé par |
|
registration_ids | Facultatif, tableau de chaînes |
Ce paramètre spécifie le destinataire d'un message multicast, c'est-à-dire d'un message envoyé à plusieurs jetons d'enregistrement.
La valeur doit être un tableau de jetons d'enregistrement auxquels envoyer le message multicast. Le tableau doit contenir au moins un et au plus 1 000 jetons d'enregistrement. Pour envoyer un message à un seul appareil, utilisez le paramètre Les messages multicast ne sont autorisés qu'au format JSON HTTP. |
|
condition |
Facultatif, chaîne | Ce paramètre spécifie une expression logique de conditions qui déterminent la cible du message. Condition acceptée : "Topic", au format "'yourTopic' in topics". Cette valeur n'est pas sensible à la casse. Opérateurs acceptés: |
|
notification_key Obsolète |
Facultatif, chaîne | Ce paramètre est obsolète. Utilisez plutôt |
|
Options | |||
collapse_key |
Facultatif, chaîne | Ce paramètre identifie un groupe de messages (par exemple, avec Notez que l'ordre dans lequel les messages sont envoyés n'est pas garanti. Remarque: Vous ne pouvez utiliser qu'un maximum de quatre clés de réduction différentes à la fois. Cela signifie que FCM peut stocker simultanément quatre messages différents par application cliente. Si vous dépassez ce nombre, rien ne garantit que FCM conservera les quatre clés de réduction. |
|
priority |
Facultatif, chaîne | Définit la priorité du message. Les valeurs valides sont "normal" (normal) et "high" (élevé). Sur les plates-formes Apple, elles correspondent aux priorités 5 et 10 des notifications APN. Par défaut, les messages de notification sont envoyés avec une priorité élevée, et les messages de données sont envoyés avec une priorité normale. La priorité normale optimise la consommation de la batterie de l'application cliente et doit être utilisée, sauf si une diffusion immédiate est requise. Pour les messages de priorité normale, l'application peut recevoir le message avec un délai non spécifié. Lorsqu'un message est envoyé avec une priorité élevée, il est envoyé immédiatement et l'application peut afficher une notification. |
|
content_available |
Facultatif, booléen | Sur les plates-formes Apple, utilisez ce champ pour représenter |
|
mutable_content |
Facultatif, valeur booléenne JSON | Sur les plates-formes Apple, utilisez ce champ pour représenter |
|
time_to_live |
Facultatif, nombre | Ce paramètre spécifie la durée (en secondes) pendant laquelle le message doit être conservé dans l'espace de stockage FCM si l'appareil est hors connexion. La valeur TTL maximale acceptée est de quatre semaines, et la valeur par défaut est de quatre semaines. Pour en savoir plus, consultez Définir la durée de vie d'un message. |
|
restricted_package_
(Android uniquement) |
Facultatif, chaîne | Ce paramètre spécifie le nom du package de l'application pour laquelle les jetons d'enregistrement doivent correspondre afin de recevoir le message. | |
dry_run |
Facultatif, booléen | Lorsque ce paramètre est défini sur La valeur par défaut est |
|
Charge utile | |||
data |
Facultatif, objet | Ce paramètre spécifie les paires clé-valeur personnalisées de la charge utile du message. Par exemple, avec Sur les plates-formes Apple, si le message est envoyé via des APN, il représente les champs de données personnalisés. S'il est envoyé via FCM, il est représenté sous la forme d'un dictionnaire de clés-valeurs dans Sur Android, cela entraînerait un intent supplémentaire nommé La clé ne doit pas être un mot réservé ("from", "message_type" ou tout mot commençant par "google" ou "gcm"). N'utilisez aucun des mots définis dans ce tableau (par exemple, Nous vous recommandons d'utiliser des valeurs de type chaîne. Vous devez convertir les valeurs d'objets ou d'autres types de données autres que des chaînes (par exemple, des entiers ou des valeurs booléennes) en chaînes. |
|
notification |
Facultatif, objet | Ce paramètre spécifie les paires clé-valeur prédéfinies visibles par l'utilisateur de la charge utile de notification. Pour en savoir plus, consultez la section Compatibilité avec la charge utile de notification.
Pour en savoir plus sur les options de message de notification et de message de données, consultez la section
Types de messages. Si une charge utile de notification est fournie ou si l'option content_available est définie sur true pour un message envoyé à un appareil Apple, le message est envoyé via les APN, sinon il est envoyé via FCM.
|
Compatibilité avec la charge utile de notification
Les tableaux suivants répertorient les clés prédéfinies disponibles pour créer des messages de notification pour iOS et Android.
Paramètre | Utilisation | Description |
---|---|---|
title |
Facultatif, chaîne |
Titre de la notification. Ce champ n'est pas visible sur les téléphones et les tablettes. |
body |
Facultatif, chaîne |
Corps du texte de la notification. |
sound |
Facultatif, chaîne |
Son à lire lorsque l'appareil reçoit la notification.
Chaîne spécifiant les fichiers audio dans le bundle principal de l'application cliente ou dans le dossier |
badge |
Facultatif, chaîne |
Valeur du badge sur l'icône de l'application de l'écran d'accueil. Si cette option n'est pas spécifiée, le badge ne change pas.
Si la valeur est |
click_action |
Facultatif, chaîne |
Action associée à un clic de l'utilisateur sur la notification.
Correspond à |
subtitle |
Facultatif, chaîne |
Sous-titre de la notification. |
body_loc_key |
Facultatif, chaîne |
Clé de la chaîne de corps dans les ressources de chaîne de l'application à utiliser pour localiser le texte du corps en fonction de la localisation actuelle de l'utilisateur.
Correspond à Pour en savoir plus, consultez les sections Documentation de référence sur les clés de charge utile et Localiser le contenu de vos notifications à distance. |
body_loc_args |
Facultatif : tableau JSON en tant que chaîne |
Valeurs de chaîne variable à utiliser à la place des spécificateurs de format dans
Correspond à Pour en savoir plus, consultez les sections Documentation de référence sur les clés de charge utile et Localiser le contenu de vos notifications à distance. |
title_loc_key |
Facultatif, chaîne |
Clé de la chaîne de titre dans les ressources de chaîne de l'application à utiliser pour localiser le texte du titre en fonction de la localisation actuelle de l'utilisateur.
Correspond à Pour en savoir plus, consultez les sections Documentation de référence sur les clés de charge utile et Localiser le contenu de vos notifications à distance. |
title_loc_args |
Facultatif : tableau JSON en tant que chaîne |
Valeurs de chaîne variables à utiliser à la place des spécificateurs de format dans
Correspond à Pour en savoir plus, consultez les sections Documentation de référence sur les clés de charge utile et Localiser le contenu de vos notifications à distance. |
Paramètre | Utilisation | Description |
---|---|---|
title |
Facultatif, chaîne |
Titre de la notification. |
body |
Facultatif, chaîne |
Corps du texte de la notification. |
android_channel_id |
Facultatif, chaîne |
ID de canal de la notification (nouveauté d'Android O) L'application doit créer un canal avec cet ID de canal avant de recevoir une notification avec cet ID de canal. Si vous n'envoyez pas cet ID de chaîne dans la requête ou si l'ID de chaîne fourni n'a pas encore été créé par l'application, FCM utilise l'ID de chaîne spécifié dans le fichier manifeste de l'application. |
icon |
Facultatif, chaîne |
Icône de la notification.
Définit l'icône de notification sur |
sound |
Facultatif, chaîne |
Son à lire lorsque l'appareil reçoit la notification.
Compatible avec |
tag |
Facultatif, chaîne |
Identifiant utilisé pour remplacer les notifications existantes dans le panneau des notifications. Si elle n'est pas spécifiée, chaque requête crée une notification. Si vous spécifiez cette valeur et qu'une notification avec la même balise est déjà affichée, la nouvelle notification remplace l'ancienne dans le panneau des notifications. |
color |
Facultatif, chaîne |
Couleur de l'icône de la notification, exprimée au format |
click_action |
Facultatif, chaîne |
Action associée à un clic de l'utilisateur sur la notification. Si spécifié, une activité avec un filtre d'intent correspondant est lancée lorsqu'un utilisateur clique sur la notification. |
body_loc_key |
Facultatif, chaîne |
Clé de la chaîne de corps dans les ressources de chaîne de l'application à utiliser pour localiser le texte du corps en fonction de la localisation actuelle de l'utilisateur. Pour en savoir plus, consultez la section Ressources de chaîne. |
body_loc_args |
Facultatif : tableau JSON en tant que chaîne |
Valeurs de chaîne variable à utiliser à la place des spécificateurs de format dans Pour en savoir plus, consultez la section Mise en forme et style. |
title_loc_key |
Facultatif, chaîne |
Clé de la chaîne de titre dans les ressources de chaîne de l'application à utiliser pour localiser le texte du titre en fonction de la localisation actuelle de l'utilisateur. Pour en savoir plus, consultez la section Ressources de chaîne. |
title_loc_args |
Facultatif : tableau JSON en tant que chaîne |
Valeurs de chaîne variables à utiliser à la place des spécificateurs de format dans Pour en savoir plus, consultez la section Mise en forme et style. |
Paramètre | Utilisation | Description |
---|---|---|
title |
Facultatif, chaîne |
Titre de la notification. |
body |
Facultatif, chaîne |
Corps du texte de la notification. |
icon |
Facultatif, chaîne |
URL à utiliser pour l'icône de la notification. |
click_action |
Facultatif, chaîne |
Action associée à un clic de l'utilisateur sur la notification. Pour toutes les valeurs d'URL, HTTPS est obligatoire. |
Messages HTTP en aval (texte brut)
Le tableau suivant présente la syntaxe des cibles, des options et de la charge utile dans les messages HTTP en aval en texte brut.
Paramètre | Utilisation | Description |
---|---|---|
Targets (Cibles) | ||
registration_id |
Obligatoire, chaîne | Ce paramètre spécifie les applications clientes (jetons d'enregistrement) qui reçoivent le message. La messagerie multidiffusion (envoi à plusieurs jetons d'enregistrement) n'est autorisée qu'au format JSON HTTP. |
Options | ||
collapse_key |
Facultatif, chaîne | Pour en savoir plus, consultez le tableau 1. |
time_to_live |
Facultatif, nombre | Pour en savoir plus, consultez le tableau 1. |
restricted_package_name |
Facultatif, chaîne | Pour en savoir plus, consultez le tableau 1. |
dry_run |
Facultatif, booléen | Pour en savoir plus, consultez le tableau 1. |
Charge utile | ||
data.<key> |
Facultatif, chaîne | Ce paramètre spécifie les paires clé-valeur de la charge utile du message. Le nombre de paramètres clé-valeur n'est pas limité, mais la taille totale du message est limitée à 4 096 octets. Par exemple, sous Android, La clé ne doit pas être un mot réservé ("from", "message_type" ou tout mot commençant par "google" ou "gcm"). N'utilisez aucun des mots définis dans ce tableau (par exemple, |
Interpréter une réponse de message en aval
Le serveur de l'application doit évaluer à la fois l'en-tête et le corps de la réponse du message pour interpréter la réponse du message envoyée depuis FCM. Le tableau suivant décrit les réponses possibles.
Réponse | Description |
---|---|
200 | Le message a bien été traité. Le corps de la réponse contient plus d'informations sur l'état du message, mais son format dépend de la requête au format JSON ou au format texte brut. Pour en savoir plus, consultez le tableau 5. |
400 | Ne s'applique qu'aux requêtes JSON. Indique que la requête n'a pas pu être analysée en tant que JSON ou qu'elle contenait des champs non valides (par exemple, en transmettant une chaîne là où un nombre était attendu). Le motif exact de l'échec est décrit dans la réponse. Le problème doit être résolu avant que la requête puisse être réessayée. |
401 | Une erreur s'est produite lors de l'authentification du compte de l'expéditeur. |
5xx | Les erreurs de la plage 500-599 (par exemple, 500 ou 503) indiquent qu'une erreur interne s'est produite dans le backend FCM lors de la tentative de traitement de la requête ou que le serveur est temporairement indisponible (par exemple, en raison de délais avant expiration). L'expéditeur doit réessayer plus tard, en respectant tout en-tête Retry-After inclus dans la réponse. Les serveurs d'applications doivent implémenter un intervalle exponentiel entre les tentatives. |
Le tableau suivant liste les champs d'un corps de réponse de message en aval (JSON).
Paramètre | Utilisation | Description |
---|---|---|
multicast_id |
Obligatoire, nombre | ID (numéro) unique identifiant le message multicast. |
success |
Obligatoire, nombre | Nombre de messages traités sans erreur. |
failure |
Obligatoire, nombre | Nombre de messages qui n'ont pas pu être traités. |
results |
Obligatoire, tableau d'objets | Tableau d'objets représentant l'état des messages traités. Les objets sont listés dans le même ordre que la requête (c'est-à-dire que pour chaque ID d'enregistrement de la requête, son résultat est listé dans le même index de la réponse).
|
Paramètre | Utilisation | Description |
---|---|---|
message_id |
Facultatif, nombre | ID de message du sujet lorsque FCM a bien reçu la requête et tentera de la diffuser à tous les appareils abonnés. |
error |
Facultatif, chaîne | Erreur survenue lors du traitement du message. Les valeurs possibles sont indiquées dans le tableau 9. |
Paramètre | Utilisation | Description |
---|---|---|
id |
Obligatoire, chaîne | Ce paramètre spécifie l'ID de message unique FCM traité avec succès. |
registration_id |
Facultatif, chaîne | Ce paramètre spécifie le jeton d'enregistrement de l'application cliente à laquelle le message a été traité et envoyé. |
Paramètre | Utilisation | Description |
---|---|---|
Error |
Obligatoire, chaîne | Ce paramètre spécifie la valeur d'erreur lors du traitement du message pour le destinataire. Pour en savoir plus, consultez le tableau 9. |
Codes de réponse d'erreur des messages en aval
Le tableau suivant répertorie les codes de réponse d'erreur pour les messages en aval.
Erreur | HTTP Code | Action recommandée |
---|---|---|
Jeton d'enregistrement manquant | 200 + error:MissingRegistration | Vérifiez que la requête contient un jeton d'enregistrement (dans registration_id dans un message en texte brut, ou dans le champ to ou registration_ids au format JSON). |
Jeton d'enregistrement non valide | 200 + error:InvalidRegistration | Vérifiez le format du jeton d'enregistrement que vous transmettez au serveur. Assurez-vous qu'il correspond au jeton d'enregistrement que l'application cliente reçoit lors de son enregistrement auprès de Firebase Notifications. N'écourtez pas le titre ni n'ajoutez de caractères supplémentaires. |
Appareil non enregistré | 200 + error:NotRegistered | Un jeton d'enregistrement existant peut cesser d'être valide dans plusieurs cas, par exemple:
|
Nom de package non valide | 200 + error:InvalidPackageName | Assurez-vous que le message a été adressé à un jeton d'enregistrement dont le nom de package correspond à la valeur transmise dans la requête. |
Erreur d'authentification | 401 | Le compte de l'expéditeur utilisé pour envoyer un message n'a pas pu être authentifié. Voici les causes possibles:
|
Expéditeur non concordant | 200 + error:MismatchSenderId | Un jeton d'enregistrement est associé à un certain groupe d'expéditeurs. Lorsqu'une application cliente s'inscrit pour FCM, elle doit spécifier les expéditeurs autorisés à envoyer des messages. Vous devez utiliser l'un de ces ID d'expéditeur lorsque vous envoyez des messages à l'application cliente. Si vous passez à un autre expéditeur, les jetons d'enregistrement existants ne fonctionneront pas. |
JSON non valide | 400 | Vérifiez que le message JSON est correctement formaté et qu'il contient des champs valides (par exemple, assurez-vous que le bon type de données est transmis). |
Paramètres non valides | 400 + error:InvalidParameters | Vérifiez que les paramètres fournis portent le bon nom et le bon type. |
Message trop volumineux | 200 et plus : erreur :MessageTooBig | Vérifiez que la taille totale des données de charge utile incluses dans un message ne dépasse pas les limites FCM: 4 096 octets pour la plupart des messages ou 2 048 octets dans le cas des messages destinés à des sujets. Cela inclut à la fois les clés et les valeurs. |
Clé de données non valide | 200 + erreur :
InvalidDataKey |
Vérifiez que les données de la charge utile ne contiennent pas de clé (telle que from , gcm ou toute valeur précédée du préfixe google ) utilisée en interne par FCM. Notez que certains mots (comme collapse_key ) sont également utilisés par FCM, mais sont autorisés dans la charge utile. Dans ce cas, la valeur de la charge utile sera remplacée par la valeur FCM. |
Valeur TTL non valide | 200 + error:InvalidTtl | Vérifiez que la valeur utilisée dans time_to_live est un entier représentant une durée en secondes comprise entre 0 et 2 419 200 (4 semaines). |
Délai avant expiration | Erreur 5xx ou 200 et plus:indisponible | Le serveur n'a pas pu traiter la requête à temps. Réessayez la même requête, mais vous devez:
Les expéditeurs qui causent des problèmes risquent d'être ajoutés à la liste noire. |
Erreur interne du serveur | 500 ou 200 + error:InternalServerError | Le serveur a rencontré une erreur lors du traitement de la requête. Vous pouvez réessayer la même requête en suivant les conditions requises indiquées sous "Délai avant expiration" (voir ligne ci-dessus). Si l'erreur persiste, veuillez contacter l'assistance Firebase. |
Fréquence de messages pour les appareils dépassée | Erreur 200 et plus : DeviceMessageRate dépassé |
Le nombre de messages envoyés à un appareil spécifique est trop élevé. Si une application Apple envoie des messages à un débit supérieur aux limites des APN, elle peut recevoir ce message d'erreur. Réduisez le nombre de messages envoyés à cet appareil et utilisez un intervalle exponentiel entre les tentatives d'envoi. |
Nombre maximal de messages par sujet dépassé | Erreur 200 et plus :
TopicsMessageRate Excédé |
Le nombre de messages envoyés aux abonnés d'un sujet particulier est trop élevé. Réduisez le nombre de messages envoyés pour ce sujet et utilisez un intervalle exponentiel entre les tentatives d'envoi. |
Identifiants APNs non valides | Erreur 200 et plus : InvalidApnsCredential |
Impossible d'envoyer un message ciblé sur un appareil Apple, car la clé d'authentification des APN requise n'a pas été importée ou a expiré. Vérifiez la validité de vos identifiants de développement et de production. |
Gestion des groupes d'appareils
Le tableau suivant présente les clés permettant de créer des groupes d'appareils, et d'ajouter et de supprimer des membres. Pour en savoir plus, consultez le guide de votre plate-forme, iOS+ ou Android.
Paramètre | Utilisation | Description |
---|---|---|
operation |
Obligatoire, chaîne | Opération à exécuter.Les valeurs valides sont create , add et remove . |
notification_key_name |
Obligatoire, chaîne | Nom défini par l'utilisateur du groupe d'appareils à créer ou à modifier. |
notification_key |
Obligatoire (sauf pour l'opération create , chaîne |
Identifiant unique du groupe d'appareils. Cette valeur est renvoyée dans la réponse d'une opération create réussie et est obligatoire pour toutes les opérations ultérieures sur le groupe d'appareils. |
registration_ids |
Obligatoire, tableau de chaînes | Les jetons d'appareil à ajouter ou à supprimer. Si vous supprimez tous les jetons d'enregistrement existants d'un groupe d'appareils, FCM le supprime. |