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:
- Capa Web: Contiene los archivos HTML, CSS y JavaScript cargados en el WebView
- 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
-
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.
-
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
-
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
-
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
-
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
-
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
-
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:
- La descarga comienza automáticamente
- El progreso se rastrea internamente
- Las descargas fallidas se reintentan al abrir la app
- 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
directUpdatees true - Al pasar la app a segundo plano si
directUpdatees false - Auto-rollback si la instalación falla
El plugin también gestiona el almacenamiento automáticamente:
- Elimina las actualizaciones fallidas si
autoDeleteFailedes true - Limpia versiones antiguas si
autoDeletePreviouses 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:
- descargando: Descarga en curso
- pendiente: Descarga completada, esperando instalación
- éxito: Actualización instalada y activa
- 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
- Lanzamientos graduales: Despliega actualizaciones poco a poco
- Control de versiones: Rastrea todas las versiones desplegadas
- Soporte de Rollback: Recuperación rápida ante errores
- 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.