android - Notificaciones push sobre cambio de contenido
firebase android-notifications (1)
Digamos que tengo una aplicación de Android que simplemente crea un ListView con contenido obtenido de una API REST aleatoria.
Imagine ahora que necesito enviar notificaciones push cuando haya nuevo contenido disponible en la API. ¿Cuál es la forma más sencilla de hacer esto?
Estoy un poco confundido con el proceso de notificaciones push en Android. Eché un vistazo a Firebase, pero no sé si necesito obligatoriamente una base de datos en Firebase que almacene el resultado ya que el nuevo contenido está disponible a través de la API, y luego activa una notificación en la actualización de la base de datos, o si no necesita una base de datos, etc.
Como puede ver, no está claro para mí, por lo que cualquier ayuda es muy apreciada. Gracias !
La mejor manera de lograr esto es usar
Firebase Cloud Functions
.
Esto lo ayudará a notificar a los usuarios cuando ocurra algo interesante, en su caso, cuando haya nuevo contenido disponible.
Puede usar
Cloud Firestore
o
Firebase Realtime Database
para lograr esto.
Le explicaré en mi respuesta cómo se puede hacer usando el nuevo
Cloud Firestore
.
Para eso le recomiendo que implemente también la
autenticación Firebase
.
Esto lo ayudará a enviar notificaciones a un usuario en particular o a un grupo de usuarios cuando ocurra algo nuevo.
Para lograr esto, considere seguir los pasos a continuación.
-
Implemente la
Firebase Authentication
. Tan pronto como se implemente, cree una colección de usuarios en la que cada usuario será un documento dentro de la colección de usuarios. La estructura de su base de datos debería verse así:Firebase-root | --- users (collection) | --- uid1 (document) | | | --- //user properties | --- uid2 (document) | --- //user properties
Además de los detalles del usuario, debe agregar a cada usuario un
tokenId
. Puede obtenerlo simplemente usando la siguiente línea de código:String tokenId = FirebaseInstanceId.getInstance().getToken();
Un documento de usuario debería verse así:
uid1 | --- userName: "John" | --- userEmail: [email protected] | --- tokenId: "e_wLukMfq..." //very long token | --- //other details
-
Ahora, agregue una nueva coolección al documento del usuario llamado
notifications
, en el que debe agregar lanotification
que necesita enviar y elsender
, cada vez que ocurra algo nuevo. Debería verse más o menos así:uid1 | --- userName: "John" | --- userEmail: [email protected] | --- tokenId: "e_wLukMfq..." //very long token | --- notifications (collection) | | | --- notificationId1 | | | --- notificationMessage: "My Notification" | | | --- fromUser: "My Notification" | --- //other details
-
Ahora necesita usar Node.js para escribir una función en
Cloud Functions
que escuche cada nueva notificación que aparezca dentro de esta referencia:"users/{uid}/notifications/{notificationId}"
Una vez que aparece una nueva notificación, puede usar la función
sendToDevice
y eltokenId
para enviar la notificación a un usuario específico. La notificación será manejada por el sistema Android y se mostrará al usuario. Tenga en cuenta que esto solo funcionará cuando la aplicación esté en elbackgroud
. También puede recibir notificaciones cuando la aplicación está enforeground
mediante la implementación deFirebaseMessagingService
.