{"id":4243,"date":"2017-11-28T09:28:16","date_gmt":"2017-11-28T17:28:16","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=4243"},"modified":"2025-06-13T20:09:26","modified_gmt":"2025-06-14T03:09:26","slug":"sharing-data-ios-app-extensions-sync-capability","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/es\/sharing-data-ios-app-extensions-sync-capability\/","title":{"rendered":"Compartir y sincronizar datos entre aplicaciones iOS y extensiones de aplicaciones en distintos dispositivos"},"content":{"rendered":"<p>Este post discute c\u00f3mo utilizar Couchbase Mobile para compartir datos entre tu aplicaci\u00f3n iOS y la extensi\u00f3n de la aplicaci\u00f3n iOS a trav\u00e9s de dispositivos. En un art\u00edculo anterior <a href=\"https:\/\/www.couchbase.com\/blog\/es\/couchbase-lite-with-ios-app-extensions\/\">Correo electr\u00f3nico:<\/a>En el post anterior, hablamos de c\u00f3mo puedes usar Couchbase Lite como un almac\u00e9n 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\u00f3n para permitir la sincronizaci\u00f3n de datos a trav\u00e9s de las aplicaciones y la extensi\u00f3n de la aplicaci\u00f3n correspondiente a trav\u00e9s de dispositivos iOS.<\/p>\n<p><!--more--><\/p>\n<p>NOTA: Utilizaremos <a href=\"https:\/\/www.couchbase.com\/blog\/es\/downloads\/\">Couchbase Lite v1.4.1<\/a> que es la versi\u00f3n de producci\u00f3n actual. Pero todo lo que discutimos aqu\u00ed se aplica a la m\u00e1s reciente <a href=\"https:\/\/developer.couchbase.com\/documentation\/mobile\/2.0\/whatsnew.html?language=ios\">Vista previa para desarrolladores versi\u00f3n 2.0<\/a> de Couchbase Mobile.<\/p>\n<h3 id=\"background\">Fondo<\/h3>\n<p>Asumir\u00e9 que est\u00e1s familiarizado con el desarrollo de aplicaciones iOS en Swift y que tienes conocimientos b\u00e1sicos sobre la integraci\u00f3n de Couchbase Lite en tu aplicaci\u00f3n iOS. Este <a href=\"https:\/\/developer.couchbase.com\/documentation\/mobile\/1.5\/installation\/index.html\">Gu\u00eda de iniciaci\u00f3n<\/a> es un buen punto de partida.<\/p>\n<p>Si a\u00fan no lo ha hecho, lea esto <a href=\"https:\/\/www.couchbase.com\/blog\/es\/couchbase-lite-with-ios-app-extensions\/\">entrada de blog relacionada<\/a> sobre los fundamentos de las extensiones de aplicaciones y c\u00f3mo configurar tu aplicaci\u00f3n para que las admita.<\/p>\n<p>Al igual que en el post anterior, vamos a discutir c\u00f3mo Couchbase Mobile se puede utilizar con una extensi\u00f3n Today. Este tipo de extensi\u00f3n, tambi\u00e9n conocida como \"Widget\", aparece en la vista Today del Centro de Notificaciones y permite a los usuarios obtener actualizaciones r\u00e1pidas.<\/p>\n<h3 id=\"couchbaselite\">Couchbase Lite<\/h3>\n<p>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\u00f3n con una puerta de enlace de sincronizaci\u00f3n remota que le permitir\u00eda sincronizar los datos a trav\u00e9s de dispositivos. En este post, no vamos a repasar los detalles de la integraci\u00f3n con Couchbase Lite. El\u00a0<a href=\"https:\/\/www.couchbase.com\/blog\/es\/couchbase-lite-embedded-in-ios-app-part1\/\">Primeros pasos con Couchbase Lite<\/a> es un buen lugar para empezar.<\/p>\n<h3 id=\"syncgateway\">Pasarela de sincronizaci\u00f3n<\/h3>\n<p>Sync Gateway es un componente orientado a Internet al que se conectan sus aplicaciones m\u00f3viles. Es responsable de la sincronizaci\u00f3n de datos entre los clientes, el enrutamiento y la autorizaci\u00f3n. Puede configurarse para que los datos permanezcan en una base de datos. <a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/current\/introduction\/intro.html\">Servidor Couchbase<\/a>. En este post utilizaremos Couchbase Server en <a href=\"https:\/\/developer.couchbase.com\/documentation\/mobile\/current\/installation\/sync-gateway\/index.html#walrus-mode\">\"morsa\"<\/a> en el que los datos persisten en memoria. En otras palabras, en esta aplicaci\u00f3n demo, nuestro Sync Gateway no estar\u00e1 respaldado por Couchbase Server. Esto es adecuado para prop\u00f3sitos de desarrollo. En una aplicaci\u00f3n del mundo real, probablemente querr\u00e1s persistir tus datos en un servidor.<\/p>\n<h2 id=\"sampletasklistapp\">Ejemplo de aplicaci\u00f3n de lista de tareas<\/h2>\n<p>Descargue el proyecto de ejemplo de Github y cambie a <strong><code>syncsupport<\/code> rama<\/strong>.<\/p>\n<pre><code> git clone git@github.com:couchbaselabs\/couchbase-mobile-ios-app-extension.git<\/code><\/pre>\n<pre><code>git checkout syncsupport <\/code><\/pre>\n<p>Nuestra aplicaci\u00f3n de ejemplo es una sencilla aplicaci\u00f3n de lista de tareas que permite a los usuarios a\u00f1adir, editar y eliminar tareas. Un usuario puede marcar tareas como completadas. La aplicaci\u00f3n incluye una extensi\u00f3n Today que muestra las 2 tareas principales en el centro de notificaciones sin necesidad de abrir la aplicaci\u00f3n. El usuario puede marcar tareas como completadas directamente desde el centro de notificaciones.<\/p>\n<p>Todas las tareas se almacenan en una base de datos local de Couchbase Lite y se sincronizan con la puerta de enlace de sincronizaci\u00f3n remota para que los cambios est\u00e9n disponibles para las aplicaciones\/extensiones de aplicaciones en otros dispositivos.<\/p>\n<p>Esto implica que tanto la aplicaci\u00f3n contenedora como la extensi\u00f3n necesitar\u00e1n acceso a la base de datos de Couchbase Lite, que se sincroniza con Sync Gateway.<\/p>\n<h2 id=\"installingrunningsyncgateway\">Instalaci\u00f3n y ejecuci\u00f3n de Sync Gateway<\/h2>\n<ul>\n<li>Primero, <a href=\"https:\/\/developer.couchbase.com\/documentation\/mobile\/1.5\/installation\/sync-gateway\/index.html#macos\">descargar e instalar<\/a> el Sync<br \/>\n<h2 id=\"installingrunningsyncgateway\" style=\"margin-bottom: 35px\"><\/h2>\n<p>Gateway si a\u00fan no lo ha hecho.<\/li>\n<li>Iniciaremos el Sync Gateway con el bot\u00f3n <a href=\"https:\/\/github.com\/couchbaselabs\/couchbase-mobile-ios-app-extension\/blob\/syncsupport\/sync-gateway-config.json\">archivo de configuraci\u00f3n de ejemplo<\/a> que descarg\u00f3 del repositorio de la aplicaci\u00f3n de ejemplo.<\/li>\n<li>Primero vamos a abrir y revisar el contenido de <a href=\"https:\/\/github.com\/couchbaselabs\/couchbase-mobile-ios-app-extension\/blob\/syncsupport\/sync-gateway-config.json\">archivo de configuraci\u00f3n de ejemplo<\/a><\/li>\n<\/ul>\n<pre class=\"lang:js decode:true\">{\r\n \"log\": [\"*\"],\r\n \"CORS\": {\r\n \"Origen\":[\"*\"]\r\n },\r\n \"bases de datos\": {\r\n \"demo\": {\r\n      \"servidor\": \"morsa:\",\r\n      \"bucket\": \"default\",\r\n      \"users\": { \"GUEST\": { \"disabled\": false, \"admin_channels\": [\"*\"] } },\r\n      \"unsupported\": {\r\n         \"user_views\": {\r\n               \"enabled\":true\r\n              }\r\n        }\r\n     }\r\n  }\r\n }<\/pre>\n<p>&nbsp;<\/p>\n<p>Algunos art\u00edculos dignos de menci\u00f3n -<br \/>\n- El nombre de la base de datos es <code>demo<\/code><br \/>\n- Sync Gateway est\u00e1 configurado para desplegarse en <code>morsa<\/code> modo. Tenga en cuenta que esto es adecuado s\u00f3lo para fines de desarrollo.<br \/>\n- Hemos habilitado <code>invitado<\/code> acceso. Tenga en cuenta que esto es adecuado s\u00f3lo para fines de desarrollo. En una aplicaci\u00f3n real, deber\u00eda desactivar el acceso de invitados.<\/p>\n<ul>\n<li>En primer lugar, cambie a la carpeta en la que clon\u00f3 el repositorio de la aplicaci\u00f3n de ejemplo.<\/li>\n<\/ul>\n<pre><code> cd \/ruta\/para\/couchbase-mobile-ios-app-extension<\/code><\/pre>\n<ul>\n<li>A continuaci\u00f3n, inicie Sync Gateway con el archivo de configuraci\u00f3n.<\/li>\n<\/ul>\n<pre><code> \/ruta\/a\/sync-gateway sync-gateway-config.json<\/code><\/pre>\n<h2 id=\"architecture\">Arquitectura<\/h2>\n<p>Las extensiones de aplicaciones no son aplicaciones independientes. Est\u00e1n incluidas en una aplicaci\u00f3n, denominada <strong><em>Aplicaci\u00f3n de contenedores<\/em><\/strong>.  Aunque las extensiones de aplicaci\u00f3n se incluyen en la aplicaci\u00f3n contenedora, se ejecutan independientemente de \u00e9sta en un proceso separado. Las extensiones de aplicaci\u00f3n son lanzadas por otras aplicaciones que necesitan la funcionalidad de la extensi\u00f3n. La aplicaci\u00f3n que ejecuta la extensi\u00f3n se denomina <strong><em>Aplicaci\u00f3n anfitriona<\/em><\/strong>.  La interfaz de usuario de la extensi\u00f3n se muestra en el contexto de la aplicaci\u00f3n host.<\/p>\n<p>En nuestra aplicaci\u00f3n de ejemplo, el <code>CBLiteTaskExtension<\/code> es el tipo de widget Hoy Extensi\u00f3n de aplicaci\u00f3n y <code>CBLiteTaskApp<\/code> es la aplicaci\u00f3n contenedora correspondiente. El sistema <code>Centro de notificaciones<\/code> es la aplicaci\u00f3n anfitriona de nuestra extensi\u00f3n App.<\/p>\n<p>Aunque la aplicaci\u00f3n contenedora y la extensi\u00f3n correspondiente son procesos independientes que se ejecutan en su propio espacio aislado, pueden compartir datos a trav\u00e9s de un archivo <strong><em>Contenedor compartido<\/em>.<\/strong><\/p>\n<p>Esto implica que si nuestra base de datos Couchbase Lite se encuentra en el directorio <em>Contenedor compartido<\/em>que permitir\u00eda a ambos <code>CBLiteTaskExtension<\/code> y <code>CBLiteTaskApp<\/code> para acceder a ella. La base de datos Couchbase Lite es entonces responsable de enviar los cambios a la puerta de enlace de sincronizaci\u00f3n de la forma habitual, independientemente de si el contenido fue actualizado localmente por la aplicaci\u00f3n o el widget \"Hoy\". Del mismo modo, los cambios introducidos desde la puerta de enlace de sincronizaci\u00f3n est\u00e1n disponibles tanto para la aplicaci\u00f3n como para el widget \"Hoy\".<\/p>\n<figure><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/11\/app_extension_sync.png\" alt=\"\" \/><\/figure>\n<h3 id=\"settingupasharedcontainer\">Configuraci\u00f3n de un contenedor compartido<\/h3>\n<p>El Contenedor Compartido puede configurarse registrando un \u00fanico <strong><em>Grupo de aplicaciones<\/em><\/strong> y habilitarla para su uso tanto por la aplicaci\u00f3n contenedora como por la extensi\u00f3n de aplicaci\u00f3n correspondiente.<\/p>\n<p>Consulte la informaci\u00f3n relacionada <a href=\"https:\/\/www.couchbase.com\/blog\/es\/couchbase-lite-with-ios-app-extensions\/\">Correo electr\u00f3nico:<\/a> sobre c\u00f3mo configurar su aplicaci\u00f3n para utilizar <em>\"Grupos de aplicaciones\"<\/em><\/p>\n<h2 id=\"appwalkthrough\">Gu\u00eda de la aplicaci\u00f3n<\/h2>\n<ul>\n<li>Abra el <code>CBLiteApp.xcworkspace<\/code> usando Xcode. Aunque la aplicaci\u00f3n deber\u00eda funcionar en Xcode 8.3 y superior, prefiero usar Xcode 9 porque incluye soporte para lanzar m\u00faltiples simuladores, lo que ser\u00eda muy \u00fatil mientras se prueban las capacidades de sincronizaci\u00f3n entre dispositivos. As\u00ed que si usted tiene la opci\u00f3n, por favor, utilice Xcode 9.<\/li>\n<li>Cree y ejecute la aplicaci\u00f3n en un simulador de iOS seleccionando el objetivo de aplicaci\u00f3n \"CBLiteTaskApp\". Ahora cambie a la vista Hoy del Centro de Notificaciones<\/li>\n<li>A\u00f1ada su nuevo Widget de Extensi\u00f3n a la Vista Hoy como se muestra a continuaci\u00f3n<\/li>\n<\/ul>\n<p><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/11\/app_extension_first-1.gif\" alt=\"\" \/><\/p>\n<ul>\n<li>Si est\u00e1 utilizando Xcode 9, ejecute la aplicaci\u00f3n en un segundo simulador y a\u00f1ada el widget de extensi\u00f3n a la vista \"Hoy\" como se ha mostrado anteriormente. Ahora tiene dos simuladores ejecutando la aplicaci\u00f3n de lista de tareas.<\/li>\n<\/ul>\n<ul>\n<li>En un simulador, utilizando la aplicaci\u00f3n, a\u00f1ade un par de tareas pulsando el bot\u00f3n \"+\". Lo ver\u00e1s actualizado en el widget Hoy del segundo simulador en tiempo real. Si est\u00e1s ejecutando un \u00fanico simulador, puedes cambiar al widget Hoy en el mismo dispositivo. Ver\u00e1s que las tareas que has a\u00f1adido se muestran en el widget.<\/li>\n<\/ul>\n<figure><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-5659 size-full\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/11\/app_extension_second-min-compressed.gif\" alt=\"\" width=\"600\" height=\"625\" \/><\/figure>\n<ul>\n<li>Del mismo modo, en un simulador, marca las tareas como \"completadas\" a trav\u00e9s del widget \"Hoy\". Ver\u00e1s c\u00f3mo se actualiza el estado en la aplicaci\u00f3n correspondiente del segundo simulador en tiempo real. Si est\u00e1s ejecutando un \u00fanico simulador, puedes cambiar a la app en el mismo dispositivo. Observar\u00e1 que el estado de finalizaci\u00f3n del<\/li>\n<\/ul>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-5656 size-full\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2018\/08\/app_extension_third-min-compressed.gif\" alt=\"\" width=\"600\" height=\"619\" \/><\/p>\n<ul>\n<li>Ahora, a\u00f1adiremos una tarea a Sync Gateway a trav\u00e9s de la funci\u00f3n <a href=\"https:\/\/developer.couchbase.com\/documentation\/mobile\/1.5\/references\/sync-gateway\/index.html\">API REST<\/a>. Ver\u00e1s que la nueva tarea aparece tanto en la aplicaci\u00f3n como en el widget de hoy en ambos simuladores, \u00a1todo en tiempo real! \u00a1Genial!<\/li>\n<\/ul>\n<p>Puede utilizar cualquier cliente HTTP para realizar las llamadas a la API REST para actualizar un documento en la pasarela de sincronizaci\u00f3n. Pero yo utilizar\u00e9 Postman.<\/p>\n<ul>\n<li>Abra un terminal y escriba el siguiente comando curl que a\u00f1ade una tarea llamada \"task3\" a la base de datos<\/li>\n<\/ul>\n<pre><code> curl -X PUT https:\/\/localhost:4984\/demo\/task3 \r\n -H 'accept: application\/json' \r\n -H 'cache-control: no-cache' \r\n -H 'content-type: application\/json' \r\n -d '{\r\n \"createdOn\": 1510933574.672683,\r\n \"isCompleted\": false,\r\n \"name\": \"task3\"\r\n }'<\/code><\/pre>\n<p>Deber\u00edas ver que la tarea reci\u00e9n a\u00f1adida aparece en la aplicaci\u00f3n y en el widget<\/p>\n<figure><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-5658 size-full\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/11\/app_extension_fourth-min-compressed.gif\" alt=\"\" width=\"600\" height=\"342\" \/><\/figure>\n<h2 id=\"codewalkthrough\">Gu\u00eda de c\u00f3digos<\/h2>\n<p>La arquitectura de la aplicaci\u00f3n utiliza el [<a href=\"https:\/\/(https:\/\/www.priyaontech.com\/download\/28\/\">Modelo-Vista-Presentador (MVP)<\/a>] patr\u00f3n.<\/p>\n<h3 id=\"databasemanager\">Gestor de base de datos<\/h3>\n<p>En <code>Gestor de base de datos<\/code> es el <em>Modelo<\/em>, implementada como una clase singleton que maneja las funciones de gesti\u00f3n de la base de datos de Couchbase Lite. Esta es la clase que inicializa la base de datos de Couchbase Lite en el directorio <em>Contenedor compartido<\/em> por lo que ahora est\u00e1 disponible tanto para la App Extension como para los procesos de la App<\/p>\n<p>Abra el <em>GestorBaseDatos.swift<\/em> y localice el archivo <em>appGroupContainerURL()<\/em> funci\u00f3n. Esta funci\u00f3n crea una carpeta en el directorio <em>Contenedor compartido<\/em> para uso de la aplicaci\u00f3n<\/p>\n<pre><code class=\"swift\"> \/\/ 1. Get URL to shared group container\r\n let fileManager = FileManager.default\r\n guard let groupURL = fileManager\r\n .containerURL(forSecurityApplicationGroupIdentifier: \"group.com.example.CBLiteSharedData\") else {\r\n return nil\r\n }\r\nlet storagePathUrl = groupURL.appendingPathComponent(&amp;quot;CBLite&amp;quot;)\r\nlet storagePath = storagePathUrl.path\r\n\r\n\/\/ 2: Create a folder in the shared container location with name&amp;quot;CBLite&amp;quot;\r\nif !fileManager.fileExists(atPath: storagePath) {\r\n    do {\r\n        try fileManager.createDirectory(atPath: storagePath,\r\n                                        withIntermediateDirectories: false,\r\n                                        attributes: nil)\r\n    } catch let error {\r\n        print(&amp;quot;error creating filepath: \\(error)&amp;quot;)\r\n        return nil\r\n    }\r\n}<\/code><\/pre>\n<ol>\n<li>Devuelve la URL del contenedor de grupo compartido. Los contenedores de grupo se almacenan en <em>~\/Library\/Group Containers\/<\/em><\/li>\n<li>Cree una carpeta llamada CBLite en el contenedor del grupo compartido.<\/li>\n<\/ol>\n<p>Localice el <em>configureCBManagerParaDatosCompartidos()<\/em> funci\u00f3n. Aqu\u00ed es donde configuramos la funci\u00f3n <code>CBLManager<\/code> con la direcci\u00f3n URL de la carpeta que hemos creado en el objeto <em>appGroupContainerURL()<\/em> funci\u00f3n<\/p>\n<pre><code class=\"swift\"> \/\/ 1. Establecer el modo de protecci\u00f3n de archivos para la carpeta de la base de datos Couchbase Lite\r\n let options = CBLManagerOptions(readOnly: false, fileProtection: Data.WritingOptions.completeFileProtectionUnlessOpen)\r\n let cblpoptions = UnsafeMutablePointer.allocate(capacidad: 1)\r\n cblpoptions.initialize(to: opciones)\r\n if let url = self.appGroupContainerURL() {\r\n    \/\/ 2. Inicializar el CBLManager con el directorio del contenedor compartido\r\n    _cbManager = try CBLManager.init(directorio: url.relativePath, opciones: cblpoptions)\r\n    \r\n}<\/code><\/pre>\n<ol>\n<li>Cree <code>CBLManagerOptions<\/code> con las protecciones de archivo apropiadas. Un valor de <a href=\"https:\/\/developer.apple.com\/reference\/foundation\/nsdata.writingoptions\/1616278-completefileprotectionunlessopen\"><em>completeFileProtectionUnlessOpen<\/em><\/a> implica que el acceso de lectura\/escritura al archivo est\u00e1 restringido a menos que el archivo est\u00e9 abierto<\/li>\n<li>Inicializar el <code>CBLManager<\/code> con la ruta al contenedor compartido. Posteriormente, cuando se cree la base de datos, se crear\u00e1 en el contenedor compartido.\u00a1Eso es todo!<\/li>\n<\/ol>\n<p>Localice el <em>openOrCreateDatabaseEnContenedorCompartido()<\/em> funci\u00f3n. Aqu\u00ed es donde inicializamos la base de datos Couchbase Lite usando el CBLManager<\/p>\n<pre><code class=\"swift\"> \/\/ 1: Establecer las opciones de la base de datos\r\n let options = CBLDatabaseOptions()\r\n options.storageType = kCBLSQLiteStorage\r\n options.create = true\r\n \/\/ 2: Crear una base de datos para el usuario conectado si no existe o devolver el handle de la existente\r\n  _db = try _cbManager?.openDatabaseNamed(kDBName.lowercased(), with: options)<\/code><\/pre>\n<ol>\n<li>Cree <code>CBLDatabaseOptions<\/code> objeto<\/li>\n<li>Inicializar el <code>Base de datos CBLDatabase<\/code> utilizando el <code>CBLManager<\/code> que se cre\u00f3 anteriormente. Cuando se cree la base de datos, se crear\u00e1 en el contenedor compartido especificado por el gestor.<\/li>\n<\/ol>\n<p>Ya est\u00e1. La base de datos de Couchbase Lite est\u00e1 ahora en el Contenedor Compartido que tanto la App como la Extensi\u00f3n pueden leer y escribir.<\/p>\n<p>El siguiente paso es activar la sincronizaci\u00f3n con la puerta de enlace de sincronizaci\u00f3n remota<\/p>\n<p>Localice el <em>startDBPullReplication()<\/em> funci\u00f3n. Aqu\u00ed es donde configuramos la funci\u00f3n <em>Tire de<\/em> replicador para extraer datos de Sync Gateway a la base de datos Couchbase Lite.<\/p>\n<pre><code class=\"swift\"> if (pullRepl == nil) {\r\n \/\/ 1: Crear una replicaci\u00f3n Pull para empezar a tirar de la fuente remota\r\n pullRepl = _db?.createPullReplication(URL(string: self.kDBName.lowercased(), relativeTo: \u00a1URL.init(string: kRemoteSyncUrl))!\r\n        \/\/ 2. Buscar cambios continuamente\r\n        _pullRepl?.continuous = true\r\n     }\r\n\r\n    \/\/ 3. Iniciar el replicador pull\r\n    _pullRepl?.start()<\/code><\/pre>\n<ol>\n<li>Cree <code>CBLReplicaci\u00f3n<\/code> Tirar objeto replicador<\/li>\n<li>Config\u00farelo para extraer documentos en modo continuo. Esto permitir\u00e1 que los cambios se propaguen en tiempo real.<\/li>\n<li>Iniciar la replicaci\u00f3n<\/li>\n<\/ol>\n<p>Localice el <em>startDBPushReplication()<\/em> funci\u00f3n. Aqu\u00ed es donde configuramos la funci\u00f3n <em>Empuje<\/em> para enviar datos desde la base de datos Couchbase Lite a Sync Gateway.<\/p>\n<pre><code class=\"swift\"> if (_pushRepl == nil) {\r\n       \/\/ 1: Crear una replicaci\u00f3n push para empezar a enviar a la fuente remota\r\n        _pushRepl = _db?.createPushReplication(URL(string: self.kDBName.lowercased(), relativeTo: \u00a1URL.init(string:kRemoteSyncUrl))!\r\n\r\n        \/\/ 2. Empujar cambios continuamente\r\n        _pushRepl?.continuous = true\r\n\r\n     }\r\n\r\n    \/\/ 3. Iniciar el replicador push\r\n    _pushRepl?.start()<\/code><\/pre>\n<ol>\n<li>Cree <code>CBLReplicaci\u00f3n<\/code> Empujar objeto replicador<\/li>\n<li>Config\u00farelo para enviar documentos en modo continuo. Esto permitir\u00e1 que los cambios se propaguen en tiempo real.<\/li>\n<li>Iniciar la replicaci\u00f3n<\/li>\n<\/ol>\n<p>Una vez que haya activado la replicaci\u00f3n, a\u00f1ada observadores para que se les notifiquen los cambios. Esto se implementa en el m\u00f3dulo <em>addReplicationChangeObserverForReplicator()<\/em> funci\u00f3n.<br \/>\nCon estos sencillos pasos, ya tienes la base de datos compartida de Couchbase Lite replicando cambios con el Sync Gateway remoto.<\/p>\n<h3 id=\"taskpresenter\">Presentador de tareas<\/h3>\n<p>En <code>Presentador de tareas<\/code> es el Presentador, que se encarga de las interacciones de la interfaz de usuario tanto de la aplicaci\u00f3n <code>CBLiteTaskExtension<\/code> ampliaci\u00f3n de tareas y el <code>CBLiteTaskApp<\/code> e interact\u00faa con la aplicaci\u00f3n <code>Gestor de base de datos<\/code>. Es el intermediario entre la aplicaci\u00f3n\/extensi\u00f3n de aplicaci\u00f3n y el DatabaseManager.<\/p>\n<p>Revise la <em>TaskPresenter.swift<\/em> . Ver\u00e1s que implementa las funciones CRUD para interactuar con la base de datos Couchbase Lite. Pero f\u00edjate en que la implementaci\u00f3n de estas funciones utiliza el m\u00e9todo <code>Gestor de base de datos<\/code>.<\/p>\n<h3 id=\"whatnext\">\u00bfY ahora qu\u00e9?<\/h3>\n<p>El post discute lo f\u00e1cil que es para usted utilizar Couchbase Lite como un almac\u00e9n de datos compartidos entre su App iOS y el widget correspondiente de Today App. Con la sincronizaci\u00f3n de la base de datos compartida con Sync Gatway remoto, ahora podemos replicar los cambios a trav\u00e9s de las aplicaciones \/ extensiones de aplicaciones a trav\u00e9s de m\u00faltiples dispositivos.<\/p>\n<p>Si tiene alguna pregunta, no dude en ponerse en contacto conmigo en Twitter <a href=\"https:\/\/twitter.com\/rajagp?lang=en\">@rajagp<\/a> o env\u00edeme un correo electr\u00f3nico\u00a0<a href=\"mailto:priya.rajagopal@couchbase.com\">priya.rajagopal@couchbase.com<\/a>. Si desea sugerir mejoras, env\u00ede un pull request a la secci\u00f3n <a href=\"https:\/\/github.com\/couchbaselabs\/couchbase-mobile-ios-app-extension\">GitHub<\/a> repo. Puede obtener m\u00e1s informaci\u00f3n sobre la integraci\u00f3n con Couchbase Lite en este enlace\u00a0<a href=\"https:\/\/www.couchbase.com\/blog\/es\/couchbase-lite-embedded-in-ios-app-part1\/\">Primeros pasos con Couchbase Lite<\/a> blog.<\/p>\n<p>En <a href=\"https:\/\/www.couchbase.com\/blog\/es\/forums\/\">Foros de Couchbase<\/a> son otro buen lugar para publicar sus preguntas.<\/p>\n<p>&nbsp;<\/p>","protected":false},"excerpt":{"rendered":"<p>This post discusses\u00a0how to use Couchbase Mobile to share data between your iOS App and iOS App Extension across devices. In an earlier post, we discussed how you can use Couchbase Lite as a standalone, embedded data store to share [&hellip;]<\/p>","protected":false},"author":1423,"featured_media":5656,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1815,1821,7667,1810],"tags":[1964,1536],"ppma_author":[8948],"class_list":["post-4243","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-best-practices-and-tutorials","category-couchbase-architecture","category-couchbase-lite","category-couchbase-mobile","tag-app-extension","tag-ios"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.7.1 (Yoast SEO v25.7) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Share data between iOS Apps &amp; App Extensions across devices<\/title>\n<meta name=\"description\" content=\"Use Couchbase Mobile Database in a shared container to share data between an iOS App and corresponding App Extension and to sync data across devices\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.couchbase.com\/blog\/es\/sharing-data-ios-app-extensions-sync-capability\/\" \/>\n<meta property=\"og:locale\" content=\"es_MX\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Sharing and Syncing Data between iOS Apps and App Extensions across devices\" \/>\n<meta property=\"og:description\" content=\"Use Couchbase Mobile Database in a shared container to share data between an iOS App and corresponding App Extension and to sync data across devices\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/es\/sharing-data-ios-app-extensions-sync-capability\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2017-11-28T17:28:16+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-14T03:09:26+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/08\/app_extension_third-min-compressed.gif\" \/>\n\t<meta property=\"og:image:width\" content=\"600\" \/>\n\t<meta property=\"og:image:height\" content=\"619\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/gif\" \/>\n<meta name=\"author\" content=\"Priya Rajagopal, Senior Director, Product Management\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@rajagp\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Priya Rajagopal, Senior Director, Product Management\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"11 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/sharing-data-ios-app-extensions-sync-capability\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/sharing-data-ios-app-extensions-sync-capability\/\"},\"author\":{\"name\":\"Priya Rajagopal, Senior Director, Product Management\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/c2da90e57717ee4970c48a87a131ac2c\"},\"headline\":\"Sharing and Syncing Data between iOS Apps and App Extensions across devices\",\"datePublished\":\"2017-11-28T17:28:16+00:00\",\"dateModified\":\"2025-06-14T03:09:26+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/sharing-data-ios-app-extensions-sync-capability\/\"},\"wordCount\":1839,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/sharing-data-ios-app-extensions-sync-capability\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/08\/app_extension_third-min-compressed.gif\",\"keywords\":[\"app extension\",\"ios\"],\"articleSection\":[\"Best Practices and Tutorials\",\"Couchbase Architecture\",\"Couchbase Lite\",\"Couchbase Mobile\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/sharing-data-ios-app-extensions-sync-capability\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/sharing-data-ios-app-extensions-sync-capability\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/sharing-data-ios-app-extensions-sync-capability\/\",\"name\":\"Share data between iOS Apps & App Extensions across devices\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/sharing-data-ios-app-extensions-sync-capability\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/sharing-data-ios-app-extensions-sync-capability\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/08\/app_extension_third-min-compressed.gif\",\"datePublished\":\"2017-11-28T17:28:16+00:00\",\"dateModified\":\"2025-06-14T03:09:26+00:00\",\"description\":\"Use Couchbase Mobile Database in a shared container to share data between an iOS App and corresponding App Extension and to sync data across devices\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/sharing-data-ios-app-extensions-sync-capability\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/sharing-data-ios-app-extensions-sync-capability\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/sharing-data-ios-app-extensions-sync-capability\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/08\/app_extension_third-min-compressed.gif\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/08\/app_extension_third-min-compressed.gif\",\"width\":600,\"height\":619},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/sharing-data-ios-app-extensions-sync-capability\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Sharing and Syncing Data between iOS Apps and App Extensions across devices\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"name\":\"The Couchbase Blog\",\"description\":\"Couchbase, the NoSQL Database\",\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"width\":218,\"height\":34,\"caption\":\"The Couchbase Blog\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/c2da90e57717ee4970c48a87a131ac2c\",\"name\":\"Priya Rajagopal, Senior Director, Product Management\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/4b50a54778b979d8c345b036ab138734\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/acfb2349788955262cd069497a9e7bdb0e97c26326f2e55811e7c1174e9ef1be?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/acfb2349788955262cd069497a9e7bdb0e97c26326f2e55811e7c1174e9ef1be?s=96&d=mm&r=g\",\"caption\":\"Priya Rajagopal, Senior Director, Product Management\"},\"description\":\"Priya Rajagopal is a Senior Director of Product Management at Couchbase responsible for developer platforms for the cloud and the edge. She has been professionally developing software for over 20 years in several technical and product leadership positions, with 10+ years focused on mobile technologies. As a TISPAN IPTV standards delegate, she was a key contributor to the IPTV standards specifications. She has 22 patents in the areas of networking and platform security.\",\"sameAs\":[\"https:\/\/x.com\/rajagp\"],\"url\":\"https:\/\/www.couchbase.com\/blog\/es\/author\/priya-rajagopalcouchbase-com\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Share data between iOS Apps & App Extensions across devices","description":"Use Couchbase Mobile Database in a shared container to share data between an iOS App and corresponding App Extension and to sync data across devices","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.couchbase.com\/blog\/es\/sharing-data-ios-app-extensions-sync-capability\/","og_locale":"es_MX","og_type":"article","og_title":"Sharing and Syncing Data between iOS Apps and App Extensions across devices","og_description":"Use Couchbase Mobile Database in a shared container to share data between an iOS App and corresponding App Extension and to sync data across devices","og_url":"https:\/\/www.couchbase.com\/blog\/es\/sharing-data-ios-app-extensions-sync-capability\/","og_site_name":"The Couchbase Blog","article_published_time":"2017-11-28T17:28:16+00:00","article_modified_time":"2025-06-14T03:09:26+00:00","og_image":[{"width":600,"height":619,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/08\/app_extension_third-min-compressed.gif","type":"image\/gif"}],"author":"Priya Rajagopal, Senior Director, Product Management","twitter_card":"summary_large_image","twitter_creator":"@rajagp","twitter_misc":{"Written by":"Priya Rajagopal, Senior Director, Product Management","Est. reading time":"11 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/sharing-data-ios-app-extensions-sync-capability\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/sharing-data-ios-app-extensions-sync-capability\/"},"author":{"name":"Priya Rajagopal, Senior Director, Product Management","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/c2da90e57717ee4970c48a87a131ac2c"},"headline":"Sharing and Syncing Data between iOS Apps and App Extensions across devices","datePublished":"2017-11-28T17:28:16+00:00","dateModified":"2025-06-14T03:09:26+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/sharing-data-ios-app-extensions-sync-capability\/"},"wordCount":1839,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/sharing-data-ios-app-extensions-sync-capability\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/08\/app_extension_third-min-compressed.gif","keywords":["app extension","ios"],"articleSection":["Best Practices and Tutorials","Couchbase Architecture","Couchbase Lite","Couchbase Mobile"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/sharing-data-ios-app-extensions-sync-capability\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/sharing-data-ios-app-extensions-sync-capability\/","url":"https:\/\/www.couchbase.com\/blog\/sharing-data-ios-app-extensions-sync-capability\/","name":"Share data between iOS Apps & App Extensions across devices","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/sharing-data-ios-app-extensions-sync-capability\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/sharing-data-ios-app-extensions-sync-capability\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/08\/app_extension_third-min-compressed.gif","datePublished":"2017-11-28T17:28:16+00:00","dateModified":"2025-06-14T03:09:26+00:00","description":"Use Couchbase Mobile Database in a shared container to share data between an iOS App and corresponding App Extension and to sync data across devices","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/sharing-data-ios-app-extensions-sync-capability\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/sharing-data-ios-app-extensions-sync-capability\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/sharing-data-ios-app-extensions-sync-capability\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/08\/app_extension_third-min-compressed.gif","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/08\/app_extension_third-min-compressed.gif","width":600,"height":619},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/sharing-data-ios-app-extensions-sync-capability\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Sharing and Syncing Data between iOS Apps and App Extensions across devices"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"El blog de Couchbase","description":"Couchbase, la base de datos NoSQL","publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"El blog de Couchbase","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","width":218,"height":34,"caption":"The Couchbase Blog"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/c2da90e57717ee4970c48a87a131ac2c","name":"Priya Rajagopal, Directora de Gesti\u00f3n de Productos","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/4b50a54778b979d8c345b036ab138734","url":"https:\/\/secure.gravatar.com\/avatar\/acfb2349788955262cd069497a9e7bdb0e97c26326f2e55811e7c1174e9ef1be?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/acfb2349788955262cd069497a9e7bdb0e97c26326f2e55811e7c1174e9ef1be?s=96&d=mm&r=g","caption":"Priya Rajagopal, Senior Director, Product Management"},"description":"Priya Rajagopal es directora s\u00e9nior de gesti\u00f3n de productos en Couchbase y responsable de las plataformas de desarrollo para la nube y el per\u00edmetro. Lleva m\u00e1s de 20 a\u00f1os dedic\u00e1ndose profesionalmente al desarrollo de software en varios puestos de liderazgo t\u00e9cnico y de producto, con m\u00e1s de 10 a\u00f1os centrados en tecnolog\u00edas m\u00f3viles. Como delegada de est\u00e1ndares IPTV de TISPAN, fue una colaboradora clave en las especificaciones de est\u00e1ndares IPTV. Tiene 22 patentes en las \u00e1reas de redes y seguridad de plataformas.","sameAs":["https:\/\/x.com\/rajagp"],"url":"https:\/\/www.couchbase.com\/blog\/es\/author\/priya-rajagopalcouchbase-com\/"}]}},"authors":[{"term_id":8948,"user_id":1423,"is_guest":0,"slug":"priya-rajagopalcouchbase-com","display_name":"Priya Rajagopal, Senior Director, Product Management","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/acfb2349788955262cd069497a9e7bdb0e97c26326f2e55811e7c1174e9ef1be?s=96&d=mm&r=g","first_name":"Priya","last_name":"Rajagopal, Senior Director, Product Management","user_url":"","author_category":"","description":"Priya Rajagopal es directora s\u00e9nior de gesti\u00f3n de productos en Couchbase y responsable de las plataformas de desarrollo para la nube y el per\u00edmetro. Lleva m\u00e1s de 20 a\u00f1os dedic\u00e1ndose profesionalmente al desarrollo de software en varios puestos de liderazgo t\u00e9cnico y de producto, con m\u00e1s de 10 a\u00f1os centrados en tecnolog\u00edas m\u00f3viles. Como delegada de est\u00e1ndares IPTV de TISPAN, fue una colaboradora clave en las especificaciones de est\u00e1ndares IPTV. Tiene 22 patentes en las \u00e1reas de redes y seguridad de plataformas."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/4243","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/users\/1423"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/comments?post=4243"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/4243\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media\/5656"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media?parent=4243"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/categories?post=4243"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/tags?post=4243"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/ppma_author?post=4243"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}