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?
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:
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
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
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.
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"
{
"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'
}
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:
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.