Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

Envoyer des messages à des groupes d'appareils sur Android

La messagerie de groupe d'appareils vous permet d'ajouter plusieurs appareils à un seul groupe. Ceci est similaire à la messagerie thématique, 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 thématique 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 de périphériques via l'héritage XMPP ou HTTP protocoles sur votre serveur d'applications. Firebase Administrateur SDK pour Node.js basé sur les protocoles existants fournissent également des fonctionnalités de messagerie de groupe de périphériques. 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. Insérer le notification_key , qui identifie le groupe de périphériques par mappage d' un groupe particulier (généralement un utilisateur) pour tous les jetons d'enregistrement associés du groupe. Vous pouvez créer des clés de notification sur le serveur d'applications.

La gestion de base des groupes d'appareils (création et suppression de groupes et ajout ou suppression d'appareils) est effectuée via le serveur d'applications. Voir l'héritage référence du protocole HTTP pour une 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 requête POST qui fournit un nom pour le groupe et une liste de jetons d'enregistrement pour les périphériques. FCM retourne une nouvelle notification_key qui représente le groupe de périphériques.

requête HTTP POST

Envoyez une demande comme suit à 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 être un nom d' utilisateur) qui est unique à un groupe donné. Le notification_key_name et notification_key sont uniques à un groupe de jetons d'enregistrement. Il est important que notification_key_name est unique par application client si vous avez plusieurs applications client pour le même ID de l' expéditeur . Cela garantit que les messages ne vont qu'à l'application cible prévue.

Format de réponse

Une demande réussie retourne un notification_key comme suit:

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

Enregistrez le notification_key et correspondant notification_key_name à une utilisation dans les opérations ultérieures.

Récupérer une clé de notification

Si vous devez 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.

Ajout et suppression d'appareils d'un groupe d'appareils

Pour ajouter ou supprimer des périphériques d'un groupe existant, envoyer une requête POST avec l' operation du jeu de paramètres pour add ou remove , et de fournir les jetons d'enregistrement pour ajout ou le retrait.

requête HTTP POST

Par exemple, pour ajouter un périphérique à l'enregistrement jeton bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1... à appUser-Chris , vous envoyer cette demande:

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

Format de réponse

Une demande réussie à ajouter ou supprimer un appareil retourne un notification_key comme ce qui suit:

{
   "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. Réglez le to paramètre à la clé de notification unique pour le groupe de périphériques. Voir les types de message pour plus de détails sur le soutien de la charge utile. Les exemples de cette page montrent comment envoyer des messages de données à des groupes de périphériques dans les protocoles HTTP et XMPP.

Requête HTTP POST de 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 » - le notification_key dispose de 2 jetons d'enregistrement qui y sont associés, et le message a été envoyé avec succès à tous les deux:

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

Voici un exemple de « succès partiel » - le notification_key jetons a 3 l' enregistrement associé. Le message a été envoyé avec succès à 1 des jetons d'enregistrement uniquement. Les listes de messages de réponse , 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 doit être livré à un ou plusieurs de l'enregistrement des jetons associés à un notification_key , le serveur d'application devrait réessayer avec backoff entre les tentatives.

Si le serveur tente d'envoyer un message à un groupe de périphériques qui n'a pas de membres, 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 » - le notification_key dispose de 3 jetons d'enregistrement qui y sont associés, et le message a été envoyé avec succès à tous:

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

Voici un exemple de « succès partiel » - le notification_key jetons a 3 l' enregistrement associé. 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 réussi à recevoir 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 appareils du groupe. Le serveur d'applications recevra une réponse nack.

Pour la liste complète des options de message, voir les informations de référence pour votre protocole de serveur de connexion choisi, HTTP ou XMPP .