Spanish Firebase cloud messaging

Fj2t

Member
Hola buenas, os expongo mi problema.

Soy novato en Android. Tengo una duda con FCM, tengo que hacer una aplicación en la cual me logueo con un correo electrónico y password en Firebase (hasta aquí todo bien), luego desde un servidor envío notificaciones al usuario que yo quiera, aquí empieza el problema, tengo un servicio web en php con el que envío un mensaje a partir del token que se genera. Lo que busco es enviar el mensaje al usuario que yo quiera cuando este esté logueado, y no se si solo puedo enviar mensajes a partir del token, y si desde la app móvil recibo los mensajes y los muestro cuando este esté logueado, o hay una forma para que solo lleguen cuando este esté ya logueado.

Gracias.
 

jparraga

Member
Licensed User
Longtime User
En las Notificaciones a un usuario, según las construyamos, podemos hacer que Android las muestre siempre al usuario o que no se muestren y sea nuestra App la que tenga que crear la Notificación. Con el siguiente ejemplo puedes verlo:
<code>
'{
' "to" : "APA91bHun4MxP5egoKMwt2KZFBaFUH-1RYqx...",
' "notification" : {
' "body" : "Texto de mensaje a mostrar",
' "title" : "Título de la Notificación",
' "icon" : "myicon"
' }
' "data" : {
' "campo1" : "valor1",
' "campo2" : "valor2"
' }
'}
</code>
Si dejamos todo el MAP de "notificación", el mensaje se mostrará siempre por Android, pero si no lo ponemos, tendríamos la posibilidad de crear todos los campos necesarios en el "data" para que podamos mostrar la misma Notificación pero creada desde nuestra App, al recibirla en el servicio FirebaseMessaging (la función fm_MessageArrived).
Ambos tipos de notificación entran siempre en el servicio FirebaseMessaging, pero como he comentado, en el primer caso se produce siempre notificación al usuario en la pantalla y en el segundo (quitando el MAP "notification") será nuestra App la que filtre la información y decida si se muestra Notificación al usuario y con que contenido. Esto además permite que podamos incluso mejorar mucho la notificación como algunas de las que vemos en otras Apps.
Yo lo utilizo así para poder enviar información de configuración (por ejemplo cambiar los datos de acceso a un servidor de FTP) y solo mostrar notificaciones al usuario cuando llevan información relevante (alertas de consumo, mensajes de la empresa, etc...).

Un saludo.
 

Fj2t

Member
En las Notificaciones a un usuario, según las construyamos, podemos hacer que Android las muestre siempre al usuario o que no se muestren y sea nuestra App la que tenga que crear la Notificación. Con el siguiente ejemplo puedes verlo:
<code>
'{
' "to" : "APA91bHun4MxP5egoKMwt2KZFBaFUH-1RYqx...",
' "notification" : {
' "body" : "Texto de mensaje a mostrar",
' "title" : "Título de la Notificación",
' "icon" : "myicon"
' }
' "data" : {
' "campo1" : "valor1",
' "campo2" : "valor2"
' }
'}
</code>
Si dejamos todo el MAP de "notificación", el mensaje se mostrará siempre por Android, pero si no lo ponemos, tendríamos la posibilidad de crear todos los campos necesarios en el "data" para que podamos mostrar la misma Notificación pero creada desde nuestra App, al recibirla en el servicio FirebaseMessaging (la función fm_MessageArrived).
Ambos tipos de notificación entran siempre en el servicio FirebaseMessaging, pero como he comentado, en el primer caso se produce siempre notificación al usuario en la pantalla y en el segundo (quitando el MAP "notification") será nuestra App la que filtre la información y decida si se muestra Notificación al usuario y con que contenido. Esto además permite que podamos incluso mejorar mucho la notificación como algunas de las que vemos en otras Apps.
Yo lo utilizo así para poder enviar información de configuración (por ejemplo cambiar los datos de acceso a un servidor de FTP) y solo mostrar notificaciones al usuario cuando llevan información relevante (alertas de consumo, mensajes de la empresa, etc...).

Un saludo.

Vale vale, ya me queda mas claro. Otra consulta, por ejemplo, ¿cuando inicie sesión con una cuenta que hago guardar en la BD el token para que el servidor sepa donde tiene que enviar el mensaje?
 

jparraga

Member
Licensed User
Longtime User
Veo difícil que puedas saber con exactitud cuando está logueado un usuario en la parte de servidor (PHP), creo que lo mejor es que la App trate el mensaje de la Notificación y decida que hacer en función de si el usuario en la App está logueado o no (tendrás que guardar y mantener el estado).
En mi caso, incluso no utilizo el token (tendría que enviarlo al servidor para que este lo conozca y pueda enviar notificaciones a un único usuario). Lo que hago es agrupar usuarios (suscritos a un Topic, por ejemplo nombre empresa) y enviar la Notificación con un campo de datos con el email. La App de cada usuario de esa empresa, que no son muchos, recibe la notificación, la analiza y si es para ese usuario -comprobando el campo email- decide que hacer con ella, el resto de Apps de otros usuarios de esa empresa descarta el mensaje de notificación y el usuario ni se entera que lo ha recibido.
 
Top