La taille de la notification de la charge utile dans GCM/FCM
Cette question a été à l'origine, se référant à Google Cloud Messaging (GCM), mais maintenant, il s'applique également à la nouvelle Firebase Messagerie en Nuage (FCM), qui remplace les GCM.
Je voudrais savoir comment calculer la taille d'un GCM charge utile lorsqu'il contient une "notification" du dictionnaire.
J'ai été essayer la Google Cloud service de Messagerie pour Android. Certaines parties de la documentation de dire que vous pouvez envoyer jusqu'à 4 ko de données, et ici dit "Un message de notification peut avoir un maximum de 2kb charge".
Faisant quelques tests, je pouvais envoyer des messages avec les "données" de la charge utile rempli avec 4 ko de données et le serveur a accepté sans erreur comme prévu.
Cependant, l'utilisation de la "notification" de la charge utile, j'ai trouvé que je pouvais envoyer des messages avec plus de 2 ko de données et le serveur n'a pas de retour d'erreur. Je m'attendais à de tels messages serait trop grand.
J'ai trouvé que la "notification" de la charge utile d'actions autorisé est de 4 ko avec les "données" de la charge utile, mais pas de la même façon. Dans la partie "données" de la charge utile, vous pouvez calculer la taille en ajoutant la taille des clés et des valeurs. La "notification" de la charge utile prend plus de place que la taille des clés et des valeurs qu'il contient.
Comment puis-je calculer à l'avance la taille d'une charge utile lorsqu'il contient la "notification" dictionnaire?
ce n'était pas la question...
Ma question est plus sur la notification de la charge utile, qui a touches prédéfinies et augmente la taille de l'ensemble de la charge utile, et semble prendre plus de place que la taille des clés et des valeurs qui les contient.
Avez-vous l'esprit si je mettre à jour votre question à se référer à la plus récente à Firebase Messagerie en Nuage (FCM)? (depuis la FCM est la nouvelle version de la GCM). Je suis à la recherche de cette question pour la FCM, donc je peux poster une réponse quand je suis fait. Je préfère ne pas poster une nouvelle question pour la FCM. Merci.
bien sûr, pas de problème, n'hésitez pas à le mettre à jour.
OriginalL'auteur jorcasso | 2015-07-07
Vous devez vous connecter pour publier un commentaire.
J'ai testé avec une charge utile de tailles pour le plus récent de la FCM service.
Pour les messages qui contiennent un "data" du dictionnaire et pas de "notification" du dictionnaire, j'ai réussi à envoyer exactement jusqu'à 4096 caractères (en comptant les longueurs de toutes les clés et les valeurs).
Pour les messages qui contiennent une "notification" du dictionnaire et pas de "données" du dictionnaire, ainsi que pour les messages qui contiennent à la fois une "notification" du dictionnaire et un "data" du dictionnaire, j'ai réussi à envoyer jusqu'à 4062 caractères. Je ne pouvais pas comprendre comment les 34 autres caractères sont comptés.
Cela signifie que la documentation que les limites de la "notification" de la charge utile à 2K est incorrect. Vous pouvez envoyer près de 4K.
Maintenant, la lecture de la mise à jour de la documentation de la FCM, j'ai trouvé que la documentation des types de Message dit:
D'autre part, la description de la "MessageTooBig" erreur dit:
Les messages que j'ai testé n'ont pas été les messages de sujets, selon les deux citations, ils ne devraient pas être limitées à 2K.
Par conséquent, la charge limite en fonction de la documentation actuelle est de 4K (avec l'exception possible des messages, sujets, que je n'ai pas fait de test).
OriginalL'auteur Eran
En aval, de la messagerie, GCM fournit deux types de charge utile: de la notification et de données. La Notification est le plus léger de l'option, avec un 2KB limite et un ensemble prédéfini de visible à l'utilisateur les touches. Charge utile de données permet aux développeurs d'envoyer jusqu'à 4 KO de la coutume de paires clé/valeur. Les messages de Notification peut contenir une option de données de charge utile qui est exécuté lorsque l'utilisateur clique sur la notification.
Notification- GCM affiche automatiquement le message à l'utilisateur final des appareils au nom de l'application cliente. Les Notifications ont un ensemble prédéterminé de visible à l'utilisateur les touches. Définir la notification de la charge utile. Peut avoir en option des données de charge utile. Toujours réductible.
Données- application Client est responsable du traitement des messages de données. Les données n'ont que des messages personnalisés des paires clé/valeur. Définir les données de la charge utile. Peut être pliable ou non-réductible.
OriginalL'auteur Nikhil Jain
Cela pourrait ne pas être ce que vous explicite demandé mais mieux vaut ne pas l'utiliser en grande quantité de la charge utile de données au sein de votre GCM-Message.
Stocker votre charge utile à l'intérieur d'une base de données et les rendre accessibles via un Web-API. Envoyer un GCM-Message qui détient juste l'ID de la base de données d'entrée. Maintenant, votre application peut demander à la charge indépendamment de la GCM, et vous n'êtes pas limité à la taille.
Il y a un autre avantage: Google ne saura pas ce que vous envoyez plus de GCM.
Si vous n'avez pas besoin de stocker la charge utile pour long vous pouvez également utiliser Redis ou quelque chose de similaire pour stocker la charge pour un temps limité.
OriginalL'auteur Stefan Wanitzek
J'ai aussi expermented avec la taille de la charge utile de ses près de près de 4 ko.
Quand j'ai essayé d'envoyer une charge utile de taille 7kb iy m'a montré un erroe en réponse qui dit message trop grand..
De sorte que vous pourrait analyser le code de réponse et de vérifier que la charge a été acceptée par les serveurs de google ou pas.
OriginalL'auteur Himanshu Khandelwal
Vous pouvez utilisé la méthode conventionnelle de la conversion de la Chaîne de données en octets. La notification que vous obtenez en forme de JSON qui contient une paire clé/valeur:
Comme par Google Documents:
Maintenant calculer la taille des données à l'aide de:
Assurez-vous de spécifier l'encodage de la Chaîne, comme les différents encodages peut prendre jusqu'à un nombre variable d'octets pour la même Chaîne. Dans l'exemple ci-dessus, UTF-8 est utilisé comme l'encodage.
Pour convertir les octets en ko, juste diviser par 1024. Pour plus de détails vous pouvez vous référer cette.
OriginalL'auteur AniV