Catch up on highlights from Firebase at Google I/O 2023. Learn more

Envoyer des messages aux groupes de périphériques sur C++

La messagerie de groupe d'appareils vous permet d'ajouter plusieurs appareils à un seul groupe. Ceci est similaire à la messagerie de sujet, mais inclut l'authentification pour garantir que l'appartenance au groupe est gérée uniquement par vos serveurs. Par exemple, si vous souhaitez envoyer différents messages à différents modèles de téléphone, vos serveurs peuvent ajouter/supprimer des enregistrements aux groupes appropriés et envoyer le message approprié à chaque groupe. La messagerie de groupe d'appareils diffère de la messagerie de rubrique en ce sens qu'elle implique la gestion des groupes d'appareils à partir de vos serveurs plutôt que directement dans votre application.

Vous pouvez utiliser la messagerie de groupe d'appareils via les anciens protocoles XMPP ou HTTP sur votre serveur d'applications. Les anciennes versions du SDK Firebase Admin pour Node.js sont basées sur les protocoles hérités et fournissent également des fonctionnalités de messagerie de groupe d'appareils. Le nombre maximum de membres autorisés pour une clé de notification est de 20.

Gestion des groupes d'appareils

Avant d'envoyer des messages à un groupe d'appareils, vous devez :

  1. Obtenez des jetons d'enregistrement pour chaque appareil que vous souhaitez ajouter au groupe.

  2. Créez la notification_key , qui identifie le groupe d'appareils en mappant un groupe particulier (généralement un utilisateur) à tous les jetons d'enregistrement associés au groupe. Vous pouvez créer des clés de notification sur le serveur d'application.

La gestion de base des groupes d'appareils (création et suppression de groupes, ajout ou suppression d'appareils) est effectuée via le serveur d'applications. Consultez la référence du protocole HTTP hérité pour obtenir la liste des clés prises en charge.

Gestion des groupes d'appareils sur le serveur d'applications

Création d'un groupe d'appareils

Pour créer un groupe de périphériques, envoyez une demande POST qui fournit un nom pour le groupe et une liste de jetons d'enregistrement pour les périphériques. FCM renvoie une nouvelle notification_key qui représente le groupe d'appareils.

Requête HTTP POST

Envoyez une demande comme celle-ci à https://fcm.googleapis.com/fcm/notification :

https://fcm.googleapis.com/fcm/notification
Content-Type:application/json
Authorization:key=API_KEY
project_id:SENDER_ID

{
   "operation": "create",
   "notification_key_name": "appUser-Chris",
   "registration_ids": ["bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
                        "cR1rjyj4_Kc:APA91bGusqbypSuMdsh7jSNrW4nzsM...",
                        ... ]

Le notification_key_name est un nom ou un identifiant (par exemple, il peut s'agir d'un nom d'utilisateur) qui est unique pour un groupe donné. notification_key_name et notification_key sont uniques à un groupe de jetons d'enregistrement. Il est important que notification_key_name soit unique par application cliente si vous avez plusieurs applications clientes pour le même ID d'expéditeur . Cela garantit que les messages ne parviennent qu'à l'application cible prévue.

Format de réponse

Une requête réussie renvoie une notification_key comme celle-ci :

{
   "notification_key": "APA91bGHXQBB...9QgnYOEURwm0I3lmyqzk2TXQ"
}

Enregistrez la notification_key et le notification_key_name correspondant à utiliser dans les opérations suivantes.

Récupérer une clé de notification

Si vous avez besoin de récupérer une clé de notification existante, utilisez le notification_key_name dans une requête GET comme indiqué :

https://fcm.googleapis.com/fcm/notification?notification_key_name=appUser-Chris
Content-Type:application/json
Authorization:key=API_KEY
project_id:SENDER_ID
{}

Pour chaque requête GET pour un nom de clé de notification donné, le serveur renvoie une chaîne codée unique. Bien que chaque chaîne puisse sembler être une clé différente, il s'agit en fait d'une valeur `notification_key` valide.

Ajouter et supprimer des appareils d'un groupe d'appareils

Pour ajouter ou supprimer des périphériques d'un groupe existant, envoyez une demande POST avec le paramètre operation défini sur add ou remove , et fournissez les jetons d'enregistrement pour l'ajout ou la suppression.

Requête HTTP POST

Par exemple, pour ajouter un appareil avec le jeton d'enregistrement bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1... à appUser-Chris , vous enverriez cette requête :

{
   "operation": "add",
   "notification_key_name": "appUser-Chris",
   "notification_key": "APA91bGHXQBB...9QgnYOEURwm0I3lmyqzk2TXQ",
   "registration_ids": ["bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1..."]
}

Format de réponse

Une demande réussie d'ajout ou de suppression d'un appareil renvoie une notification_key comme celle-ci :

{
   "notification_key": "APA91bGHXQBB...9QgnYOEURwm0I3lmyqzk2TXQ"
}

Envoi de messages en aval à des groupes d'appareils

L'envoi de messages à un groupe d'appareils est très similaire à l'envoi de messages à un appareil individuel. Définissez le paramètre to sur la clé de notification unique pour le groupe de périphériques. Voir Types de message pour plus de détails sur la prise en charge de la charge utile. Les exemples de cette page montrent comment envoyer des messages de données à des groupes d'appareils dans les anciens protocoles HTTP et XMPP.

Requête HTTP POST du groupe de périphériques

https://fcm.googleapis.com/fcm/send
Content-Type:application/json
Authorization:key=AIzaSyZ-1u...0GBYzPu7Udno5aA

{
  "to": "aUniqueKey",
  "data": {
    "hello": "This is a Firebase Cloud Messaging Device Group Message!",
   }
}

Réponse HTTP du groupe de périphériques

Voici un exemple de « succès » : la notification_key est associée à 2 jetons d'enregistrement, et le message a été envoyé avec succès aux deux :

{
  "success": 2,
  "failure": 0
}

Voici un exemple de "succès partiel" - la notification_key est associée à 3 jetons d'enregistrement. Le message a été envoyé avec succès à 1 des jetons d'enregistrement uniquement. Le message de réponse répertorie les jetons d'enregistrement ( registration_ids ) qui n'ont pas reçu le message :

{
  "success":1,
  "failure":2,
  "failed_registration_ids":[
     "regId1",
     "regId2"
  ]
}

Lorsqu'un message ne parvient pas à être remis à un ou plusieurs des jetons d'enregistrement associés à une notification_key , le serveur d'application doit réessayer avec une interruption entre les tentatives.

Si le serveur tente d'envoyer un message à un groupe de périphériques qui n'a aucun membre, la réponse ressemble à ce qui suit, avec 0 succès et 0 échec :

{
  "success": 0,
  "failure": 0
}

Message XMPP du groupe de périphériques

<message id="">
  <gcm xmlns="google:mobile:data">
  {
      "to": "aUniqueKey",
      "message_id": "m-1366082849205" ,
      "data": {
          "hello":"This is a Firebase Cloud Messaging Device Group Message!"
      }
  }
  </gcm>
</message>

Réponse XMPP du groupe de périphériques

Lorsque le message est envoyé avec succès à l'un des appareils du groupe, le serveur de connexion XMPP répond par un ACK. Si tous les messages envoyés à tous les appareils du groupe échouent, le serveur de connexion XMPP répond par un NACK.

Voici un exemple de "succès" — la notification_key est associée à 3 jetons d'enregistrement, et le message a été envoyé avec succès à chacun d'eux :

{
  "from": "aUniqueKey",
  "message_type": "ack",
  "success": 3,
  "failure": 0,
  "message_id": "m-1366082849205"
}

Voici un exemple de "succès partiel" - la notification_key est associée à 3 jetons d'enregistrement. Le message a été envoyé avec succès à 1 des jetons d'enregistrement uniquement. Le message de réponse répertorie les jetons d'enregistrement qui n'ont pas reçu le message :

{
  "from": "aUniqueKey",
  "message_type": "ack",
  "success":1,
  "failure":2,
  "failed_registration_ids":[
     "regId1",
     "regId2"
  ]
}

Lorsque le serveur de connexion FCM ne parvient pas à livrer à tous les périphériques du groupe. Le serveur d'application recevra une réponse nack.

Pour la liste complète des options de message, consultez les informations de référence du protocole de serveur de connexion que vous avez choisi, HTTP ou XMPP .