¿Cómo envía una Notificación Firebase a todos los dispositivos a través de CURL?

Estoy intentando 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 "{\" notification \ ": {\" title \ ": \" note -Title \ ", \" cuerpo \ ": \" nota-Cuerpo \ "}}" https://fcm.googleapis.com/fcm/send

Aquí está que JSON analizó para ser más fácil en sus ojos:

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

La respuesta que vuelve es sólo dos caracteres:

a

Eso es todo, la palabra "a". (Encabezados informe un 400) Sospecho que esto tiene que ver con no tener un "a" en mi JSON. ¿Qué sería uno incluso para un "a"? No tengo temas definidos, y los dispositivos no se han registrado para nada. Sin embargo, todavía pueden recibir notificaciones desde el panel de administración de Firebase.

Tengo que intentar un paquete JSON de "sólo datos" debido a la increíble limitación del procesamiento de notificaciones de Firebase, por lo que si tu aplicación está en primer plano, la notificación será procesada por tu manejador, pero si tu aplicación está en segundo plano, obtendrá Procesados ​​INTERNALMENTE por el servicio Firebase y nunca pasados ​​a su manejador de notificaciones. APARENTEMENTE esto puede ser trabajado alrededor si usted somete su petición de la notificación vía el API, pero SOLAMENTE si usted lo hace con datos-solamente. (Que entonces rompe la capacidad de manejar iOS y Android con el mismo mensaje.) Sustitución de "notificación" con "datos" en cualquiera de mi JSON no tiene ningún efecto.

Ok, entonces he intentado la solución aquí: Firebase Java Server para enviar notificación de empuje a todos los dispositivos que me parece que decir "Ok, aunque las notificaciones a todo el mundo es posible a través de la Consola del administrador … no es realmente posible a través de la API. " La solución consiste en que cada cliente se suscriba a un tema y, a continuación, enviar la notificación a ese tema. Así que 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. JSON respuesta:

 { "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 otro lugar que el tema podría tomar horas antes de que esté activo. Parece que eso haría inútil para la creación de nuevas salas de chat, por lo que parece apagado también.

Estaba muy emocionado cuando pude codificar una aplicación desde cero que recibió notificaciones en sólo unas pocas horas cuando nunca había utilizado Firebase antes. 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é suministrar JSON para enviar un mensaje a todos los dispositivos que ejecutan la aplicación para reflejar la funcionalidad de la consola de administración?

Firebase Notifications no tiene una API para enviar mensajes. Por suerte, se construye en la parte superior de Firebase Cloud Messaging, que tiene precisamente una API.

Con Firebase Notifications y Cloud Messaging, puede enviar los llamados mensajes descendentes a los dispositivos de tres maneras:

  1. A dispositivos específicos , si conoce sus ID de dispositivo
  2. A grupos de dispositivos , si conoce los ID de registro de los grupos
  3. A los temas , que son sólo las claves que los dispositivos pueden suscribirse a

Observará que no hay manera de enviar a todos los dispositivos explícitamente. Usted puede construir tal funcionalidad con cada uno de estos sin embargo.

Para enviar a un tema tiene un error de sintaxis en su comando. Los temas se identifican empezando con /topics/ . Dado que usted no tiene eso en su código, el servidor interpreta allDevices como un id de dispositivo. Dado que es un formato no válido para un token de registro de dispositivo, genera un error.

De la documentación sobre el envío de mensajes a los 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!", } } 

Una forma de hacerlo es hacer que todos los dispositivos de sus usuarios se suscriban a un tema. De esta forma, cuando se dirige un mensaje a un tema específico, todos los dispositivos lo obtendrán. Creo que esto como la sección de notificaciones en la consola de Firebase lo hace.

Tu 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!", } } 
  • ¿Puede Firebase Console enviar datos de carga útil?
  • Firebase envía la notificación push dos veces
  • Firebase onTokenRefresh () no se llama
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.