¿La base de datos en tiempo real de Google Firebase es realmente una buena solución para una aplicación de mensajería? (¿requiere datos centrales también?)

Puedes pensar en Firebase Realtime Database como una base de datos remota. Todos los datos eventualmente tienen que vivir allí. Firebase no tiene un concepto de datos que se almacenan solo en el dispositivo: todos los datos se sincronizarán con el servidor cuando haya una conexión de red disponible.

Las aplicaciones que usan Firebase SDK se pueden configurar para almacenar en caché los datos localmente. Si es así, los datos a los que se accedió recientemente estarán disponibles para su uso sin una conexión de red. Las aplicaciones también pueden escribir en la base de datos cuando están fuera de línea, y los datos se sincronizarán más tarde cuando haya una conexión disponible.

Las aplicaciones que usan Firebase deben leer y escribir los datos sin tener en cuenta si los datos son locales o no. Si los datos solicitados se almacenan en caché localmente, se utilizarán. Si los datos son remotos, se descargarán al dispositivo. La aplicación no sabe cuál es la situación porque el SDK administrará todos los detalles.

Si desea un almacén local de datos diferente y puro que no esté sincronizado con Firebase, eso depende de usted.

Este es un problema importante al desarrollar una aplicación de mensajería. Debe diseñar su flujo de datos para asegurarse de que esto no suceda.

  • Almacenamiento de datos

Usted menciona que está intentando “evitar una gran cantidad de datos en Firebase”. Parece que puede estar un poco confundido por la forma en que se almacenan los datos. Recuerde que necesita almacenar toda su base de datos en Firebase. Luego descarga los datos necesarios a teléfonos individuales. Esto evita que se almacenen datos innecesarios en su teléfono, pero también le brinda una copia de seguridad completa en su base de datos Firebase.

CoreData se utiliza para conservar información en su teléfono. Sin usarlo, toda su información se perdería cada vez que se carga la aplicación. Esto significa que siempre debe usar CoreData (o equivalente) para almacenar información.

Sin embargo, para mayor eficiencia, no querría tener la base de datos de teléfonos idéntica a la de Firebase, ya que eso significaría que cada teléfono almacenaría una gran cantidad de datos innecesarios. Esta es la razón por la cual Firebase necesita contener la base de datos completa y cada teléfono solo descarga su información apropiada.

  • Flujo de datos

Vale la pena comprender el flujo de datos que debe usar para una aplicación de mensajería.

Cuando un usuario realiza una acción (escribe y envía un mensaje) necesitamos conservar estos datos en el dispositivo del usuario. Luego lo convertimos a un formato JSON apropiado para cargarlo en la base de datos. Cuando Firebase recibe este mensaje, enviará notificaciones a cualquier dispositivo que esté observando actualmente la ruta de mensajes. Esto alertará a todos los demás usuarios en el chat que necesitan descargar este nuevo mensaje. Una vez que esto ocurra, el código en su aplicación descargará una instantánea de los nuevos datos y creará un nuevo objeto CoreData para ellos en el dispositivo. Las pantallas de chat se actualizarán con el nuevo objeto disponible.

Desea que esta funcionalidad sea coherente con todos sus dispositivos, esto significa que cuando envía un mensaje desea que se notifique a su propio dispositivo, descargue el mensaje y actualice el objeto CoreData con la información.

Lo importante de esto es que nunca puede tener información diferente en la base de datos de Firebase y en su teléfono. Cuando se crea un nuevo objeto, se lo envía a la base de datos antes de descargarlo en todos los dispositivos de forma idéntica.

Nota: El teléfono que carga el mensaje también debe incluirse en los teléfonos que se están sincronizando.

Para concluir , Firebase es una excelente opción para una aplicación de mensajería. Los problemas que menciona aquí serían consistentes con cualquier backend que elija tener. Los datos siempre se deben conservar con cuidado para evitar la corrupción.

Nota: Si está desarrollando una aplicación de mensajería, puede estar interesado en consultar el componente Firebase Chat Component de nuestras empresas en Github. Hemos lanzado componentes compatibles de iOS y Android en una licencia MIT. Esto significa que puede descargar y usar el código sin compromiso. Puede valer la pena para que pueda ver el flujo de datos entre Firebase y CoreData en acción. Ver cómo debería verse la estructura le ahorrará tiempo al desarrollar su propio proyecto. Si tiene alguna pregunta, puede ponerse en contacto y estaremos encantados de ayudarlo.

Si te entiendo correctamente, diré que realmente no creo que este sea un problema de Firebase, en el sentido de que no importa en qué plataforma construyas tu aplicación, los mensajes deben almacenarse en algún lugar de todos modos.

Si desea simplemente enviar y recibir datos entre dispositivos sin guardarlos en la base de datos, debe mirar Firebase Cloud Messaging. Creo que debe configurar un servidor que se conecte a Firebase con privilegios de administrador y reciba llamadas de API de clientes que desean enviar un mensaje.

Si necesita una forma más sencilla de hacer esto, puede consultar Pusher. Le permite enviar datos entre clientes con una API muy simple.