web-dev-qa-db-fra.com

Notification Firebase Silent Apns

Existe-t-il un moyen d'envoyer un APNS silencieux en utilisant la base de feu de Google? Il semble que si l'application est en arrière-plan, elle affichera toujours une notification à l'utilisateur.

Merci?

23
roiberg

Vous pouvez envoyer des messages APNS silencieux à l'aide de l'API du serveur FCM https://firebase.google.com/docs/cloud-messaging/http-server-ref

En particulier, vous devez utiliser:

  • Le champ de données :

Ce paramètre spécifie les paires clé-valeur personnalisées de la charge utile du message.

Par exemple, avec les données: {"score": "3x1"}:

Sur iOS, si le message est envoyé via APNS, il représente les champs de données personnalisés. S'il est envoyé via le serveur de connexion FCM, il serait représenté comme un dictionnaire de valeurs clés dans l'application AppDelegate: didReceiveRemoteNotification :.

La clé ne doit pas être un mot réservé ("de" ou tout mot commençant par "google" ou "gcm"). N'utilisez aucun des mots définis dans ce tableau (comme collapse_key).

Les valeurs dans les types de chaîne sont recommandées. Vous devez convertir des valeurs dans des objets ou d'autres types de données non-chaîne (par exemple, des entiers ou des booléens) en chaîne

  • Le champ disponible :

Sur iOS, utilisez ce champ pour représenter le contenu disponible dans la charge utile APNS. Lorsqu'une notification ou un message est envoyé et que cela est défini sur true, une application cliente inactive est réveillée. Sur Android, les messages de données réveillent l'application par défaut. Sur Chrome, actuellement non pris en charge.

Documentation complète: https://firebase.google.com/docs/cloud-messaging/http-server-ref#downstream-http-messages-json

32
Diego Giorgini

Pour une notification vraiment silencieuse (au premier plan et en arrière-plan) à l'aide du serveur FCM, utilisez ces champs:

"to" : "[token]",
"content_available": true,
"priority": "high",
"data" : {
  "key1" : "abc",
  "key2" : 123
}

REMARQUE: Assurez-vous que vous utilisez "content_available" PAS "content-available" avec FCM. Il est converti pour APNS et ne sera pas reçu correctement sinon. La différence m'avait fait trébucher pendant un certain temps.

29
c0deblooded

J'explique ce sujet plus en détail sur mon blog. http://blog.boxstory.com/2017/01/how-to-send-silent-Push-notification-in.html

** le point clé est: "content_available: true"

c'est un exemple JSON

{
    "to" : "<device>",
    "priority": "normal",
    "content_available": true, <-- this key is converted to 'content-available:1'
    "notification" : {
      "body" : "noti body",
      "title" : "noti title",
      "link": "noti link "
    }
}

Remarque: Si l'exemple JSON ci-dessus est envoyé, la notification sera visible pour l'utilisateur. Utilisez ci-dessous si vous ne voulez pas que l'utilisateur voit la notification Push.

{
  "to": "<device>",
  "priority": "normal",
  "content_available": true <-- this key is converted to 'content-available:1'
}
9
Jun-ho Seo

Pour les gars qui n'utilisent pas le Legacy HTTP comme indiqué dans les autres réponses et utilisez la dernière v1 HTTP protocol, J'ai enfin trouvé la bonne façon d'envoyer des notifications silencieuses.

Exemple NodeJS utilisant firebase-admin:

    const message = {
      apns: {
        payload: {
          aps: {
            "content-available": 1,
            alert: ""
          }
        }
      }
    };

    admin
      .messaging()
      .send(message)
      .then(response => {
        // Response is a message ID string.
        console.log("Successfully sent message:", response);
      })
      .catch(error => {
        console.log("Error sending message:", error);
      });

Explication:

  • Il semble que la charge utile dans apns ne soit pas convertie par Firebase dans v1 HTTP protocol vous avez donc besoin de l'original "content-available": 1 pour ça.
  • alert: "" est également nécessaire. Si vous essayez d'envoyer des notifications silencieuses à l'aide de quelque chose comme Pusher, vous ne trouverez que content-available ne peut pas le déclencher. Au lieu de cela, l'ajout de champs supplémentaires tels que sound ou alert peut le faire fonctionner. Voir La notification push silencieuse dans iOS 7 ne fonctionne pas . Puisque Firebase interdit le son vide, nous pouvons utiliser une alerte vide pour cela.
0
Robert Ying