Este post discute cómo utilizar Couchbase Mobile para compartir datos entre tu aplicación iOS y la extensión de la aplicación iOS a través de dispositivos. En un artículo anterior Correo electrónico:En el post anterior, hablamos de cómo puedes usar Couchbase Lite como un almacén de datos independiente e integrado para compartir datos entre tu App iOS y su App Extension en el mismo dispositivo. En este post, vamos a ampliar eso para aprovechar la puerta de enlace de sincronización para permitir la sincronización de datos a través de las aplicaciones y la extensión de la aplicación correspondiente a través de dispositivos iOS.

NOTA: Utilizaremos Couchbase Lite v1.4.1 que es la versión de producción actual. Pero todo lo que discutimos aquí se aplica a la más reciente Vista previa para desarrolladores versión 2.0 de Couchbase Mobile.

Fondo

Asumiré que estás familiarizado con el desarrollo de aplicaciones iOS en Swift y que tienes conocimientos básicos sobre la integración de Couchbase Lite en tu aplicación iOS. Este Guía de iniciación es un buen punto de partida.

Si aún no lo ha hecho, lea esto entrada de blog relacionada sobre los fundamentos de las extensiones de aplicaciones y cómo configurar tu aplicación para que las admita.

Al igual que en el post anterior, vamos a discutir cómo Couchbase Mobile se puede utilizar con una extensión Today. Este tipo de extensión, también conocida como "Widget", aparece en la vista Today del Centro de Notificaciones y permite a los usuarios obtener actualizaciones rápidas.

Couchbase Lite

Couchbase Lite es una base de datos integrada que se ejecuta en dispositivos. Se puede utilizar en varios modos de despliegue. Se puede utilizar como una base de datos incrustada independiente o puede ser utilizado en conjunción con una puerta de enlace de sincronización remota que le permitiría sincronizar los datos a través de dispositivos. En este post, no vamos a repasar los detalles de la integración con Couchbase Lite. El Primeros pasos con Couchbase Lite es un buen lugar para empezar.

Pasarela de sincronización

Sync Gateway es un componente orientado a Internet al que se conectan sus aplicaciones móviles. Es responsable de la sincronización de datos entre los clientes, el enrutamiento y la autorización. Puede configurarse para que los datos permanezcan en una base de datos. Servidor Couchbase. En este post utilizaremos Couchbase Server en "morsa" en el que los datos persisten en memoria. En otras palabras, en esta aplicación demo, nuestro Sync Gateway no estará respaldado por Couchbase Server. Esto es adecuado para propósitos de desarrollo. En una aplicación del mundo real, probablemente querrás persistir tus datos en un servidor.

Ejemplo de aplicación de lista de tareas

Descargue el proyecto de ejemplo de Github y cambie a syncsupport rama.

Nuestra aplicación de ejemplo es una sencilla aplicación de lista de tareas que permite a los usuarios añadir, editar y eliminar tareas. Un usuario puede marcar tareas como completadas. La aplicación incluye una extensión Today que muestra las 2 tareas principales en el centro de notificaciones sin necesidad de abrir la aplicación. El usuario puede marcar tareas como completadas directamente desde el centro de notificaciones.

Todas las tareas se almacenan en una base de datos local de Couchbase Lite y se sincronizan con la puerta de enlace de sincronización remota para que los cambios estén disponibles para las aplicaciones/extensiones de aplicaciones en otros dispositivos.

Esto implica que tanto la aplicación contenedora como la extensión necesitarán acceso a la base de datos de Couchbase Lite, que se sincroniza con Sync Gateway.

Instalación y ejecución de Sync Gateway

 

Algunos artículos dignos de mención -
- El nombre de la base de datos es demo
- Sync Gateway está configurado para desplegarse en morsa modo. Tenga en cuenta que esto es adecuado sólo para fines de desarrollo.
- Hemos habilitado invitado acceso. Tenga en cuenta que esto es adecuado sólo para fines de desarrollo. En una aplicación real, debería desactivar el acceso de invitados.

  • En primer lugar, cambie a la carpeta en la que clonó el repositorio de la aplicación de ejemplo.

  • A continuación, inicie Sync Gateway con el archivo de configuración.

Arquitectura

Las extensiones de aplicaciones no son aplicaciones independientes. Están incluidas en una aplicación, denominada Aplicación de contenedores. Aunque las extensiones de aplicación se incluyen en la aplicación contenedora, se ejecutan independientemente de ésta en un proceso separado. Las extensiones de aplicación son lanzadas por otras aplicaciones que necesitan la funcionalidad de la extensión. La aplicación que ejecuta la extensión se denomina Aplicación anfitriona. La interfaz de usuario de la extensión se muestra en el contexto de la aplicación host.

En nuestra aplicación de ejemplo, el CBLiteTaskExtension es el tipo de widget Hoy Extensión de aplicación y CBLiteTaskApp es la aplicación contenedora correspondiente. El sistema Centro de notificaciones es la aplicación anfitriona de nuestra extensión App.

Aunque la aplicación contenedora y la extensión correspondiente son procesos independientes que se ejecutan en su propio espacio aislado, pueden compartir datos a través de un archivo Contenedor compartido.

Esto implica que si nuestra base de datos Couchbase Lite se encuentra en el directorio Contenedor compartidoque permitiría a ambos CBLiteTaskExtension y CBLiteTaskApp para acceder a ella. La base de datos Couchbase Lite es entonces responsable de enviar los cambios a la puerta de enlace de sincronización de la forma habitual, independientemente de si el contenido fue actualizado localmente por la aplicación o el widget "Hoy". Del mismo modo, los cambios introducidos desde la puerta de enlace de sincronización están disponibles tanto para la aplicación como para el widget "Hoy".

Configuración de un contenedor compartido

El Contenedor Compartido puede configurarse registrando un único Grupo de aplicaciones y habilitarla para su uso tanto por la aplicación contenedora como por la extensión de aplicación correspondiente.

Consulte la información relacionada Correo electrónico: sobre cómo configurar su aplicación para utilizar "Grupos de aplicaciones"

Guía de la aplicación

  • Abra el CBLiteApp.xcworkspace usando Xcode. Aunque la aplicación debería funcionar en Xcode 8.3 y superior, prefiero usar Xcode 9 porque incluye soporte para lanzar múltiples simuladores, lo que sería muy útil mientras se prueban las capacidades de sincronización entre dispositivos. Así que si usted tiene la opción, por favor, utilice Xcode 9.
  • Cree y ejecute la aplicación en un simulador de iOS seleccionando el objetivo de aplicación "CBLiteTaskApp". Ahora cambie a la vista Hoy del Centro de Notificaciones
  • Añada su nuevo Widget de Extensión a la Vista Hoy como se muestra a continuación

  • Si está utilizando Xcode 9, ejecute la aplicación en un segundo simulador y añada el widget de extensión a la vista "Hoy" como se ha mostrado anteriormente. Ahora tiene dos simuladores ejecutando la aplicación de lista de tareas.
  • En un simulador, utilizando la aplicación, añade un par de tareas pulsando el botón "+". Lo verás actualizado en el widget Hoy del segundo simulador en tiempo real. Si estás ejecutando un único simulador, puedes cambiar al widget Hoy en el mismo dispositivo. Verás que las tareas que has añadido se muestran en el widget.
  • Del mismo modo, en un simulador, marca las tareas como "completadas" a través del widget "Hoy". Verás cómo se actualiza el estado en la aplicación correspondiente del segundo simulador en tiempo real. Si estás ejecutando un único simulador, puedes cambiar a la app en el mismo dispositivo. Observará que el estado de finalización del

  • Ahora, añadiremos una tarea a Sync Gateway a través de la función API REST. Verás que la nueva tarea aparece tanto en la aplicación como en el widget de hoy en ambos simuladores, ¡todo en tiempo real! ¡Genial!

Puede utilizar cualquier cliente HTTP para realizar las llamadas a la API REST para actualizar un documento en la pasarela de sincronización. Pero yo utilizaré Postman.

  • Abra un terminal y escriba el siguiente comando curl que añade una tarea llamada "task3" a la base de datos

Deberías ver que la tarea recién añadida aparece en la aplicación y en el widget

Guía de códigos

La arquitectura de la aplicación utiliza el [Modelo-Vista-Presentador (MVP)] patrón.

Gestor de base de datos

En Gestor de base de datos es el Modelo, implementada como una clase singleton que maneja las funciones de gestión de la base de datos de Couchbase Lite. Esta es la clase que inicializa la base de datos de Couchbase Lite en el directorio Contenedor compartido por lo que ahora está disponible tanto para la App Extension como para los procesos de la App

Abra el GestorBaseDatos.swift y localice el archivo appGroupContainerURL() función. Esta función crea una carpeta en el directorio Contenedor compartido para uso de la aplicación

  1. Devuelve la URL del contenedor de grupo compartido. Los contenedores de grupo se almacenan en ~/Library/Group Containers/
  2. Cree una carpeta llamada CBLite en el contenedor del grupo compartido.

Localice el configureCBManagerParaDatosCompartidos() función. Aquí es donde configuramos la función CBLManager con la dirección URL de la carpeta que hemos creado en el objeto appGroupContainerURL() función

  1. Cree CBLManagerOptions con las protecciones de archivo apropiadas. Un valor de completeFileProtectionUnlessOpen implica que el acceso de lectura/escritura al archivo está restringido a menos que el archivo esté abierto
  2. Inicializar el CBLManager con la ruta al contenedor compartido. Posteriormente, cuando se cree la base de datos, se creará en el contenedor compartido.¡Eso es todo!

Localice el openOrCreateDatabaseEnContenedorCompartido() función. Aquí es donde inicializamos la base de datos Couchbase Lite usando el CBLManager

  1. Cree CBLDatabaseOptions objeto
  2. Inicializar el Base de datos CBLDatabase utilizando el CBLManager que se creó anteriormente. Cuando se cree la base de datos, se creará en el contenedor compartido especificado por el gestor.

Ya está. La base de datos de Couchbase Lite está ahora en el Contenedor Compartido que tanto la App como la Extensión pueden leer y escribir.

El siguiente paso es activar la sincronización con la puerta de enlace de sincronización remota

Localice el startDBPullReplication() función. Aquí es donde configuramos la función Tire de replicador para extraer datos de Sync Gateway a la base de datos Couchbase Lite.

  1. Cree CBLReplicación Tirar objeto replicador
  2. Configúrelo para extraer documentos en modo continuo. Esto permitirá que los cambios se propaguen en tiempo real.
  3. Iniciar la replicación

Localice el startDBPushReplication() función. Aquí es donde configuramos la función Empuje para enviar datos desde la base de datos Couchbase Lite a Sync Gateway.

  1. Cree CBLReplicación Empujar objeto replicador
  2. Configúrelo para enviar documentos en modo continuo. Esto permitirá que los cambios se propaguen en tiempo real.
  3. Iniciar la replicación

Una vez que haya activado la replicación, añada observadores para que se les notifiquen los cambios. Esto se implementa en el módulo addReplicationChangeObserverForReplicator() función.
Con estos sencillos pasos, ya tienes la base de datos compartida de Couchbase Lite replicando cambios con el Sync Gateway remoto.

Presentador de tareas

En Presentador de tareas es el Presentador, que se encarga de las interacciones de la interfaz de usuario tanto de la aplicación CBLiteTaskExtension ampliación de tareas y el CBLiteTaskApp e interactúa con la aplicación Gestor de base de datos. Es el intermediario entre la aplicación/extensión de aplicación y el DatabaseManager.

Revise la TaskPresenter.swift . Verás que implementa las funciones CRUD para interactuar con la base de datos Couchbase Lite. Pero fíjate en que la implementación de estas funciones utiliza el método Gestor de base de datos.

¿Y ahora qué?

El post discute lo fácil que es para usted utilizar Couchbase Lite como un almacén de datos compartidos entre su App iOS y el widget correspondiente de Today App. Con la sincronización de la base de datos compartida con Sync Gatway remoto, ahora podemos replicar los cambios a través de las aplicaciones / extensiones de aplicaciones a través de múltiples dispositivos.

Si tiene alguna pregunta, no dude en ponerse en contacto conmigo en Twitter @rajagp o envíeme un correo electrónico priya.rajagopal@couchbase.com. Si desea sugerir mejoras, envíe un pull request a la sección GitHub repo. Puede obtener más información sobre la integración con Couchbase Lite en este enlace Primeros pasos con Couchbase Lite blog.

En Foros de Couchbase son otro buen lugar para publicar sus preguntas.

 

Autor

Publicado por Priya Rajagopal, Directora de Gestión de Productos

Priya Rajagopal es directora sénior de gestión de productos en Couchbase y responsable de las plataformas de desarrollo para la nube y el perímetro. Lleva más de 20 años dedicándose profesionalmente al desarrollo de software en varios puestos de liderazgo técnico y de producto, con más de 10 años centrados en tecnologías móviles. Como delegada de estándares IPTV de TISPAN, fue una colaboradora clave en las especificaciones de estándares IPTV. Tiene 22 patentes en las áreas de redes y seguridad de plataformas.

Dejar una respuesta