Saltar al contenido principal

Cómo funcionan los Live Updates en Capgo

Explora a fondo la implementación técnica de Live Update en Capgo y cómo funciona internamente tanto en iOS como en Android.

Cómo funcionan los Live Updates en Capgo

Cómo funciona Live Update en Capgo

live updates de Capacitor (OTA) reemplaza el web bundle dentro de tu app para que puedas enviar cambios de JavaScript, HTML y CSS sin un nuevo binario en la tienda. Los Live Updates son una de las funciones más potentes en apps de Capacitor, permitiendo actualizaciones en tiempo real sin pasar por la tienda. Analicemos a fondo cómo Capgo implementa esta funcionalidad.

Conceptos clave

Una app de Capacitor consta de dos capas principales:

  1. Capa Web: Contiene los archivos HTML, CSS y JavaScript cargados en el WebView
  2. Capa Nativa: Contiene code específicos de la plataforma (Java/Kotlin para Android, Swift para iOS)

El sistema de live update de Capgo funciona reemplazando la capa web en tiempo de ejecución, ya que estos archivos no se compilan en el binario de la app.

Implementación técnica

Server Paths en Capacitor

Capgo gestiona dos rutas críticas:

  • Ruta del servidor actual: Apunta a los archivos cargados actualmente en la WebView
  • Siguiente ruta del servidor: Apunta a los archivos que se cargarán al reiniciar la app

Implementación en Android

En Android, Capgo gestiona las rutas mediante:

// Store next server path
private void setNextCapacitorServerPath(String path) {
    SharedPreferences prefs = context.getSharedPreferences("CapWebViewSettings", Activity.MODE_PRIVATE);
    SharedPreferences.Editor editor = prefs.edit();
    editor.putString("serverBasePath", path);
    editor.apply();
}

// Update current path and reload
private void setCurrentCapacitorServerPath(String path) {
    bridge.setServerBasePath(path);
    bridge.reload();
}

Implementación en iOS

En iOS, las rutas se gestionan mediante:

// Store next server path
private func setNextCapacitorServerPath(path: String) {
    KeyValueStore.standard["serverBasePath"] = path
}

// Update current path
private func setCurrentCapacitorServerPath(path: String) {
    bridge.viewController.setServerBasePath(path: path)
}

Medidas de seguridad

Capgo implementa seguridad de grado militar mediante cifrado de extremo a extremo, garantizando que las actualizaciones de tu app sean totalmente seguras desde el desarrollo hasta el despliegue. Nuestro sistema de cifrado va más allá de la firma code tradicional para ofrecer una verdadera seguridad zero-knowledge.

Arquitectura de cifrado de extremo a extremo

  1. Cifrado de extremo a extremo (E2EE): Cada bundle de actualización se cifra con AES-256-GCM antes de salir de tu entorno de desarrollo. Este cifrado de grado militar garantiza que las actualizaciones de tu app se mantengan privadas y seguras durante todo el proceso de entrega.

  2. Arquitectura Zero-Knowledge: A diferencia de otras soluciones OTA que solo firman las actualizaciones, Capgo emplea cifrado zero-knowledge real. Esto significa:

    • El contenido de la actualización se cifra antes del upload
    • Los servidores de Capgo solo almacenan datos cifrados
    • El descifrado solo ocurre en los dispositivos del usuario final
    • Ningún intermediario puede acceder al contenido de tu actualización
  3. Gestión de claves segura:

    • Las claves de cifrado se generan y almacenan de forma segura en tu entorno CI/CD
    • Las claves privadas nunca pasan por los servidores de Capgo
    • Cada versión de la app puede usar claves de cifrado únicas
    • Soporte para rotación de claves para mayor seguridad

Conoce más sobre nuestro sistema de cifrado en nuestra guía detallada: Cifrado de extremo a extremo en Capgo Live Updates

Proceso de seguridad de las actualizaciones

  1. Cifrado previo a la subida:

    • Las actualizaciones se cifran en tu pipeline de CI/CD
    • Cada archivo se cifra individualmente
    • Los metadatos también se cifran para total privacidad
  2. Almacenamiento seguro:

    • Los bundles cifrados se almacenan en la CDN global de Capgo
    • Ningún dato en texto plano toca nuestros servidores
    • Incluso ante una brecha de seguridad, los datos siguen seguros
  3. Entrega segura:

    • Las actualizaciones se entregan mediante canales cifrados
    • Cada instancia de la app valida la integridad del cifrado
    • Reintentos automáticos ante fallos de descifrado
  4. Seguridad en el lado del cliente:

    • Las actualizaciones se verifican antes de instalarse
    • Un fallo de descifrado activa un rollback automático
    • Almacenamiento seguro de claves en el storage protegido

Este enfoque integral de seguridad garantiza que tus actualizaciones estén protegidas contra:

  • Ataques Man-in-the-middle
  • Brechas en el servidor
  • Modificaciones no autorizadas
  • Ataques de replay
  • Alteración de contenido

Ciclo de vida de la Update

El proceso de actualización de Capgo está diseñado para ser automático por defecto. Así es como funciona:

1. Comprobación automática de actualizaciones

El plugin busca actualizaciones automáticamente en estas situaciones:

  • Al iniciar la app

Este comportamiento se controla mediante el autoUpdate ajuste:

// capacitor.config.json
{
  "plugins": {
    "CapacitorUpdater": {
      "autoUpdate": true // Enable automatic updates
    }
  }
}

También puedes comprobarlo manualmente con getLatest()

2. Descarga automática

Cuando se detecta una nueva versión, si autoUpdate está habilitado:

  1. La descarga comienza automáticamente
  2. El progreso se rastrea internamente
  3. Las descargas fallidas se reintentan al abrir la app
  4. Las descargas exitosas se guardan en el storage de la app

Puedes monitorear este proceso mediante eventos:

CapacitorUpdater.addListener('download', (info: DownloadEvent) => {
  console.log('Auto-download progress:', info.percent);
});

CapacitorUpdater.addListener('downloadComplete', (info: DownloadCompleteEvent) => {
  console.log('Auto-download complete:', info.bundle);
});

3. Instalación automática

El momento de la instalación depende de tu configuración:

// capacitor.config.json
{
  "plugins": {
    "CapacitorUpdater": {
      "autoUpdate": true,
      "directUpdate": false // install update on app backgrounding
      "resetWhenUpdate": true, // reset live updates on native update (true by default)
      "autoDeleteFailed": true, // Auto cleanup failed updates (true by default)
      "autoDeletePrevious": true // Auto cleanup old versions (true by default)
    }
  }
}

La instalación ocurre:

  • Inmediatamente si directUpdate es true
  • Al pasar la app a segundo plano si directUpdate es false
  • Auto-rollback si la instalación falla

El plugin también gestiona el almacenamiento automáticamente:

  • Elimina las actualizaciones fallidas si autoDeleteFailed es true
  • Limpia versiones antiguas si autoDeletePrevious es true

Retrasar actualizaciones

Puedes controlar cuándo se instalan las actualizaciones con condiciones de retraso:

// Delay until app goes to background
await CapacitorUpdater.setDelay({
  kind: 'background'
});

// Delay until specific date
await CapacitorUpdater.setDelay({
  kind: 'date',
  value: '2024-03-20T10:00:00.000Z'
});

// Delay until next native version
await CapacitorUpdater.setDelay({
  kind: 'nativeVersion'
});

// Multiple conditions
await CapacitorUpdater.setMultiDelay({
  delayConditions: [
    {
      kind: 'background'
    },
    {
      kind: 'date',
      value: '2024-03-20T10:00:00.000Z'
    }
  ]
});

Condiciones de retraso disponibles:

  • background: Instalar cuando la app pase a background
  • date: Instalar después de una fecha/hora específica
  • nativeVersion: Instalar tras la próxima actualización nativa
  • kill: Instalar tras cerrar la app

Esto es útil para:

  • Programar actualizaciones en horas de poco tráfico
  • Coordinar actualizaciones con la actividad del usuario
  • Garantiza una experiencia de actualización fluida
  • Evitar interrupciones durante tareas críticas

Estados de la actualización

Durante el proceso automático, los bundles pasan por estos estados:

  1. descargando: Descarga en curso
  2. pendiente: Descarga completada, esperando instalación
  3. éxito: Actualización instalada y activa
  4. error: Falló la actualización (activando auto-rollback)

Cumplimiento con las tiendas

Apple App Store ✅

Las Live Updates cumplen totalmente con las políticas de la Apple App Store. Según el Apple Developer Program License Agreement:

“Se puede descargar code interpretado en una aplicación, siempre y cuando dicho code: (a) no cambie el propósito principal de la aplicación mediante funciones o funcionalidades que sean inconsistentes con el propósito previsto y anunciado de la aplicación tal como se envió a la App Store, (b) no cree una tienda o escaparate para otros code o aplicaciones, y (c) no eluda la firma, el sandbox u otras funciones de seguridad del SO.”

Las actualizaciones de Capgo solo modifican la capa web respetando todos los límites de seguridad de la plataforma.

Google Play Store ✅

Live Updates cumple con las políticas de Google Play. La política de Abuso de Dispositivos y Redes establece específicamente:

“Esta restricción no se aplica a code que se ejecute en una máquina virtual o un intérprete donde cualquiera de ellos proporcione acceso indirecto a las APIs de Android (como JavaScript en una webview o navegador)”.

Como Capgo solo actualiza el contenido de la WebView, cumple con estas directrices permitidas.

Mejores prácticas

  1. Lanzamientos graduales: Despliega actualizaciones poco a poco
  2. Control de versiones: Rastrea todas las versiones desplegadas
  3. Soporte de Rollback: Recuperación rápida ante errores
  4. Actualizaciones Delta: Solo descarga los archivos modificados

Cuándo usar Live Updates

Ideal para:

  • Bug fixes
  • Mejoras de UI
  • Actualizaciones de contenido
  • Feature toggles

No apto para:

  • Cambios nativos en code
  • Actualizaciones de versión mayor
  • Parches de seguridad que requieran cambios nativos

Sigue leyendo: Cómo funcionan los Live Updates en Capgo

Si estás usando Cómo funcionan los Live Updates en Capgo para planificar el trabajo del plugin nativo, conéctalo con Directorio de plugins de Capgo para el flujo de trabajo de productos en el Capgo Plugin Directory, Plugins de Capacitor por Capgo para los detalles de implementación en Plugins de Capacitor por Capgo, Añadir o actualizar plugins para los detalles de implementación en Añadir o actualizar plugins, Alternativas a los plugins de Ionic Enterprise para el flujo de trabajo del producto en Alternativas a los plugins de Ionic Enterprise, y Capgo Native Builds para el flujo de trabajo en Capgo Native Builds.

Live Updates para apps de Capacitor

Si hay un bug en la capa web, publica el fix con Capgo en lugar de esperar días a la aprobación de la app store. Los usuarios reciben la actualización en segundo plano mientras los cambios nativos siguen el proceso de revisión normal.

Lo último de nuestro blog

Capgo te da los mejores insights para crear una app móvil realmente profesional.