Entender Live Updates en Capgo
live updates de Capacitor (OTA) reemplaza el bundle web dentro de tu app para que puedas publicar cambios en JavaScript, HTML y CSS sin necesidad de un nuevo binario de la tienda. Las actualizaciones en vivo son una de las funciones más potentes en las apps de Capacitor, permitiendo actualizaciones en tiempo real sin enviarlas a la tienda de aplicaciones. Vamos a profundizar en cómo Capgo implementa esta funcionalidad.
Conceptos clave
Una app de Capacitor consta de dos capas principales:
- Capa web: Contiene archivos HTML, CSS y JavaScript que se cargan en el WebView
- Capa nativa: Contiene code específico 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
Rutas de servidor 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 nivel 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 nivel militar garantiza que las actualizaciones de tu app se mantengan privadas y seguras durante todo el proceso de entrega.
-
Arquitectura de conocimiento cero: A diferencia de otras soluciones de actualización OTA que solo firman las actualizaciones, Capgo emplea cifrado de conocimiento cero real. Esto significa:
- El contenido de la actualización se cifra antes de subirse
- Los servidores de Capgo solo almacenan datos cifrados
- Decryption only happens on end-user devices
- Ningún intermediario puede acceder al contenido de tu actualización
-
Gestión segura de claves:
- Las claves de cifrado se generan y almacenan de forma segura en tu entorno CI/CD
- Las claves privadas nunca tocan los servidores de Capgo
- Cada versión de la app puede usar claves de cifrado únicas
- Soporte para rotación de claves para una seguridad mejorada
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 una privacidad total
-
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 en el servidor, 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 del lado del cliente:
- Las actualizaciones se verifican antes de instalarse
- El fallo de descifrado activa un rollback automático
- Secure key storage in app’s protected storage
Este enfoque integral de seguridad garantiza que tus actualizaciones sigan protegidas contra:
- Ataques man-in-the-middle
- Brechas del lado del servidor
- Modificaciones no autorizadas
- Ataques de replay
- Alteración de contenido
Ciclo de vida de actualizaciones
El proceso de actualización de Capgo está diseñado para ser automático por defecto. Así funciona el proceso automático:
1. Verificación automática de actualizaciones
El plugin busca actualizaciones automáticamente en estas situaciones:
- Cuando la app se inicia
Este comportamiento se controla mediante la autoUpdate configuración:
// capacitor.config.json
{
"plugins": {
"CapacitorUpdater": {
"autoUpdate": true // Enable automatic updates
}
}
}
También puedes verificarlo manualmente con getLatest()
2. Descarga automática
Cuando se detecta una nueva versión, si autoUpdate está activado:
- 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 almacenamiento 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 las 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 pasa a segundo plano
- date: Instalar después de una fecha/hora específica
- nativeVersion: Instalar tras la próxima actualización nativa
- kill: Instalar después de que la app se cierre
Esto es útil para:
- Programar actualizaciones en horas valle
- Coordinar actualizaciones con la actividad del usuario
- Ensuring smooth update experience
- Evitar interrupciones durante tareas críticas
Estados de actualización
Durante el proceso automático, los bundles transitan por estos estados:
- descargando: Descarga en curso
- pendiente: Descarga completada, esperando instalación
- correcto: Actualización instalada y activa
- error: La actualización falló (dispara rollback automático)
Cumplimiento con las tiendas
Apple App Store ✅
Live Updates cumple totalmente con las políticas de la App Store de Apple. Como se indica en el Acuerdo de Licencia del Programa de Desarrolladores de Apple:
“El code interpretado puede descargarse en una Aplicación, pero solo mientras dicho code: (a) no cambie el propósito principal de la Aplicación al ofrecer funciones o funcionalidad que no sean coherentes 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 el firmado, 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 los dos proporcione acceso indirecto a las APIs de Android (como JavaScript en un WebView o navegador)”.
Como Capgo solo actualiza el contenido de la WebView, cumple con estas directrices permitidas.
Buenas prácticas
- Despliegues graduales: Despliega actualizaciones gradualmente
- Control de versiones: Rastrea todas las versiones desplegadas
- Soporte de rollback: Recuperación rápida ante problemas
- 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 de code
- Actualizaciones de versión mayor
- Parches de seguridad que requieren cambios nativos
Sigue leyendo desde Cómo funcionan las Live Updates en Capgo
Si estás usando Cómo funcionan los Live Updates en Capgo para planificar el trabajo con plugins nativos, conéctalo con Directorio de plugins de Capgo para el flujo de trabajo del producto en Capgo Plugin Directory, Plugins de Capacitor por Capgo para el detalle de implementación en los Plugins de Capacitor por Capgo, Añadir o actualizar plugins para el detalle de implementación en Agregar o actualizar plugins, Alternativas a plugins de Ionic Enterprise para el flujo de trabajo en Alternativas a plugins de Ionic Enterprise, y Native Builds de Capgo para el flujo de trabajo del producto en Capgo Native Builds.