J'essaie d'envoyer une notification à tous les utilisateurs de l'application (sur Android), en reproduisant essentiellement ce qui se passe lorsqu'une notification est envoyée via la console d'administration Firebase. Voici la commande CURL avec laquelle je commence :
curl --insecure --header "Authorization : key=AIzaSyBidmyauthkeyisfineL-6NcJxj-1JUvEM" --header "Content-Type:application/json" -d "{\"notification":{\"title\":\"note-Title\",\"body\":\"note-Body\"}" https://fcm.googleapis.com/fcm/send
Voici le JSON analysé pour que ce soit plus facile pour vos yeux :
{
"notification":{
"title":"note-Title",
"body":"note-Body"
}
}
La réponse qui revient ne comporte que deux caractères :
à
C'est tout, le mot "to". (Les en-têtes signalent un 400) Je pense que cela a à voir avec le fait que je n'ai pas de "to" dans mon JSON. Mais qu'est-ce qu'on pourrait bien mettre à la place de "to" ? Je n'ai pas de sujets définis, et les appareils ne se sont pas enregistrés pour quoi que ce soit. Pourtant, ils sont toujours en mesure de recevoir des notifications à partir du panneau d'administration de Firebase.
Je veux essayer un paquet JSON "data only" en raison de l'étonnante limitation du traitement des notifications Firebase qui fait que si votre application est au premier plan, la notification est traitée par VOTRE gestionnaire, mais si votre application est en arrière-plan, elle est traitée EN INTERNE par le service Firebase et n'est jamais transmise à votre gestionnaire de notification. Apparemment, cela peut être contourné si vous soumettez votre demande de notification via l'API, mais UNIQUEMENT si vous le faites avec des données uniquement. (Ce qui casse alors la possibilité de gérer iOS et Android avec le même message). Remplacer "notification" par "données" dans mon JSON n'a aucun effet.
Ok, alors j'ai essayé la solution ici : Firebase Java Server pour envoyer des notifications push à tous les appareils. ce qui me semble dire "Ok, même si les notifications à tout le monde sont possibles via la console d'administration... ce n'est pas vraiment possible via l'API". La solution consiste à faire en sorte que chaque client s'abonne à un sujet, puis à envoyer la notification à ce sujet. Donc d'abord le code dans onCreate :
FirebaseMessaging.getInstance().subscribeToTopic("allDevices");
puis le nouveau JSON que j'envoie :
{
"notification":{
"title":"note-Title",
"body":"note-Body"
},
"to":"allDevices"
}
Maintenant, j'obtiens au moins une vraie réponse du serveur. Réponse JSON :
{
"multicast_id":463numbersnumbers42000,
"success":0,
"failure":1,
"canonical_ids":0,
"results":
[
{
"error":"InvalidRegistration"
}
]
}
Et ça 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. Pourquoi ? 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 peut prendre des heures avant d'être actif. Il semble que cela le rendrait inutile pour la création de nouveaux salons de discussion, donc cela semble également hors service.
J'étais assez enthousiaste lorsque j'ai pu coder une application à partir de rien qui recevait des notifications en quelques heures seulement, 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, disons, la documentation de Stripe.com.
En résumé : quelqu'un sait-il quel JSON fournir pour envoyer un message à tous les appareils utilisant l'application afin de refléter la fonctionnalité de la console d'administration ?
0 votes
Vérifiez que le jeton d'api que vous utilisez est correct. Essayez également d'envoyer le message GCM à un seul appareil et voyez si cela fonctionne. Vous pouvez obtenir l'ID d'instance en lançant l'application en mode de débogage et en plaçant un point d'arrêt sur la fonction
FirebaseInstanceIdService
0 votes
Je ne vois pas le terme "jeton api" apparaître dans une recherche rapide sur firebase.google.com/docs. Voulez-vous dire "ID token" ? ou "Auth token" ? Ou bien parlez-vous de ma clé d'autorisation telle que fournie dans l'en-tête ? Cette clé est Bien : si je le modifie, la réponse du serveur devient "non autorisé" au lieu du message d'erreur que je reçois actuellement.
0 votes
Ce blog semble concerner l'envoi d'un message à un appareil particulier, et non, comme la discussion initiale, l'envoi d'un message à tous les utilisateurs de l'application.
0 votes
Lisez cet article de blog pour plus de détails - > developine.com/