__CAPGO_KEEP_0__ - Actualizaciones en vivo para aplicaciones __CAPGO_KEEP_1__

Objetivos de versión

de manera similar al enfoque de Ionic AppFlow similar a la forma en que Ionic AppFlow lo hace. Esto garantiza un manejo de actualizaciones simplificado y una implementación más rápida, mientras se evitan problemas de compatibilidad.

Capgo’s version targeting system allows you to:

  • Evita cambios que rompan la aplicación Automáticamente entrega actualizaciones compatibles
  • a los usuarios según su versión nativa de la aplicación evitar versiones de aplicaciones incompatibles
  • Administrar múltiples versiones de aplicaciones simultáneamente sin lógica compleja
  • Implementar actualizaciones de manera fluida a segmentos de usuarios específicos

¿Por qué la versión de destino es importante (sobre todo para usuarios de AppFlow)?

Sección titulada “¿Por qué la versión de destino es importante (sobre todo para usuarios de AppFlow)?”

Si estás familiarizado con Ionic AppFlow, sabrás cuán crítico es asegurarse de que los usuarios reciban solo actualizaciones compatibles. AppFlow automatizó la coincidencia de paquetes de actualizaciones en vivo con versiones nativas de aplicaciones, evitando que se entregara JavaScript incompatibilidad a versiones nativas antiguas code.

Capgo ofrece las mismas garantías de seguridad, con características adicionales:

  • Más control granular sobre la coincidencia de versiones
  • Múltiples estrategias (canales, semver, restricciones nativas)
  • Mejor visibilidad en la distribución de versiones
  • API y CLI controlan junto con la gestión de la consola

Esta aproximación es particularmente útil cuando:

  • Tienes usuarios en diferentes versiones principales de tu aplicación (por ejemplo, v1.x, v2.x, v3.x)
  • Necesitas mantener la compatibilidad hacia atrás mientras se implementan cambios rotos
  • Quieres evitar que los paquetes más nuevos rompan los code nativos más antiguos
  • Estás migrando a los usuarios gradualmente de una versión a otra
  • Estás migrando desde AppFlow y quieres mantener la misma seguridad de actualización

Capgo utiliza un enfoque multiestratificado para emparejar a los usuarios con actualizaciones compatibles:

  1. Restricciones de Versión Nativa: Evita que los paquetes se entreguen a versiones nativas incompatibles
  2. Ruteo Basado en Canales: Ruta diferentes versiones de la aplicación a diferentes canales de actualización
  3. Controles de Versionado Semántico: Bloquea automáticamente actualizaciones a lo largo de fronteras de versión mayor/minor/patch
  4. Sobrescrituras a Nivel de Dispositivo: Dirige a dispositivos o grupos de usuarios específicos
graph TD
A[User Opens App] --> B{Check Device Override}
B -->|Override Set| C[Use Override Channel]
B -->|No Override| D{Check defaultChannel in App}
D -->|Has defaultChannel| E[Use App's defaultChannel]
D -->|No defaultChannel| F[Use Cloud Default Channel]
C --> G{Check Version Constraints}
E --> G
F --> G
G -->|Compatible| H[Deliver Update]
G -->|Incompatible| I[Skip Update]

Estrategia 1: Ruta de versión basada en canales

Sección titulada “Estrategia 1: Ruta de versión basada en canales”

Esta es la enfoque recomendado para gestionar cambios importantes y actualizaciones de versión mayor. Es similar al modelo de entrega de AppFlow.

  • App v1.x (100,000 usuarios) → production canales
  • App v2.x (50,000 usuarios con cambios de ruptura) → v2 canal
  • App v3.x (10,000 usuarios beta) → v3 canal

Paso 1: Configurar canales para cada versión mayor

Copiar a portapapeles
// capacitor.config.ts for version 1.x builds
import { CapacitorConfig } from '@capacitor/cli';
const config: CapacitorConfig = {
appId: 'com.example.app',
appName: 'Example App',
plugins: {
CapacitorUpdater: {
autoUpdate: true,
defaultChannel: 'production', // or omit for default
}
}
};
export default config;
// capacitor.config.ts for version 2.x builds
const config: CapacitorConfig = {
appId: 'com.example.app',
appName: 'Example App',
plugins: {
CapacitorUpdater: {
autoUpdate: true,
defaultChannel: 'v2', // Routes v2 users automatically
}
}
};
// capacitor.config.ts for version 3.x builds
const config: CapacitorConfig = {
appId: 'com.example.app',
appName: 'Example App',
plugins: {
CapacitorUpdater: {
autoUpdate: true,
defaultChannel: 'v3', // Routes v3 users automatically
}
}
};
Ventana de terminal
# Create channels for each major version
npx @capgo/cli channel create production
npx @capgo/cli channel create v2
npx @capgo/cli channel create v3
# Enable self-assignment so apps can switch channels
npx @capgo/cli channel set production --self-assign
npx @capgo/cli channel set v2 --self-assign
npx @capgo/cli channel set v3 --self-assign
Ventana de terminal
# For v1.x users (from v1-maintenance branch)
git checkout v1-maintenance
npm run build
npx @capgo/cli bundle upload --channel production
# For v2.x users (from v2-maintenance or main branch)
git checkout main
npm run build
npx @capgo/cli bundle upload --channel v2
# For v3.x users (from beta/v3 branch)
git checkout beta
npm run build
npx @capgo/cli bundle upload --channel v3
  • Cero code cambios - La ruta de canal sucede automáticamente
  • Separación clara - Cada versión tiene su propio pipeline de actualizaciones
  • Diseño flexible - Se pueden enviar actualizaciones a grupos de versiones específicas
  • Implementación segura - Los cambios disruptivos nunca llegan a versiones incompatibles

Estrategia 2: Controles de versionamiento semántico

Sección titulada “Estrategia 2: Controles de versionamiento semántico”

Use Capgo’s built-in semantic versioning controls to prevent updates across version boundaries.

Deshabilitar actualizaciones automáticas entre versiones principales.

Sección titulada “Deshabilitar actualizaciones automáticas entre versiones principales”.
Ventana de terminal.
# Create a channel that blocks major version updates
npx @capgo/cli channel create stable --disable-auto-update major

Esta configuración significa:

  • Los usuarios con la versión de la aplicación 1.2.3 recibirán actualizaciones hasta 1.9.9
  • Los usuarios no recibirán la versión automáticamente. 2.0.0 No se realizarán actualizaciones automáticas para versiones mayores.
  • Evita que los cambios de ruptura lleguen a versiones nativas code
Ventana de terminal
# Block minor version updates (1.2.x won't get 1.3.0)
npx @capgo/cli channel set stable --disable-auto-update minor
# Block patch updates (1.2.3 won't get 1.2.4)
npx @capgo/cli channel set stable --disable-auto-update patch
# Allow all updates
npx @capgo/cli channel set stable --disable-auto-update none

Formato

Cuando subas un paquete, puedes especificar una versión nativa mínima:

Ventana de terminal
# This bundle requires native version 2.0.0 or higher
npx @capgo/cli bundle upload \
--channel production \
--native-version "2.0.0"
  1. Necesario Nuevo Plugin Nativo

    Ventana de terminal
    # Bundle needs Camera plugin added in v2.0.0
    npx @capgo/cli bundle upload --native-version "2.0.0"
  2. Cambios nativos de API

    Ventana de terminal
    # Bundle uses new Capacitor 6 APIs
    npx @capgo/cli bundle upload --native-version "3.0.0"
  3. Migración gradual

    Ventana de terminal
    # Test bundle only on latest native version
    npx @capgo/cli bundle upload \
    --channel beta \
    --native-version "2.5.0"

Evitar que los usuarios reciben paquetes más antiguos que su versión nativa actual.

En la consola de Capgo:

  1. Vaya a Canales → Seleccione su canal
  2. Habilitar “Deshabilitar la actualización automática nativa”
  3. Guardar cambios

O a través de CLI:

Ventana de terminal
npx @capgo/cli channel set production --disable-downgrade
  • Dispositivo del usuario: Versión nativa 1.2.5
  • Paquete de canal: Versión 1.2.3
  • Resultado: La actualización está bloqueada (sería una actualización a una versión anterior)

Esto es útil cuando:

  • Los usuarios instalaron manualmente una versión más reciente desde la tienda de aplicaciones
  • Necesita asegurarse de que los usuarios siempre tengan las últimas actualizaciones de seguridad
  • Quiere prevenir errores de regresión

Estrategia 5: Targetización a nivel de dispositivo

Sección titulada “Estrategia 5: Targetización a nivel de dispositivo”

Sobreescribir la asignación de canal para dispositivos o grupos de usuarios específicos.

Forzar una versión específica para pruebas

Sección titulada “Forzar Versión Específica para Pruebas”
import { CapacitorUpdater } from '@capgo/capacitor-updater'
// Force beta testers to use v3 channel
async function assignBetaTesters() {
const deviceId = await CapacitorUpdater.getDeviceId()
// Check if user is beta tester
if (isBetaTester(userId)) {
await CapacitorUpdater.setChannel({ channel: 'v3' })
}
}

En el panel de control Capgo:

  1. Ir a Dispositivos → Encontrar dispositivo
  2. Hacer clic Establecer canal o Establecer versión
  3. Sobreescribir con una versión específica de canal o paquete
  4. El dispositivo recibirá actualizaciones desde la fuente sobrescrita

1. Configuración inicial (App v1.0.0)

Ventana de terminal

Copiar a portapapeles
Section titled “Complete AppFlow-Style Workflow”
# Create production channel with semver controls
npx @capgo/cli channel create production \
--disable-auto-update major \
--disable-downgrade
capacitor.config.ts
const config: CapacitorConfig = {
plugins: {
CapacitorUpdater: {
autoUpdate: true,
defaultChannel: 'production',
}
}
};
Ventana de terminal
# Create v2 channel for new version
npx @capgo/cli channel create v2 \
--disable-auto-update major \
--disable-downgrade \
--self-assign
# Create git branch for v1 maintenance
git checkout -b v1-maintenance
git push origin v1-maintenance
// capacitor.config.ts for v2.0.0
const config: CapacitorConfig = {
plugins: {
CapacitorUpdater: {
autoUpdate: true,
defaultChannel: 'v2', // New users get v2 channel
}
}
};
Ventana de terminal
# Update v1.x users (bug fix)
git checkout v1-maintenance
# Make changes
npx @capgo/cli bundle upload \
--channel production \
--native-version "1.0.0"
# Update v2.x users (new feature)
git checkout main
# Make changes
npx @capgo/cli bundle upload \
--channel v2 \
--native-version "2.0.0"

4. Monitorear distribución de versiones

Sección titulada “4. Distribución de versiones”

Utilice el Capgo panel para seguir:

  • ¿Cuántos usuarios están en v1 vs v2
  • Tasas de adopción de paquetes por versión
  • Errores o fallas por versión

Una vez que el uso de v1 caiga por debajo del umbral:

Ventana de terminal
# Stop uploading to production channel
# Optional: Delete v1 maintenance branch
git branch -d v1-maintenance
# Move all remaining users to default
# (They'll need to update via app store)

Cuando existen múltiples configuraciones de canales, Capgo utiliza este orden de precedencia:

  1. Sobrescrito de dispositivo (Panel o API) - Mayor prioridad
  2. Sobrescrito de Cloud a través de setChannel() llamada
  3. canales predeterminados en capacitor.config.ts
  4. Canales predeterminados (Configuración de Cloud) - Menor prioridad

1. Establecer siempre defaultChannel para versiones principales

Sección titulada “1. Establecer siempre defaultChannel para versiones principales”
// ✅ Good: Each major version has explicit channel
// v1.x → production
// v2.x → v2
// v3.x → v3
// ❌ Bad: Relying on dynamic channel switching
// All versions → production, switch manually
ventana de terminal
# ✅ Good
1.0.0 1.0.1 1.1.0 2.0.0
# ❌ Bad
1.0 1.1 2 2.5
ventana de terminal
# ✅ Good: Separate branches per major version
main (v3.x)
v2-maintenance (v2.x)
v1-maintenance (v1.x)
# ❌ Bad: Single branch for all versions
ventana de terminal
# Test on beta channel first
npx @capgo/cli bundle upload --channel beta
# Monitor for issues, then promote to production
npx @capgo/cli bundle upload --channel production

Revisa regularmente tu panel de control:

  • ¿Los usuarios están actualizando a versiones nativas más recientes?
  • ¿Las versiones antiguas siguen recibiendo un alto tráfico?
  • ¿Deberías deprecar los canales antiguos?

Para equipos que están migrando desde Ionic AppFlow, aquí está cómo la versión de Capgo se compara con respecto a la versión:

CaracterísticaIonic AppFlowCapgo
Ruteo basado en versiónBasado automáticamente en la versión nativaBasado automáticamente a través de defaultChannel + varias estrategias
Versión semánticaSoporte básicoAvanzado con --disable-auto-update (mayor/minor/patch)
Restricciones de versión nativaConfiguración manual en la consola de AppFlowIntegrado --native-version bandera en CLI
Gestión de canalesInterfaz web + CLIInterfaz web + CLI + API
Sobreescribir dispositivosControl limitado a nivel de dispositivoControl total a través de la consola/API
Prevención de downgrade automáticoSí a través de --disable-downgrade
Mantenimiento de varias versionesGestión de rama y canal manualAutomatizado con prioridad de canal
AutohospedajeNoSí (control completo)
Análisis de versionesBásicoMétricas detalladas por versión

Verifique lo siguiente:

  1. Asignación de Canal: Verifique que el dispositivo está en el canal correcto

    const channel = await CapacitorUpdater.getChannel()
    console.log('Current channel:', channel)
  2. Restricciones de Versión: Verifique si el paquete tiene requisitos de versión nativa

    • Panel de control → Paquetes → Verifique la columna “Versión Nativa”
  3. Configuración de Semver: Verifique la configuración del canal disable-auto-update __CAPGO_KEEP_0__

    Ventana de terminal
    npx @capgo/cli channel list
  4. Override de dispositivo: Verificar si el dispositivo tiene override manual

    • Panel de control → Dispositivos → Buscar dispositivo → Verificar canal/versión
  1. Revisar defaultChannel: Asegurarse de que el canal sea correcto en capacitor.config.ts
  2. Verificar carga de paquete: Verificar si el paquete se subió al canal deseado
  3. Inspeccionar versión nativa: Confirm --native-version se utilizó correctamente

Cambios importantes que afectan versiones antiguas

Sección titulada “Cambios importantes que afectan versiones antiguas”
  1. Solución inmediata: Sobreescribir dispositivos afectados para paquete seguro
    • Panel de control → Dispositivos → Selección en bloque → Establecer Versión
  2. Solución a largo plazo: Crear canales versionados y mantener ramas separadas
  3. Prevención: Siempre probar actualizaciones en dispositivos representativos antes de la implementación

Si estás migrando desde Ionic AppFlow, la versión objetivo funciona muy de manera similar en Capgo, con una mayor flexibilidad:

Concepto de AppFlowCapgo EquivalenteNotas
Canales de DespliegueCapgo CanalMismo concepto, más potente
Bloqueo de Versión Nativa--native-version flagMás control granular
Prioridad de CanalPrecedencia de Canal (sobreescribir → nube → predeterminado)Precedencia más transparente
Destino de DespliegueCanal + semver controlaDisponibles varias estrategias
Canal de Producciónproduction canal (o cualquier nombre)Nombres flexibles
Despliegue basado en GitCLI carga de paquete desde ramaMismo flujo de trabajo
Compatibilidad automáticadefaultChannel Restricciones de versión +Mejorado con múltiples estrategias
  1. Más control: Capgo te da múltiples estrategias (canales, semver, versión nativa) que se pueden combinar
  2. Visibilidad mejorada: La consola muestra la distribución de versiones y problemas de compatibilidad
  3. API Acceso: Control completo programático sobre la versión objetivo
  4. Autoalojamiento: Opción para ejecutar tu propio servidor de actualizaciones con la misma lógica de versión
  1. Asigna tus canales de AppFlow a los canales Capgo (usualmente 1:1)
  2. Establece defaultChannel en capacitor.config.ts para cada versión mayor
  3. Configura reglas de semver si deseas bloqueo automático en límites de versión
  4. Subir conjuntos de versiones específicas utilizando --native-version flag
  5. Monitorear distribución de versiones en la consola de Capgo
// Gradually migrate v1 users to v2
async function migrateUsers() {
const deviceId = await CapacitorUpdater.getDeviceId()
const rolloutPercentage = 10 // Start with 10%
// Hash device ID to get deterministic percentage
const hash = hashCode(deviceId) % 100
if (hash < rolloutPercentage) {
// User is in rollout group - migrate to v2
await CapacitorUpdater.setChannel({ channel: 'v2' })
}
}
// Enable features based on native version
async function checkFeatureAvailability() {
const info = await CapacitorUpdater.getDeviceId()
const nativeVersion = info.nativeVersion
if (compareVersions(nativeVersion, '2.0.0') >= 0) {
// Enable features requiring v2.0.0+
enableNewCameraFeature()
}
}
// Run A/B tests within same native version
async function assignABTest() {
const nativeVersion = await getNativeVersion()
if (nativeVersion.startsWith('2.')) {
// Only A/B test on v2 users
const variant = Math.random() < 0.5 ? 'v2-test-a' : 'v2-test-b'
await CapacitorUpdater.setChannel({ channel: variant })
}
}

Capgo ofrece varias estrategias para la entrega de actualizaciones específicas de versión:

  1. Ruta basada en canales: Separación de versiones automática mediante defaultChannel
  2. Versión semántica: Evita actualizaciones a través de fronteras de versión mayor/minor/patch
  3. Restricciones de versión nativa: Requiere la versión mínima nativa para paquetes
  4. Prevención de descenso automático: Nunca entrega paquetes más antiguos a versiones nativas más nuevas
  5. Sobrescrituras de dispositivo: Control manual para pruebas y targeting

Al combinar estas estrategias, puedes lograr la entrega automática de actualizaciones con estilo de AppFlow, con aún más flexibilidad y control. Elige el enfoque que mejor se adapte al flujo de versión y despliegue de tu aplicación.

Para obtener más detalles sobre características específicas: