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

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 \ ": {\" título \ ": \" nota -Título \ ", \" cuerpo \ ": \" nota-Cuerpo \ "}}"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 lo que me parece que dice "Ok, aunque las notificaciones a todos son posibles a través de la Consola del administrador ... 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únhttps://firebase.google.com/docs/cloud-messaging/http-server-ref un código 200 con "Registro inválido" 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?

Respuestas a la pregunta(6)

Su respuesta a la pregunta