Saltar al contenido principal

Cómo funcionan las actualizaciones en vivo en Capgo

Explora en profundidad la implementación técnica de las actualizaciones en vivo en Capgo, comprendiendo cómo funciona detrás de escena tanto para iOS como para Android.

Martin Donadieu

Martin Donadieu

Gerente de Contenido

Cómo funcionan las actualizaciones en vivo en Capgo

Entendiendo las actualizaciones en vivo en Capgo

Las actualizaciones en vivo son una de las características más potentes en las aplicaciones de Capacitor, permitiendo actualizaciones en tiempo real sin necesidad de presentarlas en las tiendas de aplicaciones. Vamos a sumergirnos en cómo Capgo implementa esta funcionalidad.

Conceptos básicos

Una aplicación Capacitor consta de dos capas principales:

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

Capgo’s sistema de actualización en vivo funciona reemplazando la capa web en tiempo de ejecución, ya que estos archivos no se compilan en el binario de la aplicación.

Implementación técnica

Rutas de servidor en Capacitor

Capgo gestiona dos rutas críticas:

  • Ruta de servidor actual: Se refiere a los archivos actualmente cargados en la vista de WebView
  • Ruta del Servidor Siguiente: Se refiere a archivos que se cargarán en la próxima reiniciación de la aplicación

Implementación de Android

En Android, Capgo gestiona rutas a través de:

// 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 de iOS

En iOS, las rutas se gestionan a través de:

// 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 a través de cifrado de extremo a extremo, asegurando que las actualizaciones de la aplicación permanezcan completamente seguras desde el desarrollo hasta la implementación. Nuestro sistema de cifrado va más allá del cifrado tradicional code de firma para proporcionar seguridad de cero conocimiento verdadera.

Arquitectura de Cifrado de Extremo a Extremo

  1. Cifrado de Extremo a Extremo (E2EE): Cada paquete de actualización se cifra utilizando cifrado AES-256-GCM antes de dejar el entorno de desarrollo. Este cifrado de grado militar asegura que las actualizaciones de la aplicación permanezcan completamente privadas y seguras durante todo el proceso de entrega.

  2. Arquitectura de Cero Conocimiento: A diferencia de otras soluciones de actualizaciones OTA que solo firman actualizaciones, Capgo emplea verdaderas cifraturas de conocimiento cero. Esto significa:

    • Los contenidos de actualización están cifrados antes de subir
    • Capgo solo almacena datos cifrados en sus servidores
    • La descifrado solo ocurre en dispositivos de usuarios finales
    • Ningún intermediario puede acceder a su contenido de actualización
  3. Gestión de Claves Seguras:

    • Las claves de cifrado se generan y se almacenan de manera segura en su entorno CI/CD
    • Las claves privadas nunca tocan los servidores de Capgo
    • Cada versión de la aplicación puede utilizar claves de cifrado únicas
    • Soporte de rotación de claves para una mayor seguridad

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

Proceso de Actualización de Seguridad

  1. Cifrado Pre-Subida:

    • Las actualizaciones se cifran en tu pipeline de CI/CD
    • Cada archivo se cifra individualmente
    • El metadato también se cifra para una privacidad completa
  2. Almacenamiento Seguro:

    • Los bundles cifrados se almacenan en el CDN global de Capgo
    • Ningún dato de texto plano nunca llega a nuestros servidores
    • Incluso en caso de una brecha en los servidores, los datos permanecen seguros
  3. Entrega Segura:

    • Las actualizaciones se entregan a través de canales cifrados
    • Cada instancia de la aplicación valida la integridad del cifrado
    • Mecanismos de reintento automático para la desifrado fallida
  4. Seguridad en el lado del cliente:

    • Las actualizaciones se verifican antes de la instalación
    • La desifrado fallida desencadena un rollback automático
    • Almacenamiento de claves seguro en el almacenamiento protegido de la aplicación

Esta seguridad integral garantiza que las actualizaciones de tu aplicación permanezcan protegidas contra:

  • Ataques de hombre en el medio
  • Intrusiones en el lado del servidor
  • Modificaciones no autorizadas
  • Ataques de replay
  • Manipulación de contenido

Ciclo de vida de la actualización

El proceso de actualización de Capgo está diseñado para ser automático por defecto. Aquí's cómo funciona el proceso automático:

1. Verificación de Actualizaciones Automáticas

El plugin verifica automáticamente las actualizaciones en las siguientes situaciones:

  • Cuando se inicia la aplicación

Este comportamiento se controla mediante la autoUpdate configuración:

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

También puedes verificar manualmente con getLatest()

2. Descarga Automática

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

  1. Comienza la descarga automáticamente
  2. El progreso se sigue internamente
  3. Descargas fallidas se reintentan en cada apertura de la aplicación
  4. Las descargas exitosas se almacenan en el almacenamiento de la aplicación

Puedes monitorear este proceso a través de 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 tiempo de 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 verdadero
  • En la próxima apagado de fondo de la aplicación si directUpdate es falso
  • Auto-rollback si la instalación falla

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

  • Elimina actualizaciones fallidas si autoDeleteFailed __CAPGO_KEEP_0__ es verdadero
  • Limpia versiones antiguas si autoDeletePrevious __CAPGO_KEEP_0__ es verdadero

Retrasar Actualizaciones

Puedes controlar cuándo se instalan las actualizaciones utilizando 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 aplicación se va al fondo
  • date: Instalar después de una fecha/hora específica
  • nativeVersion: Instale después de la próxima actualización nativa
  • kill: Instale después de que la aplicación sea cerrada

Esto es útil para:

  • Programar actualizaciones durante horas de baja demanda
  • Coordinar actualizaciones con la actividad del usuario
  • Asegurar una experiencia de actualización suave
  • Prevenir interrupciones durante tareas críticas

Estados de actualización

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

  1. descargando: Descargando en progreso
  2. pendiente: Descarga completa, esperando a instalar
  3. éxito: Actualización instalada y activa
  4. : Actualización fallida (desencadena el auto-rollback)Cumplimiento de la Tienda

Tienda de Aplicaciones de Apple ✅

Las actualizaciones en vivo están plenamente conformes con las políticas de la Tienda de Aplicaciones de Apple. Según el Acuerdo de Licencia del Programa de Desarrolladores de Apple:

“Los __CAPGO_KEEP_0__ interpretados pueden descargarse en una Aplicación, pero solo mientras tal __CAPGO_KEEP_1__: (a) no cambie el propósito principal de la Aplicación proporcionando características o funcionalidad que sean inconsistentes con el propósito intencionado y anunciado de la Aplicación tal como se presentó a la Tienda de Aplicaciones, (b) no cree una tienda o una tienda de aplicaciones para otros __CAPGO_KEEP_2__ o aplicaciones, y (c) no evite la firma, el sandbox o otras características de seguridad del sistema operativo.”

“Interpreted code may be downloaded to an Application but only so long as such code: (a) does not change the primary purpose of the Application by providing features or functionality that are inconsistent with the intended and advertised purpose of the Application as submitted to the App Store, (b) does not create a store or storefront for other code or applications, and (c) does not bypass signing, sandbox, or other security features of the OS.”

Capgo updates only modify the web layer while respecting all platform security boundaries.

Store Compliance

Actualizaciones en vivo se ajustan a las políticas de Google Play. La política de abuso de dispositivos y redes especifica:

“Esta restricción no se aplica a code que se ejecuta en una máquina virtual o un intérprete donde uno de ellos proporciona acceso indirecto a las API de Android (como JavaScript en una vista de navegador o navegador).”

Dado que Capgo solo actualiza el contenido de la vista de navegador, se ajusta a estas directrices permitidas.

Prácticas recomendadas

  1. Implementación en fases: Despliegue de actualizaciones gradualmente
  2. Control de versiones: Rastrear todas las versiones desplegadas
  3. Soporte de retroceso: Recuperación rápida de problemas
  4. Actualizaciones delta: Solo descargar archivos modificados

Cuándo usar actualizaciones en vivo

Ideal para:

  • Correcciones de errores
  • Mejoras de interfaz de usuario
  • Actualizaciones de contenido
  • Trazas de características

No apto para:

  • Cambios nativos code
  • Actualizaciones de versión mayor
  • Parches de seguridad que requieren cambios nativos
Actualizaciones en Vivo para aplicaciones Capacitor

Cuando un error en la capa web está activo, envíe la corrección a través de Capgo en lugar de esperar días para la aprobación de la tienda de aplicaciones. Los usuarios reciben la actualización en segundo plano mientras los cambios nativos siguen en el camino de revisión normal.

Comienza ahora

Últimas noticias de nuestro Blog

Capgo te da las mejores perspectivas que necesitas para crear una aplicación móvil verdaderamente profesional.