android - subscribetotopic - ¿Cómo se envía una notificación de Firebase a todos los dispositivos a través de CURL?
notificaciones push android firebase (8)
En lugar de suscribirse a un tema, puede utilizar la clave de
condition
y enviar mensajes a instancias que no están en un grupo.
Sus datos pueden verse más o menos así:
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!",
}
}
Ver https://firebase.google.com/docs/cloud-messaging/send-message#send_messages_to_topics_2
Intento enviar una notificación a todos los usuarios de la aplicación (en Android), esencialmente duplicando lo que sucede cuando se envía una notificación a través de la consola de administración de Firebase. Aquí está el comando CURL con el que empiezo:
curl --insecure --header "Autorización: key = AIzaSyBidmyauthkeyisfineL-6NcJxj-1JUvEM" --header "Content-Type: application / json" -d "{/" notificación / ": {/" title / ": /" nota -Título / ", /" body / ": /" note-Body / "}}" https://fcm.googleapis.com/fcm/send
Aquí está que JSON se analizó para ser más fácil para tus ojos:
{
"notification":{
"title":"note-Title",
"body":"note-Body"
}
}
La respuesta que regresa son solo dos caracteres:
a
Eso es, la palabra "a". (Los encabezados reportan un 400) Sospecho que esto tiene que ver con no tener un "to" en mi JSON. ¿Qué pondría uno para un "a"? No tengo temas definidos, y los dispositivos no se han registrado para nada. Sin embargo, aún pueden recibir notificaciones del panel de administración de Firebase.
Quiero intentar un paquete JSON de "solo datos" debido a la increíble limitación del procesamiento de notificaciones de Firebase por el cual, si su aplicación está en primer plano, SU controlador procesa la notificación, pero si su aplicación está en segundo plano, se obtiene procesado INTERNAMENTE por el servicio Firebase y nunca pasado a su controlador de notificaciones. Aparentemente, esto puede solucionarse si envía su solicitud de notificación a través de la API, pero SOLO si lo hace solo con datos. (Lo que luego rompe la capacidad de manejar iOS y Android con el mismo mensaje). Reemplazar "notificación" con "datos" en cualquiera de mis JSON no tiene ningún efecto.
Ok, entonces intenté la solución aquí: Firebase Java Server para enviar notificaciones push a todos los dispositivos que me parece decir "Ok, aunque las notificaciones a todos son posibles a través de la consola de administración ... no es realmente posible a través de la API. " La solución es hacer que cada cliente se suscriba a un tema y luego enviar la notificación a ese tema. Entonces, primero el código en onCreate:
FirebaseMessaging.getInstance().subscribeToTopic("allDevices");
entonces el nuevo JSON que envío:
{
"notification":{
"title":"note-Title",
"body":"note-Body"
},
"to":"allDevices"
}
Así que ahora estoy recibiendo una respuesta real del servidor al menos. Respuesta JSON:
{
"multicast_id":463numbersnumbers42000,
"success":0,
"failure":1,
"canonical_ids":0,
"results":
[
{
"error":"InvalidRegistration"
}
]
}
Y eso viene con un código HTTP 200. Ok ... según https://firebase.google.com/docs/cloud-messaging/http-server-ref un código 200 con "InvalidRegistration" significa un problema con el token de registro . ¿Tal vez? Porque esa parte de la documentación es para el servidor de mensajería. ¿El servidor de notificaciones es el mismo? Poco claro. Veo en otra parte que el tema puede tardar horas antes de que esté activo. Parece que eso lo haría inútil para crear nuevas salas de chat, por lo que también parece desagradable.
Estaba bastante emocionado cuando pude codificar una aplicación desde cero que recibió notificaciones en unas pocas horas cuando nunca antes había usado Firebase. Parece que tiene un largo camino por recorrer antes de alcanzar el nivel de, digamos, la documentación de Stripe.com.
En pocas palabras: ¿alguien sabe qué JSON proporcionar para enviar un mensaje a todos los dispositivos que ejecutan la aplicación para reflejar la funcionalidad de la consola de administración?
Estaba buscando una solución para mi notificación push de la aplicación Ionic Cordova.
Gracias a la respuesta de Syed Rafay.
en app.component.ts
const options: PushOptions = {
android: {
topics: [''all'']
},
en el archivo del servidor
"to" => "/topics/all",
La forma más fácil que se me ocurrió para enviar la notificación push a todos los dispositivos es suscribiéndolos a un tema "todos" y luego enviar una notificación a este tema. Copia esto en tu actividad principal
FirebaseMessaging.getInstance().subscribeToTopic("all");
Ahora envíe la solicitud como
{
"to":"/topics/all",
"data":
{
"title":"Your title",
"message":"Your message"
"image-url":"your_image_url"
}
}
Esta puede ser una forma ineficiente o no estándar, pero como mencioné anteriormente, es la más fácil. Publique si tiene una mejor manera de enviar una notificación push a todos los dispositivos.
Puedes seguir este tutorial si eres nuevo en el envío de notificaciones automáticas usando Firebase Cloud Messaging Tutorial - Notificaciones automáticas usando FCM
Notificaciones de Firebase no tiene una API para enviar mensajes. Afortunadamente, está construido sobre Firebase Cloud Messaging, que tiene precisamente esa API.
Con las notificaciones de Firebase y la mensajería en la nube, puede enviar los llamados mensajes posteriores a los dispositivos de tres maneras:
- a dispositivos específicos , si conoce sus ID de dispositivo
- a grupos de dispositivos , si conoce las ID de registro de los grupos
- a temas , que son solo claves a las que los dispositivos pueden suscribirse
Notarás que no hay forma de enviar a todos los dispositivos explícitamente. Sin embargo, puede construir dicha funcionalidad con cada uno de estos.
Para enviar a un tema, tiene un error de sintaxis en su comando.
Los temas se identifican comenzando con
/topics/
.
Como no tiene eso en su código, el servidor interpreta
allDevices
dispositivos como una identificación de dispositivo.
Dado que es un formato no válido para un token de registro del dispositivo, genera un error.
De la documentación sobre el envío de mensajes a temas:
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!",
}
}
Puedes enviar notificaciones a todos los dispositivos usando "/ 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!", } }
Simplemente haga que todos los usuarios que inicien sesión se suscriban a un tema específico y luego envíen una notificación a ese tema.
Una forma de hacerlo es hacer que todos los dispositivos de sus usuarios se suscriban a un tema. De esa manera, cuando dirija un mensaje a un tema específico, todos los dispositivos lo recibirán. Creo que así es como lo hace la sección de Notificaciones en la consola de Firebase.
puede usar / themes / all pero debe ir a su panel Firebase y cambiar
Anónimo >>>>> Habilitado