Hola, les saluda Miguel y hoy les traigo otro nuevo post.
Índice
Una descripción general de alto nivel
Analicemos el problema a un alto nivel para identificar los diferentes elementos que están en juego. Más adelante en este artículo, profundizaremos en cada elemento con más detalle.
En un nivel alto, el usuario del dispositivo de envío tomará alguna acción que resultará en un cambio en la base de datos de Firebase. A cambio, Firebase recogerá este cambio y enviará una notificación a otro dispositivo, informando al dispositivo receptor sobre el cambio.
Aquí se toman cuatro acciones principales:
- Actualización de la base de datos por el dispositivo de envío
- Firebase escucha el cambio
- Firebase envía una notificación a los dispositivos receptores como reacción al cambio
- Dispositivo (s) de recepción que presentan la notificación al usuario
En el resto de este artículo, repasaremos cada elemento anterior con más detalle.
Actualización de la base de datos por el dispositivo de envío
La actualización de la base de datos de Firebase está bien documentada. Si está leyendo este artículo, lo más probable es que comprenda cómo configurar su aplicación para comunicarse con Firebase y escribir en la base de datos. No entraremos en detalles aquí. Puede encontrar más información sobre cómo configurar su dispositivo y comunicarse con la base de datos para iOS y para Android.
Firebase escuchando un cambio en la base de datos
Aquí es donde las cosas se ponen más interesantes. El dispositivo de envío escribe en una ruta en la base de datos y ahora le gustaría informar a otro dispositivo sobre el cambio. La función del dispositivo de envío era simplemente actualizar la base de datos y termina ahí. Lo que sucede a continuación lo organiza Firebase Funciones en la nube.
Nube Funciones para Firebase dejarte correr automáticamente código de backend en respuesta a eventos provocados por Firebase características y solicitudes HTTPS. Su código para las funciones se almacena en la nube de Google y se ejecuta en un entorno administrado. Aquí, estamos interesados en funciones activadas por un evento. Y en este caso, el evento es un cambio en la base de datos por parte del dispositivo emisor.
En esta arquitectura, no es necesario administrar y escalar su propio servidor
Una excelente referencia para aprender sobre las funciones de Firebase es YouTube serie de videos por Doug Stevenson. Allí también aprenderá a instalar el software y las herramientas necesarios. Las funciones de Firebase están escritas en secuencias de comandos de Java o de tipo. Tenga en cuenta que independientemente de si está desarrollando para Android o iOS, las funciones de Firebase funcionarán de la misma manera.
Una función de Firebase tiene acceso de administrador a la base de datos
A continuación se muestra un ejemplo de un fragmento de código de secuencia de comandos Type que se activa cuando se crea una nueva entrada en una ruta particular en la base de datos:
import * as functions from 'firebase-functions'; import * as admin from 'firebase-admin' admin.initializeApp();export const onChatCreate = functions.database.ref('/Chats/{userId}/{chatId}') .onCreate((snapshot, context) => { const chatId = context.params.chatId const data = snapshot.val(); ...
En este caso, el dispositivo de envío crea una nueva entrada en la ruta ‘/ Chats / {userId} / {chatId}. Tenga en cuenta que los elementos entre corchetes son marcadores de posición para parámetros sobre los que la función no tiene información antes de que se active. Estos parámetros podrían ser ID creados automáticamente por Firebase al escribir un valor en la base de datos. Sin embargo, una vez que se activa la función, tiene acceso a los valores de estos parámetros como se muestra en el ejemplo anterior para el parámetro chatId. El valor escrito en la ruta también es accesible a través del instantánea parámetro como se muestra en la última línea.
En el ejemplo anterior, hemos utilizado el onCreate método para activar la función cuando se crea una entrada en la base de datos en una ruta particular. También puede activar esta función cuando una entrada se elimina, actualiza o escribe utilizando los métodos onDelete (), onUpdate (), y onWrite () respectivamente.
La línea de abajo leerá otra entrada en la base de datos una vez que la función se active usando el método once ():
return snapshot.ref.parent?.child(chatId).once("value").
then(snap => {
chat = snap.child('chats').child(subChatId).child('name').val()
...
Los fragmentos de código anteriores están destinados a darle una idea general de lo que puede hacer en una función de Firebase. La serie de videos de YouTube mencionada anteriormente entra en más detalles sobre cómo escribir el código de script Type adecuado.
Firebase envía una notificación a los dispositivos receptores
La primera pregunta que me viene a la mente es cómo Firebase sabe dónde enviar una notificación. Otra pregunta es cómo envía la notificación. Respondemos a estas dos preguntas en esta sección.
Usamos Firebase Cloud Messaging (FCM) para realizar esta tarea. FCM es una solución de mensajería multiplataforma que le permite enviar mensajes de manera confiable. Puede obtener más información sobre FCM aquí. Asegúrese de seguir las instrucciones para configurar sus aplicaciones iOS o Android.
Firebase proporciona un ID de instancia para cada instancia de aplicación a través del Firebase.InstanceId.FirebaseInstanceId clase. Con esta clase, puede obtener un token que debe almacenar de forma segura en la base de datos de Firebase para cada usuario de la aplicación. Este token es la clave (considérelo como una dirección) para que Firebase sepa dónde enviar una notificación.
A continuación se muestra una función en JAVA para plataformas Android para obtener el token para una instancia de aplicación y guardarlo en la base de datos. Asegúrese de establecer las reglas de seguridad de su base de datos de modo que solo el administrador pueda leer este token.
public void saveNewRegistrationTokenToServer() { FirebaseInstanceId.getInstance().getInstanceId() .addOnCompleteListener(new OnCompleteListener<InstanceIdResult>() { @Override public void onComplete(@NonNull Task<InstanceIdResult> task) { if (!task.isSuccessful()) { Toast.makeText(MainActivity.this, "getInstanceId failed", Toast.LENGTH_SHORT).show(); return; } // Get new Instance ID token String token = task.getResult().getToken() // Save the token in the database }
La última línea anterior guarda el token de instancia de la aplicación en una cadena. Esta cadena debe guardarse en la base de datos en una ubicación asociada con el usuario de la aplicación.
Por último, tenga en cuenta que el token puede cambiar si
- La aplicación se restaura en un nuevo dispositivo
- El usuario desinstala / reinstala la aplicación
- El usuario borra los datos de la aplicación.
La segunda pregunta a responder es cómo enviar una notificación. Esto se hace a través de la misma función de Firebase que se activó cuando el dispositivo de envío actualizó una ubicación en la base de datos. El siguiente fragmento de código muestra cómo se hace esto en Type Script:
Aquí el usuario puede esperar ver un mensaje con el título “Chat completo” y un texto que depende de la descripción de la variable . Hay más claves predefinidas disponibles para crear mensajes de notificación, incluido el color y la URL de la imagen para los logotipos. Estos podrían ser comunes en diferentes plataformas o podrían ser específicos para las plataformas Android e iOS. Puede encontrar enlaces a diferentes protocolos aquí .
La última línea del fragmento de código anterior es responsable de enviar la notificación al dispositivo receptor. Tenga en cuenta que regToken es el mismo token que guardó en la base de datos asociada con el usuario al que necesita enviar la notificación. Debe haber una lógica en el código de Type Script que, junto con la arquitectura de su aplicación, determine a qué usuario debe enviar la notificación. Esto depende completamente de su aplicación y su diseño. También tenga en cuenta que regTokens en la última línea podría ser una matriz de tokens y el comando enviará la misma notificación a más de un destinatario.
Recibir notificaciones
En este punto, el dispositivo receptor recibirá la notificación solo si la aplicación está en segundo plano. Aparecerá una notificación en la bandeja de notificaciones como cualquier otra notificación en el dispositivo receptor.
Sin embargo, es posible que también deba manejar y presentar la notificación cuando la aplicación esté en primer plano. Esto se maneja mediante una función de devolución de llamada en su aplicación. Para obtener más información sobre los detalles de recibir una notificación cuando la aplicación está en primer plano, consulte esta página para Android o esta página para iOS.
Este artículo trató de describir lo que se necesita para una notificación de dispositivo a dispositivo mediante Firebase. Cada sección tiene muchos más detalles que están fuera del alcance de este artículo. Recomendamos al lector que necesite implementar la notificación de dispositivo a dispositivo a que consulte las referencias de este artículo y obtenga más conocimientos sobre los detalles de implementación.
Gracias por leer hasta el final.
Añadir comentario