web-dev-qa-db-fra.com

Charge utile des notifications à distance FCM pour iOS et Android

Nous utilisons FCM pour envoyer des notifications à distance pour iOS et Android. Voici les charges utiles que nous envoyons depuis le backend.

options = {
     notification: {
          title: "title",
          body:  body,
          sound: 'default'
     },
    priority: "high",
    content_available: true,
    data: {
       type: 'type',
       id: id,
    }
}

Cela fonctionne pour ios et Android. Mais pour une raison quelconque, Android nous devons envoyer title, body et sound pour les clés dans data charge utile et devez supprimer notification charge utile.

Maintenant, les notifications ne reçoivent pas le côté ios lorsque l'application n'est pas active, les notifications de bannière n'arrivent pas mais les données sont reçues lorsque l'application est active. Nous avons besoin de bannières côté iOS.

Est-ce que la touche notification est obligatoire pour afficher banner dans iOS?

Comment utiliser la même charge utile pour iOS et Android.

options = {

priority: "high",
content_available: true,
data: {
      title: "title",
      body:  body,
      sound: 'default'
      type: 'type',
      id: id,
     }
}

A également essayé d'ajouter content_available et priority touches avec différentes combinaisons. Traversé tous les documents FCM et cela reste confus. Aide/Suggestions appréciées.

18
preetam

Une fonctionnalité récente a été ajoutée pour FCM qui donne une option pour fournir des paramètres spécifiques pour des plates-formes spécifiques, appelée Platform Overrides :

Personnalisation d'un message sur toutes les plateformes

Les messages envoyés par le protocole HTTP FCM v1 peuvent contenir deux types de paires de clés JSON:

  • un ensemble commun de clés à interpréter par toutes les instances d'application qui reçoivent le message.
  • blocs de clés spécifiques à la plate-forme interprétés uniquement par les instances d'application s'exécutant sur la plate-forme spécifiée.
  • Les blocs spécifiques à la plate-forme vous offrent la flexibilité de personnaliser les messages pour différentes plates-formes afin de garantir qu'ils sont traités correctement lorsqu'ils sont reçus. Dans de nombreux scénarios, il est logique d'utiliser à la fois des clés communes et des clés spécifiques à la plate-forme dans un message donné.

Quand utiliser les clés communes

  • Chaque fois que vous ciblez des instances d'application sur toutes les plates-formes - iOS, Android et Web
  • Lorsque vous envoyez des messages à des sujets

Les clés communes qui sont interprétées par toutes les instances d'application, quelle que soit la plate-forme, sont message.notification.title, message.notification.body et message.data.

Quand utiliser des clés spécifiques à la plate-forme

  • Lorsque vous souhaitez envoyer des champs uniquement à des plates-formes particulières
  • Pour envoyer des champs spécifiques à la plate-forme en plus des clés communes

Chaque fois que vous souhaitez envoyer des valeurs à des plates-formes spécifiques uniquement, n'utilisez pas de clés communes; utiliser des blocs de clés spécifiques à la plate-forme. Par exemple, pour envoyer une notification uniquement à iOS et au Web, mais pas à Android, vous devez utiliser deux blocs de clés distincts, un pour iOS et un pour le Web.

Lorsque vous envoyez des messages avec des options de remise spécifiques, utilisez des clés spécifiques à la plate-forme pour les définir. Vous pouvez spécifier différentes valeurs par plateforme si vous le souhaitez; mais même lorsque vous souhaitez définir essentiellement la même valeur sur toutes les plates-formes, vous devez utiliser des clés spécifiques aux plates-formes. En effet, chaque plate-forme peut interpréter la valeur légèrement différemment - par exemple, la durée de vie est définie sur Android comme heure d'expiration en secondes, tandis que sur iOS, elle est définie comme date d'expiration .

Exemple: message de notification avec des options de livraison spécifiques à la plate-forme

La demande d'envoi v1 suivante envoie un titre et un contenu de notification communs à toutes les plates-formes, mais envoie également des remplacements spécifiques à la plate-forme. Plus précisément, la demande:

  • définit une longue durée de vie pour Android et les plates-formes Web, tout en définissant la priorité du message APNs (iOS) sur un paramètre faible
  • définit les clés appropriées pour définir le résultat d'un appui de l'utilisateur sur la notification sur Android et iOS - click_action et catégorie, respectivement.
{
  "message":{
     "token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
     "notification":{
       "title":"Match update",
       "body":"Arsenal goal in added time, score is now 3-0"
     },
     "Android":{
       "ttl":"86400s",
       "notification"{
         "click_action":"OPEN_ACTIVITY_1"
       }
     },
     "apns": {
       "headers": {
         "apns-priority": "5",
       },
       "payload": {
         "aps": {
           "category": "NEW_MESSAGE_CATEGORY"
         }
       }
     },
     "webpush":{
       "headers":{
         "TTL":"86400"
       }
     }
   }
 }

Voir documentation de référence HTTP v1 pour des détails complets sur les clés disponibles dans les blocs spécifiques à la plate-forme dans le corps du message. Pour plus d'informations sur la création de demandes d'envoi contenant le corps du message, voir Build Send Requests .

6
AL.