Students Save 30%! Learn & create with unlimited courses & creative assets Students Save 30%! Save Now
Advertisement
  1. Code
  2. Firebase
Code

Empezando con Cloud Firestore para iOS

by
Difficulty:IntermediateLength:LongLanguages:

Spanish (Español) translation by RRGG (you can also view the original English article)

Los programadores móviles se han aprovechado de la base Firebase Realtime Database de Google como un servicio móvil (MBaaS) durante muchos años, ayudándoles a concentrarse en crear funciones para sus aplicaciones sin tener que preocuparse por la infraestructura de back-end y la base de datos. Al facilitar la tarea de almacenar y conservar datos en la nube y de encargarse de la autenticación y la seguridad, Firebase permite que los codificadores se centren en el lado del cliente.

El año pasado, Google anunció otra solución de base de datos back-end, Cloud Firestore, construida desde cero con la promesa de una mayor escalabilidad e intuición. Sin embargo, esto introdujo cierta confusión en cuanto a su lugar en relación con el producto estrella ya existente de Google, Firebase Realtime Database. Este tutorial describirá las diferencias entre las dos plataformas y las distintas ventajas de cada una. Aprenderá a trabajar con las referencias de documentos de Firestore, así como a leer, escribir, actualizar y eliminar datos en tiempo real, creando una sencilla aplicación de recordatorios.

Objetivos de Este Tutorial

Este tutorial lo expondrá a Cloud Firestore. Aprenderá a aprovechar la plataforma para la sincronización y persistencia de la base de datos en tiempo real. Cubriremos los siguientes temas:

  • qué es Cloud Firestore
  • el modelo de datos de Firestore
  • estableciendo Cloud Firestore
  • creando y trabajando con referencias de Cloud Firestore
  • leyendo datos en tiempo real de Cloud Firestore
  • creando, actualizando y borrando datos
  • filtrado y consultas compuestas

Conocimiento Asumido

Este tutorial supone que has tenido cierta exposición a Firebase y un fondo que se está desarrollando con Swift y Xcode.

¿Qué es Cloud Firestore?

Al igual que Firebase Realtime Database, Firestore ofrece a los desarrolladores móviles y web una solución de nube multiplataforma para conservar los datos en tiempo real, independientemente de la latencia de la red o la conectividad a Internet, así como la integración perfecta con el conjunto de productos de Google Cloud Platform. Junto con estas similitudes, existen distintas ventajas y desventajas que diferencian una de la otra.

Modelo de Datos

En un nivel fundamental, la base de datos en tiempo real almacena datos como un árbol JSON grande, monolítico y jerárquico, mientras que Firestore organiza los datos en documentos y colecciones, así como en subcolecciones. Esto requiere menos desnormalización. Almacenar datos en un árbol JSON tiene los beneficios de la simplicidad cuando se trata de trabajar con requisitos de datos simples; sin embargo, se vuelve más engorroso a escala cuando se trabaja con datos jerárquicos más complejos.

Apoyo Fuera de Línea

Ambos productos ofrecen soporte fuera de línea, almacenando datos en caché activamente en colas cuando hay conectividad de red latente o no, sincronizando los cambios locales de regreso al back end cuando sea posible. Firestore admite la sincronización fuera de línea para aplicaciones web además de aplicaciones móviles, mientras que Realtime Database solo permite la sincronización móvil.

Consultas y Transacciones

Realtime Database solo admite capacidades de clasificación y filtrado limitadas: solo puede ordenar o filtrar en un nivel de propiedad, pero no en ambas, en una sola consulta. Las consultas también son profundas, lo que significa que devuelven un subárbol grande de resultados. El producto solo admite operaciones simples de escritura y transacción que requieren una devolución de llamada completa.

Firestore, por otro lado, presenta consultas de índice con clasificación y filtrado de compuestos, lo que le permite combinar acciones para crear filtros de cadena y ordenar. También puede ejecutar consultas superficiales devolviendo subcolecciones en lugar de toda la colección que obtendría con Realtime Database. Las transacciones son de naturaleza atómica, ya sea que envíe una operación por lotes o una sola, y las transacciones se repiten automáticamente hasta que se concluyan. Además, Realtime Database solo admite transacciones de escritura individuales, mientras que Firestore ofrece operaciones por lotes atómicamente.

Rendimiento y Escalabilidad

La base de datos en tiempo real, como era de esperar, es bastante robusta y tiene baja latencia. Sin embargo, las bases de datos están restringidas a regiones únicas, sujetas a disponibilidad zonal. Firestore, por otro lado, aloja los datos horizontalmente en múltiples zonas y regiones para garantizar una verdadera disponibilidad global, escalabilidad y confiabilidad. De hecho, Google ha prometido que Firestore será más confiable que Realtime Database.

Otro inconveniente de la base de datos en tiempo real es la limitación a 100.000 usuarios simultáneos (100.000 conexiones simultáneas y 1.000 escrituras / segundo en una única base de datos) después de lo cual tendría que fragmentar su base de datos (dividir su base de datos en múltiples bases de datos) para admitir más usuarios. Firestore escala automáticamente en varias instancias sin tener que intervenir.

Diseñado desde cero con escalabilidad en mente, Firestore tiene una nueva arquitectura esquemática que replica los datos en múltiples regiones, se encarga de la autenticación y maneja otros asuntos relacionados con la seguridad, todo dentro de su SDK del lado del cliente. Su nuevo modelo de datos es más intuitivo que el de Firebase, se parece más a otras soluciones de bases de datos NoSQL comparables como MongoDB, al tiempo que proporciona un motor de consultas más robusto.

Seguridad

Finalmente, Realtime Database, como usted sabe de nuestros tutoriales anteriores, administra la seguridad a través de reglas en cascada con activadores de validación por separado. Esto funciona con las Reglas de la base de datos de Firebase, validando sus datos por separado. Firestore, por otro lado, proporciona un modelo de seguridad más simple pero más poderoso que aprovecha las Reglas de Seguridad Cloud FireStore y la Administración de Identidad y Acceso (IAM), con la validación de datos exceptuados automáticamente.

El Modelo de Datos de Firebase

Firestore es una base de datos basada en documentos NoSQL, que consiste en colecciones de documentos, cada uno de los cuales contiene datos. Como es una base de datos NoSQL, no obtendrá tablas, filas ni otros elementos que pueda encontrar en una base de datos relacional, sino conjuntos de pares clave / valor que podría encontrar en los documentos.

Cree documentos y colecciones implícitamente asignando datos a un documento, y si el documento o colección no existe, se creará automáticamente para usted, ya que la colección siempre tiene que ser el nodo raíz (primer). Aquí hay un esquema de ejemplo de Tareas simple del proyecto en el que trabajará en breve, que consiste en la colección Tareas, así como numerosos documentos que contienen dos campos, el nombre (cadena) y un indicador de si la tarea está hecha (booleana) .

simple Tasks example schema of the project

Descomponemos cada uno de los elementos para que puedas entenderlos mejor.

Colecciones

Por ejemplo, podrían decir que quieren un tipo específico de producto, pero una vez que lo ofrecen, no están realmente comprando. Un grupo de enfoque puede ayudar a comprender mejor las preguntas y las situaciones más complejas como estas. Las colecciones tienen que ser los elementos raíz en su esquema y solo pueden contener documentos, no otras colecciones. Sin embargo, puede consultar un documento que a su vez se refiere a colecciones (subcolecciones).

Diagram of document and collections

En el diagrama anterior, una tarea consta de dos campos primitivos (nombre y hecho), así como una subcolección (subtarea) que consta de dos campos primitivos propios.

Documentos

Los documentos constan de pares clave / valor, con los valores que tienen uno de los siguientes tipos:

  • campos primitivos (como cadenas, números, booleanos)
  • objetos complejos anidados (listas o matrices de primitivas)
  • sub-colecciones

Los objetos anidados también se llaman mapas y se pueden representar de la siguiente manera dentro del documento. El siguiente es un ejemplo de un objeto anidado y una matriz, respectivamente:

Para obtener más información sobre los tipos de datos admitidos, consulte la documentación de Tipos de datos de Google. A continuación, configurará un proyecto para que funcione con Cloud Firestore.

Estableciendo un Proyecto

Si ya has trabajado con Firebase, mucho de esto te resultará familiar. De lo contrario, deberá crear una cuenta en Firebase y seguir las instrucciones en la sección 'Configurar el proyecto' de nuestro tutorial anterior, Comenzar con Firebase Authentication para iOS.

Para seguir con este tutorial, clone el repositorio del tutorial del proyecto. A continuación, incluye la biblioteca Firestore agregando lo siguiente a tu Podfile:

Ingresa lo siguiente en tu terminal para construir tu librería:

Luego, cambie a Xcode y abra el archivo .xcworkspace. Navegue hasta el archivo AppDelegate.swift e ingrese lo siguiente dentro de la aplicación: didFinishLaunchingWithOptions: method:

En su navegador, vaya a la consola de Firebase y seleccione la pestaña Base de datos a la izquierda.

Database tab in the Firebase console

Asegúrese de seleccionar la opción Iniciar en modo de prueba para que no tenga ningún problema de seguridad mientras experimentamos, y preste atención al aviso de seguridad cuando mueva su aplicación a producción. Ahora está listo para crear una colección y algunos documentos de muestra.

Añadir una Colección y un Documento de Prueba

Para comenzar, cree una colección inicial, Tareas, seleccionando el botón Agregar colección y nombrando la colección, como se ilustra a continuación:

naming the collection

Para el primer documento, va a dejar la ID del documento en blanco, lo que generará automáticamente una identificación para usted. El documento consistirá simplemente en dos campos: nombre y hecho.

Document with two fields

Guarde el documento, y debería poder confirmar la colección y el documento junto con la ID generada automáticamente:

collection and document with the auto-generated ID

Con la base de datos configurada con un documento de muestra en la nube, está listo para comenzar a implementar Firestore SDK en Xcode.

Crear y trabajar con referencias de bases de datos

Abra el archivo MasterViewController.swift en Xcode y agregue las siguientes líneas para importar la biblioteca:

Aquí simplemente está creando una variable de escucha que le permitirá activar una conexión a la base de datos en tiempo real cuando haya un cambio. También está creando una referencia DocumentSnapshot que contendrá la instantánea de datos temporales.

Antes de continuar con el controlador de vista, cree otro archivo rápido, Task.swift, que representará su modelo de datos:

El fragmento de código anterior incluye una propiedad de conveniencia (diccionario) y un método (init) que facilitarán el poblado del objeto modelo. Regrese al controlador de vista y declare una variable setter global que restringirá la consulta base a las 50 entradas principales en la lista de tareas. También eliminará el oyente una vez que establezca la variable de consulta, como se indica en la propiedad didSet a continuación:

Lectura de datos en tiempo real desde Cloud Firestore

Con la referencia del documento en su lugar, en viewWillAppear (_animated: Bool), asocie el oyente que creó anteriormente con los resultados de la instantánea de consulta y obtenga una lista de documentos. Esto se hace llamando a la consulta del método Firestore query?.addSnapshotListener:

El cierre anterior asigna los documentos snapshot asignando la matriz de forma iterativa y envolviéndola en un nuevo objeto instancia de modelo de Tarea para cada elemento de datos en la instantánea. Entonces, con solo unas pocas líneas, ha leído con éxito en todas las tareas desde la nube y las ha asignado al conjunto de tareas globales.

Para mostrar los resultados, llene los siguientes métodos delegados TableView:

En esta etapa, cree y ejecute el proyecto y, en el Simulador, debería poder observar los datos que aparecen en tiempo real. Agregue datos a través de la consola de Firebase y debería verlos aparecer instantáneamente en el simulador de aplicaciones.

Data appearing in the app simulator

Crear, actualizar y borrar datos

Después de leer con éxito el contenido del back-end, a continuación creará, actualizará y eliminará datos. El siguiente ejemplo ilustrará cómo actualizar datos, utilizando un ejemplo artificial donde la aplicación solo le permitirá marcar un elemento como hecho tocando en la celda. Tenga en cuenta la propiedad de cierre collection.document (item.id) .updateData (["done":! Item.done]), que simplemente hace referencia a un ID de documento específico, actualizando cada uno de los campos en el diccionario:

Para eliminar un elemento, llame al método document (item.id) .delete ():

Crear una nueva tarea implicará agregar un nuevo botón en su Storyboard y conectar su IBAction al controlador de vista, creando un método addTask (_ sender :). Cuando un usuario presiona el botón, se abrirá una hoja de alerta donde el usuario puede agregar un nuevo nombre de tarea:

Completa la parte final de la aplicación al ingresar lo siguiente:

Cree y ejecute la aplicación una vez más y, cuando aparezca el simulador, intente agregar algunas tareas, así como marcar algunas como terminadas, y finalmente pruebe la función de eliminación eliminando algunas tareas. Puede confirmar que los datos almacenados se actualizaron en tiempo real al cambiar a la consola de la base de datos de Firebase y observar la colección y los documentos.

collection and documents in the console

Filtrado y consultas compuestas

Hasta ahora, solo ha trabajado con una consulta simple, sin ninguna capacidad de filtrado específica. Para crear consultas un poco más robustas, puede filtrar por valores específicos haciendo uso de una cláusula whereField:

Puede solicitar y limitar sus datos de consulta, haciendo uso de los métodos de orden (por:) y límite (a:) de la siguiente manera:

En la aplicación FirebaseDo, ya usó el límite con la consulta base. En el fragmento anterior, también hizo uso de otra característica, consultas compuestas, donde tanto el orden como el límite están encadenados. Puede encadenar tantas consultas como desee, como en el siguiente ejemplo:

Conclusión

En este tutorial, exploró el nuevo producto MBaaS de Google, Cloud Firestore, y en el proceso creó una sencilla aplicación de recordatorio de tareas que demuestra lo fácil que es para usted persistir, sincronizar y consultar sus datos en la nube. Aprendió sobre la estructura del esquema de datos de Firestore en comparación con Firebase Realtime Database, y cómo leer y escribir datos en tiempo real, así como también la actualización y eliminación de datos. También aprendiste cómo hacer encuestas simples y compuestas, y cómo filtrar datos.

Cloud Firestore se creó con el objetivo de proporcionar la solidez de Firebase Realtime Database sin muchas de las limitaciones que los desarrolladores móviles tuvieron que soportar, especialmente en lo que respecta a la escalabilidad y la consulta. Solo arañamos la superficie de lo que puede lograr con Firestore, y ciertamente vale la pena explorar algunos de los conceptos más avanzados, como paginar datos con los cursores de consulta, administrar los índices y proteger sus datos.

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.