3
votes

Impossible d'envoyer des notifications push silencieuses à iOS à l'aide de FCM

J'essaie d'envoyer une notification de données silencieuse à un appareil iOS à l'aide du module node.js firebase-admin 7.0.0 et le code suivant:

{"aps":{ "content-available": 1,"badge":0, "hello": "there" }}

Je reçois une réponse disant que le message a été envoyé, mais il n'arrive jamais sur l'appareil. Alors que si j'envoie le message en utilisant NWPusher cela fonctionne bien (exemple de charge utile ci-dessous) em >:

// load lib
var firebase = require('firebase-admin');

// add API keys
firebase.initializeApp({
    credential: firebase.credential.cert('./certs/firebase-private-key.json')
});

// device token send back from device
var token = '00397db1aa2f1fa625f71deef0c8e8ef0d4427cf60a13c0fb4bd290dcec41f4b';

// data message to send (contains no notification details so should be silent)
var message = {
   data: {
      key1: 'hello',
      key2: 'world'
   }
};

var options = {
    priority: 'high',
    timeToLive: 60 * 60 * 24,
    contentAvailable: true,
    mutableContent: true
};

// send the message
firebase.messaging().sendToDevice(token, message, options).then(function (res) {
    // it worked!
    console.log(res);
})
.catch(function (err) {
    // it failed :(
    console.log(err);
});

Des idées?

FYI: J'ai également ouvert un ticket sur GitHub


15 commentaires

Avez-vous vérifié la charge utile de la notification silencieuse pour iOS


Voulez-vous dire la documentation iOS?


Oui, je veux dire pour la charge utile standard iOS pour une notification silencieuse


Seule la notification silencieuse ne vient pas.? ou la notification normale elle-même ne vient pas ..?


Pouvez-vous s'il vous plaît ajouter ce qui se passe dans la fonction sendToDevice


Les notifications normales fonctionnent bien, le problème est que les notifications silencieuses n'arrivent jamais - mais elles le font si elles sont envoyées via FWPusher


Code à l'intérieur de sendToDevice ..?


Comme ci-dessus, enregistre simplement la sortie sur la console pour le moment.


@JohnDoherty Recevez-vous un message d'erreur lors de l'envoi de la notification


Non, pas de messages d'erreur


Essayez d'examiner le format de message utilisé. Peut-être quelque chose dans les champs spécifiques à la plate-forme ici: firebase.google.com/docs/cloud -messaging / send-message J'ai eu un problème similaire lors de l'utilisation d'Amazon SNS. La capture d'écran montre le paramètre de la console SNS dans AWS. stackoverflow.com/questions/45303668/...


Fonctionne-t-il avec les notifications normales?


Je ne suis pas sûr mais j'ai envoyé une notification: {badge: numOfBadge} dans l'objet message et ça marche, noti silencieux. Parce que je veux mettre à jour le numéro de badge. message = {data: {key1: 'hello', key2: 'world'}, notification: {badge: 0}}


@JohnDoherty Avez-vous réussi à le faire fonctionner? Je suis confronté au même problème et fcm envoie une réponse positive mais elle n'est pas livrée à un appareil. Fonctionne avec NWPusher.


Non, je n'ai jamais réussi à le résoudre, alors j'ai dû passer à autre chose. Cela pourrait valoir la peine de rouvrir le ticket github.com/firebase/firebase-admin-node/ numéros / 467


3 Réponses :


-3
votes

Ceci est la version PHP pour envoyé silencieux pour ios. Veuillez ajouter 'content-available' => 1 pour une notification silencieuse

 $body = array(
   'content-available' => 1,
   'sound' => ''
 ); 

{
  "aps" : {
    "alert" : "Notification with custom payload!",
    "badge" : 1,
    "content-available" : 1
  },
  "data" :{
    "title" : "Game Request",
    "body" : "Bob wants to play poker",
    "action-loc-key" : "PLAY"
  }
}


4 commentaires

Vous devez utiliser une version plus ancienne de l'API, car j'obtiens l'erreur suivante en utilisant cette charge utile: La charge utile de messagerie contient une propriété "aps" non valide. Les propriétés valides sont "data" et "notification".


mec je viens de vous donner un exemple en PHP, vous devez créer ce genre de charge utile dans votre node.js


Je l'ai fait, et cela a échoué avec l'erreur que j'ai mentionnée. Comme je l'ai dit, vous devez utiliser une version différente de l'API


La question ne demande pas de script PHP



2
votes

Votre code semble correct. Vous pouvez essayer plusieurs combinaisons de vrai et faux dans le contenu mutable et le contenu disponible. Et vous pouvez également essayer de ne pas envoyer de champs mutableContent. Mais autant que je me souvienne, les deux devraient être vrais.

Une autre façon de déboguer est de vérifier ce que json sort de nodejs. Vous pouvez essayer la même chose charge utile dans NWPusher ou PostMan. Cela vous donnera un indice.

J'ai essayé la charge utile suivante dans postman, pour moi cela fonctionne très bien

{"mutable_content":true,"content_available" : true,"priority":"high","registration_ids":["d3-fa7XDQQ4:APA91bEKXbT3HAv6ko9RukcxaB4QBr8zOIT06CBpj9o0Sl6TxsMpTnAMQ86t14foIcuQuDUyzMApbvDORELYyD0WOX3BcfP7ZNtWx9uY0JGm2B7cmdlPoOFs68fe6rz3Q7tq_8Ib7Y4H"]}


1 commentaires

@JohnDoherty, avez-vous essayé la combinaison de vrai et de faux dans le contenu mutable et le contenu disponible ..?



0
votes

Pour les notifications silencieuses, vous devez vous assurer de deux choses:

1- Votre charge utile n'a pas de clé alert dans votre charge utile

2- Avoir content-available ": 1 dans votre payload

3- Le mode d'arrière-plan pour la notification push est activé (sélectionnez votre cible> fonctionnalités> Modes d'arrière-plan> Notification à distance)

exemple de charge utile:

{
    "aps" : {
        "content-available" : 1
    },
    "acme1" : "bar",
    "acme2" : 42
}

pour plus d'informations, consultez la référence Apple: Envoi silencieux des mises à jour vers votre application


0 commentaires