Pasar al contenido principal

Cómo funcionan las actualizaciones en vivo en Capgo

Exploración profunda de la implementación técnica de las actualizaciones en vivo en Capgo, comprendiendo cómo funciona en el interior para tanto iOS como Android.

Créditos del artículo

Martín Donadieu

Escritor

Valeria

Revisor

Jordan

Editor

Cómo funcionan las actualizaciones en vivo en Capgo

Entendiendo las actualizaciones en vivo en Capgo

Live updates are one of the most powerful features in Capacitor apps, allowing real-time updates without app store submissions. Let’s dive deep into how Capgo implements this functionality.

Conceptos básicos

Una aplicación de Capacitor consta de dos capas principales:

  1. Nivel web: Contiene archivos HTML, CSS y JavaScript cargados en el navegador de visualización
  2. Nivel nativo: Contiene code específico de plataforma (Java/Kotlin para Android, Swift para iOS)

El sistema de Capgo de live update 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 del Servidor en Capacitor

Capgo gestiona dos rutas críticas:

  • Ruta del Servidor Actual: Se refiere a archivos cargados actualmente en WebView
  • Ruta del Servidor SiguientePuntos a archivos que se cargarán en la próxima reinicio 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 para iOS

On iOS, los caminos 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 medidas de seguridad de grado militar a través de la 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 tradicional code de firma para proporcionar una verdadera seguridad de cero conocimiento.

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 a lo largo de todo el proceso de entrega.

  2. Arquitectura de Cero Conocimiento: A diferencia de otras soluciones de actualización OTA que solo firman actualizaciones, Capgo emplea un cifrado de cero conocimiento verdadero. Esto significa:

    • Contenido de actualizaciones cifrado antes de la subida
    • Los servidores de Capgo solo almacenan datos cifrados
    • La descifrado solo ocurre en dispositivos de usuario final
    • Ningún intermediario puede acceder a su contenido de actualización
  3. Administración de Claves Seguras:

    • Las claves de cifrado se generan y se almacenan de manera segura en tu 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
    • Compatibilidad con rotación de claves para una mayor seguridad

Conoce más sobre nuestro sistema de cifrado en nuestra guía detallada: Encriptación de Fin a Fin en Capgo Live Updates

Proceso de Seguridad de Actualizaciones

  1. Encriptación Pre-Subida:

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

    • Los paquetes cifrados se almacenan en el CDN global de Capgo
    • No hay datos de texto plano que lleguen a nuestros servidores
    • Aunque se produzca una brecha en el servidor, 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 de la 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
    • Secure key storage in app’s protected storage

Este enfoque de seguridad integral garantiza que las actualizaciones de su aplicación permanezcan protegidas contra:

  • ataques de hombre en el medio
  • Intrusiones en el servidor
  • modificaciones no autorizadas
  • ataques de replay
  • manipulación de contenido

Ciclo de Actualización

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

1. Verificación de Actualizaciones Automática

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

  • Cuando se inicia la aplicación

Este comportamiento se controla por 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. Descargas exitosas se almacenan en 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 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 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 es verdadero
  • Limpia versiones antiguas si autoDeletePrevious 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: Install when app goes to background
  • date: Instalar después de una fecha y hora específica
  • nativeVersion: Install after next native update
  • kill: Instalar después de que la aplicación sea cerrada

Esto es útil para:

  • Programar actualizaciones durante horas de baja demanda
  • Coordinando actualizaciones con la actividad del usuario
  • Ensuring smooth update experience
  • Prevenir interrupciones durante tareas críticas

Estados de Actualización

Durante el proceso automático, los conjuntos de actualizaciones pasan por estos estados:

  1. descargando: Descargando en curso
  2. pendiente: Descarga completa, esperando a la instalación
  3. éxito: Actualización instalada y activa
  4. error: Actualizado con falla (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 del Apple App Store. Según lo establecido en el Acuerdo de Licencia del Programa de Desarrolladores de Apple:

“Los code interpretados pueden descargarse en una Aplicación siempre y cuando tales code: (a) no cambien el propósito principal de la Aplicación mediante la provisión de características o funcionalidades que sean inconsistentes con el propósito y la publicidad previstos de la Aplicación tal como se presentó a la Tienda de Aplicaciones, (b) no creen una tienda o una tienda de aplicaciones para otras code o aplicaciones, y (c) no eviten la firma, el sandbox o otras características de seguridad del sistema operativo.”

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

Tienda de Aplicaciones de Google ✅

Actualizaciones en vivo cumplen con las políticas de Google Play. La política de abuso de dispositivo y red especifica:

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

Puesto 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: Despliega actualizaciones gradualmente
  2. Control de versiones: Rastrea todas las versiones desplegadas
  3. Apoyo de retroceso: Recuperación rápida de problemas
  4. Actualizaciones delta: Solo descargar archivos modificados

Cuándo usar actualizaciones en vivo

Perfecto para:

  • Bug fixes
  • Mejoras de interfaz de usuario
  • Actualizaciones de contenido
  • Botones de características

No apto para:

  • Cambios nativos de code
  • Actualizaciones de versión mayor
  • Actualizaciones de seguridad que requieren cambios nativos

Keep going from How Live Updates Work in Capgo

Si estás utilizando Cómo funcionan las actualizaciones en vivo en Capgo para planificar el trabajo de plugins nativos, conecta con Capgo Directorio de Plugins para el flujo de trabajo del producto en Capgo Directorio de Plugins Capacitor Plugins por Capgo para los detalles de implementación en Capacitor Plugins por Capgo Agregar o Actualizar Plugins para los detalles de implementación en Agregar o Actualizar Plugins Alternativas de Plugins de Ionic Enterprise para el flujo de trabajo del producto en Ionic Enterprise Plugin Alternatives, y Capgo Compilaciones Nativas para el flujo de trabajo del producto en Capgo Compilaciones Nativas.

Actualizaciones en vivo para aplicaciones Capacitor

Cuando haya un error en la capa web, 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 obtienen la actualización en segundo plano mientras que los cambios nativos siguen en el camino de revisión normal.

soporte humano de Martin

Iniciar Ahora

Últimas noticias de nuestro Blog

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