La FCM notifications et collapse_key
Je suis l'envoi de notifications aux utilisateurs de dispositifs Android bien que le Firebase Notification de la console et je remarque que même si j'envoie 10 différentes notifications alors que l'appareil est en mode hors connexion, une fois que l'utilisateur est en ligne, elle/il va recevoir toutes 10.
Cependant dans Firebase de la documentation, il est indiqué que:
FCM permet à un maximum de quatre différents effondrement par des touches de l'appareil pour être utilisé par le serveur d'application à un moment donné. En d'autres termes, le FCM, le serveur de connexion simultanées peuvent stocker les quatre différents pliable envoyer de messages de synchronisation par périphérique, chacun avec un effondrement de la clé. Si vous dépassez ce nombre, la FCM ne conserve quatre effondrement touches, avec aucune garantie au sujet de ceux qui sont conservés.
Et donc ne devrait pas l'utilisateur de recevoir seulement 4 notifications? Ai-je raté quelque chose? (Je ne suis pas l'extension de la FirebaseMessagingService
, je sors de la notification de la manutention de la SDK)
Mise à JOUR: Si vous ne spécifiez pas un effondrement de la clé dans le Firebase notifications de la console, il semble que l'implicite de l'effondrement de la clé est attribuée à la notification et qui est le nom du package de l'application. Je l'ai testé en vérifiant toutes les paires clé/valeur de la getIntent().getExtras()
jeu de clés, une fois que j'ai lancer l'application en appuyant sur la notification. Et en effet, je suis un collapse_key
clé avec la valeur du nom du paquet, même si je n'ai pas spécifié.
Mise à JOUR 2: j'ai essayé de gérer les notifications par l'extension de la FirebaseMessagingService
, pour que je puisse recevoir les messages de notifications de la console, lorsque l'application est au premier plan. Je reçois le message de notification et je manuellement l'affichage d'une notification à l'utilisateur. Et devinez quoi. L'effondrement des clés de l'excellent travail! Je reçois une notification unique, même si j'ai envoyer des notifications multiples avec le même effondrement de la clé. MAIS ce qui se passe n'est évidemment lorsque l'application est au premier plan, parce que le Firebase SDK ne pas appeler le onMessageReceived()
lorsque l'application est en arrière-plan, mais au lieu de cela, il traite la déclaration elle-même. Est-ce à dire que c'est un bug de la Firebase SDK? (puisque le problème se produit uniquement lorsque la notification est affichée par le SDK)
Donc, la question reste, pourquoi je reçois tous les 10 notifications depuis chaque notification a le même effondrement de la clé? Peut-être un FCM bug?
C'est bien ce que je pensais, mais j'ai lu ceci: stackoverflow.com/questions/39655543/... qui stipule que les notifications ont implicite de l'effondrement de la clé.
Pour des fins de test, je suis juste de désactiver le Wi-Fi pour 1 ou 2 minutes. Je n'ai toujours pas compris, si je ne spécifiez pas un effondrement de la clé, est-il implicite? Ou pas de fermeture à clé, signifie toutes les notifications sont livrés sans s'effondrer?
Merci pour vos commentaires, @AL j'ai testé 1 heure d'intervalle, mais toujours le même. -Ashutosh je suis l'envoi des notifications par le biais de la Firebase console (Notifications compositeur), sans ajouter d'autres touches autres que celles par défaut. -Kato il ya une semaine, j'ai fait quelques tests et j'ai eu certainement utilisé plus de 4 effondrement des clés, mais depuis je ne spécifiez pas un. Pourrait qui ont brisé les notifications?
Hmm. Je pourrais l'essayer sur ma fin, et voir si je pouvais reproduire. En attendant, pourriez-vous aussi essayer d'envoyer le
notification
des messages à partir de votre Serveur d'Application ou tout simplement utiliser les Facteur ou cURL et de voir de qui fait une différence?OriginalL'auteur MScott | 2017-06-14
Vous devez vous connecter pour publier un commentaire.
Après la lecture du billet et des commentaires, je ne suis pas complètement clair sur tout ce qui a été essayé, qui a été couronnée de succès, et qui a échoué. Je vais couvrir un certain nombre si des éléments et de l'espoir que quelque chose est utile.
Votre post indique que, pour certains tests, vous avez défini un effondrement de la clé lorsque vous avez composé le message dans Firebase de la console. Ce n'est pas possible. Si vous avez ouvert options Avancées et entra dans une paire clé/valeur en vertu de de données Personnalisé, qui ne fonctionnera pas. Ces valeurs sont stockées dans le message que dans le
data
clé, pas au plus haut niveau du message, le cascollapse_key
doit apparaître. Aussi, Le tableau 1 dans la documentation comprend un avertissement quedata
clés ne doivent pas être l'un des mots réservés dans le tableau, plus précisément en citantcollapse_key
:Comme indiqué dans les commentaires de votre poste, la console attribue automatiquement un effondrement de la clé qui est le nom du paquet, de sorte que l'utilisateur de l'entrée d'un effondrement de la clé n'est pas nécessaire.
Cela dit, mon expérience avec la console de correspondre à la vôtre. Je créer des messages en saisissant uniquement Message texte et le dispositif de jeton. Je ne vois pas l'effondrement de traitement; chaque message est reçu par l'appareil. Basé sur mon expérience avec les tests décrits ci-dessous, ce qui semble être un problème avec la console et non pas avec l'effondrement de traitement en général. C'est étrange, car si j'envoie des messages lorsque l'application est au premier plan, et
onMessageReceived()
est invoquée, j'ai l'enregistrement de débogage pour la sortie de l'effondrement de la clé dans le message à l'aide getCollapseKey(). Cette sortie confirme que la clé est présente et est l'une de mes applications nom du package.Vous indiquer que vous n'avez certains tests de l'envoi de notifications à partir d'un nuage de fonction. J'ai fait mes propres tests avec cette fonction cloud et observé le message attendu l'effondrement:
J'ai aussi envoyé ce message à l'aide du navigateur d'application Avancée de Repos Client, et aussi vu de message approprié s'effondrer:
Je vais également partager Firebase émet un journal d'analyse d'un message lorsqu'un message de notification est reçue. C'est utile pour les tests, quand vous voulez pour obtenir le nombre de messages reçus:
Tous mes tests ont utilisé un appareil Android. Je ne vois pas comment le problème pourrait être dans le traitement côté client étant donné que l'effondrement de travaux lorsque des messages sont envoyés à partir d'un nuage de fonction.
J'ai d'abord été à l'aide de la Firebase console ainsi qu'un Nuage de Fonction pour envoyer des notifications. Mais je n'ai pas l'extension de la
FirebaseMessagingService
. Je laisse le SDK pour gérer les notifications. Eh bien, les notifications ont été ne s'effondre pas, peu importe si elles ont été à venir à partir de la console ou de la fonction cloud. Mais quand j'ai mis en placeMyFirebaseMessagingService
, l'effondrement des clés maintenant travailler à la fois à partir de la console et ma fonction cloud, mais uniquement lorsque l'application est au premier plan, parce que lorsque l'application est en arrière-plan des messages de notification de ne pas invoqueronMessageReceived()
.Vous pouvez tester que, par l'envoi de 2 messages de notification à partir de la console pendant que votre appareil Wi-Fi est désactivé. Ensuite, ouvrez votre application et activer la connexion Wi-Fi gratuite, l'application est au premier plan. L'effondrement des clés devrait maintenant fonctionner et vous devriez recevoir seulement 1 notification (en supposant que vous êtes la manipulation de l'notifications dans votre Firebase service). Mais cela ne se produira pas si l'application est en arrière-plan. Donc, quand nous faisons de la manipulation par l'extension de la
FirebaseMessagingService
, l'effondrement des touches de travail, mais quand Firebase la manipulation, ils ne le font pas.Je ne vois pas ce comportement. Ajouter un peu de la sortie du journal de
onMessageReceived()
d'obtenir une indication claire du nombre de messages reçus. Si vous utilisez le même IDENTIFIANT lors de votre générer des notifications, vous êtes involontairement de s'effondrer. LeNotifcationManager
permettra de traiter plusieurs appels avec le même ID que des mises à jour de la notification existante au lieu d'en créer un autre.OriginalL'auteur Bob Snyder