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 comienzo:
curl --insecure --header "Autorización: clave = AIzaSyBidmyauthkeyisfineL-6NcJxj-1JUvEM" --header "Tipo de contenido: aplicación / json" -d "{\" notificación \ ": {\" título \ ": \" nota -Título \ ", \" cuerpo \ ": \" nota-Cuerpo \ "}}" https://fcm.googleapis.com/fcm/send
Aquí está el JSON analizado para que sea más agradable para sus ojos:
{
"notification":{
"title":"note-Title",
"body":"note-Body"
}
}
La respuesta que regresa son solo dos caracteres:
a
Eso es todo, la palabra "para". (Los encabezados informan un 400) Sospecho que esto tiene que ver con no tener un "para" en mi JSON. ¿Qué pondría uno por 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 asombrosa 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 de Firebase y nunca pasó a su controlador de notificaciones. Aparentemente, esto se puede solucionar si envía su solicitud de notificación a través de la API, pero SOLO si lo hace con datos únicamente. (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 para 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 alternativa es que cada cliente se suscriba a un tema y luego envíe la notificación a ese tema. Entonces, primero el código en onCreate:
FirebaseMessaging.getInstance().subscribeToTopic("allDevices");
luego el nuevo JSON que envío:
{
"notification":{
"title":"note-Title",
"body":"note-Body"
},
"to":"allDevices"
}
Así que ahora estoy obteniendo 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 ... de acuerdo con 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 otros lugares que el tema puede tardar horas en activarse. Parece que eso lo haría inútil para crear nuevas salas de chat, por lo que eso también parece estar mal.
Estaba muy emocionado cuando pude codificar una aplicación desde cero que recibía notificaciones en solo unas horas cuando nunca antes había usado Firebase. Parece que le queda 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?
FirebaseInstanceIdService