Comment envoyer une notification Firebase à tous les appareils via CURL?

Je tente d’envoyer une notification à tous les utilisateurs de l’application (sur Android), en dupliquant essentiellement ce qui se passe lorsqu’une notification est envoyée via la console d’administration Firebase. Voici la commande CURL par laquelle je commence:

curl –insecure –header “Autorisation: key = AIzaSyBidmyauthkeyisfineL-6NcJxj-1JUvEM” –header “Content-Type: application / json” -d “{\” notification \ “: {\” titre \ “: \” note -Titre \ “, \” body \ “: \” note-Body \ “}}” https://fcm.googleapis.com/fcm/send

Voici ce que JSON analysé pour être plus facile pour vos yeux:

{ "notification":{ "title":"note-Title", "body":"note-Body" } } 

La réponse qui revient est juste deux caractères:

à

C’est ça, le mot “à”. (Les en-têtes signalent un 400) Je soupçonne que cela est dû au fait de ne pas avoir de “dans” dans mon JSON. Que ferait-on même pour un “à”? Je n’ai aucun sujet défini et les appareils ne se sont pas enregistrés pour rien. Cependant, ils peuvent toujours recevoir des notifications du panneau d’administration de Firebase.

Je souhaite essayer un package JSON “réservé aux données” en raison de la limitation étonnante du traitement des notifications Firebase. Si votre application est en avant-plan, la notification est traitée par VOTRE gestionnaire, mais si votre application est en arrière-plan, elle reçoit traitées par le service Firebase et jamais transmises à votre gestionnaire de notifications. Ceci peut être résolu si vous soumettez votre demande de notification via l’API, mais UNIQUEMENT si vous le faites uniquement avec des données. (Ce qui brise alors la possibilité de gérer iOS et Android avec le même message.) Le remplacement de “notification” par “données” dans l’un de mes JSON n’a aucun effet.

Ok, alors j’ai essayé la solution ici: Firebase Java Server pour envoyer une notification push à tous les périphériques qui me semble dire “Ok, même si les notifications à tout le monde sont possibles via la console Admin … ce n’est pas vraiment possible via l’API. ” La solution consiste à demander à chaque client de s’abonner à une rubrique, puis d’envoyer la notification à cette rubrique. Donc d’abord le code dans onCreate:

 FirebaseMessaging.getInstance().subscribeToTopic("allDevices"); 

alors le nouveau JSON que j’envoie:

 { "notification":{ "title":"note-Title", "body":"note-Body" }, "to":"allDevices" } 

Alors maintenant, je reçois une vraie réponse du serveur au moins. Réponse JSON:

 { "multicast_id":463numbersnumbers42000, "success":0, "failure":1, "canonical_ids":0, "results": [ { "error":"InvalidRegistration" } ] } 

Et cela vient avec un code HTTP 200. Ok … selon https://firebase.google.com/docs/cloud-messaging/http-server-ref un code 200 avec “InvalidRegistration” signifie un problème avec le jeton d’enregistrement . Peut être? Parce que cette partie de la documentation concerne le serveur de messagerie. Le serveur de notification est-il le même? Pas clair. Je vois ailleurs que le sujet pourrait prendre des heures avant d’être actif. Il semble que cela rendrait inutile la création de nouvelles salles de discussion, ce qui semble également être le cas.

J’étais très excité quand je pouvais coder une application à partir de zéro qui recevait des notifications en seulement quelques heures alors que je n’avais jamais utilisé Firebase auparavant. Il semble qu’il y ait un long chemin à parcourir avant d’atteindre le niveau de la documentation de Ssortingpe.com.

Bottom line: est-ce que quelqu’un sait ce que JSON à fournir pour envoyer un message à tous les appareils exécutant l’application pour refléter la fonctionnalité de la console d’administration?

Notifications Firebase n’a pas d’API pour envoyer des messages. Heureusement, il est construit sur Firebase Cloud Messaging, qui a précisément une telle API.

Avec les notifications Firebase et Cloud Messaging, vous pouvez envoyer des messages en aval aux périphériques de trois manières différentes:

  1. à des périphériques spécifiques , si vous connaissez leurs identifiants de périphérique
  2. à des groupes d’appareils , si vous connaissez les identifiants d’enregistrement des groupes
  3. aux sujets , qui ne sont que des clés auxquelles les appareils peuvent s’abonner

Vous noterez qu’il n’y a aucun moyen d’envoyer à tous les appareils explicitement. Vous pouvez toutefois créer de telles fonctionnalités avec chacun de ces éléments.

Pour envoyer à un sujet, vous avez une erreur de syntaxe dans votre commande. Les sujets sont identifiés en commençant par /topics/ . Comme vous n’avez pas cela dans votre code, le serveur interprète allDevices comme un identifiant de périphérique. Comme il s’agit d’un format non valide pour un jeton d’enregistrement de périphérique, il génère une erreur.

De la documentation sur l’envoi de messages aux rubriques:

 https://fcm.googleapis.com/fcm/send Content-Type:application/json Authorization:key=AIzaSyZ-1u...0GBYzPu7Udno5aA { "to": "/topics/foo-bar", "data": { "message": "This is a Firebase Cloud Messaging Topic Message!", } } 

La méthode la plus simple pour envoyer la notification push à tous les appareils est de les abonner à un sujet “all”, puis d’envoyer une notification à ce sujet. Copiez ceci dans votre activité principale

 FirebaseMessaging.getInstance().subscribeToTopic("all"); 

Maintenant, envoyez la demande comme

 { "to":"/topics/all", "data": { "title":"Your title", "message":"Your message" "image-url":"your_image_url" } } 

Cela peut être inefficace ou non standard, mais comme je l’ai mentionné ci-dessus, c’est le plus simple. S’il vous plaît faire poster si vous avez un meilleur moyen d’envoyer une notification push à tous les appareils.

Vous pouvez suivre ce didacticiel si vous n’êtes pas habitué à envoyer des notifications push à l’aide du didacticiel Firebase Cloud Messaging – Notifications push à l’aide de FCM

Une façon de faire est de faire en sorte que tous les appareils de vos utilisateurs soient abonnés à un sujet. De cette façon, lorsque vous ciblez un message sur un sujet spécifique, tous les périphériques le recevront. Je pense que c’est ce que fait la section Notifications de la console Firebase.

Faites simplement en sorte que tous les utilisateurs qui se connectent s’abonnent à un sujet spécifique, puis envoyez une notification à ce sujet.

vous pouvez utiliser / topics / all mais vous devez aller sur votre panneau Firebase et changer

Anonyme >>>>> Activé

entrer la description de l’image ici

Vous pouvez envoyer une notification à tous les appareils en utilisant “/ topics / all”

 https://fcm.googleapis.com/fcm/send Content-Type:application/json Authorization:key=AIzaSyZ-1u...0GBYzPu7Udno5aA { "to": "/topics/all", "notification":{ "title":"Notification title", "body":"Notification body", "sound":"default", "click_action":"FCM_PLUGIN_ACTIVITY", "icon":"fcm_push_icon" }, "data": { "message": "This is a Firebase Cloud Messaging Topic Message!", } }