Saltar al contenido

Configuración de versiones

Esta guía explica cómo entregar automáticamente la última versión compatible del paquete a los usuarios en función de la versión nativa de su aplicación. de manera similar a la aproximación de Ionic AppFlowEsto garantiza una gestión simplificada de actualizaciones y lanzamientos más rápidos, mientras se evitan problemas de compatibilidad.

El sistema de versión de Capgo te permite:

  • Entregar actualizaciones compatibles automáticamente a los usuarios según su versión de la aplicación nativa
  • Prevenir cambios que rompan la aplicación que lleguen a versiones de aplicaciones incompatibles
  • Gestionar múltiples versiones de aplicaciones de manera simultánea 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, sabes cuán crítico es asegurarte de que los usuarios reciben solo actualizaciones compatibles. AppFlow automatizó la coincidencia de paquetes de actualizaciones en vivo con versiones nativas de aplicaciones, evitando que se entregara JavaScript incompatible a versiones nativas más antiguas code.

Capgo proporciona las mismas garantías de seguridadcon características adicionales:

  • Mayor control sobre la coincidencia de versiones
  • Strategias múltiples (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 disruptivos
  • Quieres evitar que los paquetes más nuevos rompan las versiones nativas code más antiguas
  • 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

How It Works

Cómo Funciona

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 Canal: Ruta diferentes versiones de la aplicación a diferentes canales de actualización
  3. Controles de Versión Semántica: Bloquea automáticamente actualizaciones a través de fronteras de mayor/menor/patch
  4. Overscroll de Nivel de Dispositivo: Dirige actualizaciones 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 local plugin channel}
D -->|setChannel value| E[Use local setChannel channel]
D -->|No local channel| F{Check defaultChannel in App}
F -->|Has defaultChannel| G[Use App's defaultChannel]
F -->|No defaultChannel| H[Use Cloud Default Channel]
C --> I{Check Version Constraints}
E --> I
G --> I
H --> I
I -->|Compatible| J[Deliver Update]
I -->|Incompatible| K[Skip Update]

Estrategia 1: Ruteo de versiones basado en canales

Sección titulada “Estrategia 1: Ruteo de versiones basado en canales”

Esta es la enfoque recomendado para gestionar cambios importantes y actualizaciones de versiones principales. Es similar al modelo de entrega de AppFlow.

  • Aplicación 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: Configure los canales para cada versión mayor

Sección titulada “Paso 1: Configure los canales para cada versión mayor”
// 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: 'atBackground',
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: 'atBackground',
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: 'atBackground',
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
  • Sin cambios code - La ruta del canal sucede automáticamente
  • Separación clara - Cada versión tiene su propio pipeline de actualizaciones
  • Objetivos flexibles - Puede enviar actualizaciones a grupos de versiones específicas
  • Despliegues seguros - Los cambios disruptivos nunca llegan a versiones incompatibles

Estrategia 2: Controles de versionamiento semántico

Sección titulada “Estrategia 2: Controles de versión semántica”

Utilice los controles de versión semántica integrados de Capgo para evitar actualizaciones a través de límites de versión. Deshabilitar Actualizaciones Automáticas entre Versión Mayor

Sección titulada “Deshabilitar Actualizaciones Automáticas entre Versión Mayor”

Ventana de terminal
Copiar a portapapeles
# Create a channel that blocks major version updates
npx @capgo/cli channel create stable --disable-auto-update major

Los usuarios con la versión de la aplicación

  • recibirán actualizaciones hasta 1.2.3 Los usuarios recibirán 1.9.9
  • la versión Not No recibir versiones 2.0.0 No recibir actualizaciones
  • No permite que cambios de ruptura lleguen a versiones nativas más antiguas code
  • La comparación utiliza la base nativa enviada como version_build
Ventana de terminal
# Block target bundles outside the native major.minor line (1.2.x won't get 1.3.0)
npx @capgo/cli channel set stable --disable-auto-update minor
# Block target bundles outside the exact native MAJOR.MINOR.PATCH core (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

Specifica una versión mínima de la aplicación nativa (min_update_version) en cada paquete para que Capgo solo lo entregue a dispositivos cuya binaria nativa es lo suficientemente nueva.

Este utiliza la estrategia de metadatos de canal ( ) más o--disable-auto-update metadataestrategia de metadatos de canal ( --min-update-version ) más o --auto-min-update-version al subir. No hay --native-version CLI flag.

Habilite la configuración de targeting de metadatos en el canal

Sección titulada “Habilite la configuración de targeting de metadatos en el canal”
ventana de terminal
# one-time: require min_update_version metadata on uploads to this channel
npx @capgo/cli@latest channel set production --disable-auto-update metadata

Al subir un paquete, pase la versión nativa más baja que pueda recibir:

ventana de terminal
# This bundle requires native version 2.0.0 or higher
npx @capgo/cli@latest bundle upload \
--channel production \
--min-update-version "2.0.0"

O deje que Capgo establezca el piso desde la compatibilidad del paquete nativo:

Ventana de terminal
npx @capgo/cli@latest bundle upload \
--channel production \
--auto-min-update-version

Uso de casos

Uso de casos
  1. Nuevo plugin nativo requerido

    ventana de terminal
    # Bundle needs Camera plugin added in v2.0.0
    npx @capgo/cli@latest bundle upload \
    --channel production \
    --min-update-version "2.0.0"
  2. Cambios nativos API que rompen la compatibilidad

    ventana de terminal
    # Bundle uses new Capacitor 6 APIs
    npx @capgo/cli@latest bundle upload \
    --channel production \
    --min-update-version "3.0.0"
  3. Migración gradual

    ventana de terminal
    # one-time: enable metadata gating on beta
    npx @capgo/cli@latest channel set beta --disable-auto-update metadata
    # Test bundle only on latest native version
    npx @capgo/cli@latest bundle upload \
    --channel beta \
    --min-update-version "2.5.0"

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

En el panel de control Capgo:

  1. Vaya a Canales Canal de liberación de Capgo. Página/área: Página de marketing de soluciones de Capgo. Rol: Etiqueta de IU breve o elemento de navegación. Visto en: página soluciones/white-label.astro. Clave de mensaje `solutions_white_label_visual_cell2_value` (Valor de celda visual de soluciones White Label).
  2. → Seleccione su canal Habilitar
  3. “Desactivar la desescalada automática bajo nativo”

Or via CLI:

O a través de __CAPGO_KEEP_0__:
npx @capgo/cli@latest channel set production --no-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 inferior)

Esto es útil cuando:

  • Los usuarios instalaron manualmente una versión más nueva desde la tienda de aplicaciones
  • Necesitas asegurarte de que los usuarios siempre tengan las últimas actualizaciones de seguridad
  • Quieres prevenir errores de regresión

Estrategia 5: Bloqueo de versión en el dispositivo

Sección titulada “Estrategia 5: Bloqueo de versión en el dispositivo”

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

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 Capgo panel de control:

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

Aquí hay un ejemplo completo que combina todas las estrategias:

Ventana de terminal
# Create production channel, then enable metadata min-version gating
npx @capgo/cli@latest channel add production
npx @capgo/cli@latest channel set production \
--disable-auto-update metadata \
--no-downgrade
capacitor.config.ts
const config: CapacitorConfig = {
plugins: {
CapacitorUpdater: {
autoUpdate: 'atBackground',
defaultChannel: 'production',
}
}
};
Ventana de terminal
# Create v2 channel for new version
npx @capgo/cli@latest channel add v2
npx @capgo/cli@latest channel set v2 \
--disable-auto-update metadata \
--no-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: 'atBackground',
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@latest bundle upload \
--channel production \
--min-update-version "1.0.0"
# Update v2.x users (new feature)
git checkout main
# Make changes
npx @capgo/cli@latest bundle upload \
--channel v2 \
--min-update-version "2.0.0"

Utilice la consola de Capgo para seguir:

  • ¿Cuántos usuarios están en v1 vs v2
  • Tasas de adopción de paquetes por versión
  • Errores o congelamientos 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 canal, Capgo utiliza este orden de precedencia:

  1. Sobrescritura de Dispositivo (Panel de control o API) - Mayor prioridad y visible en la UI de Sobrescritura de Dispositivo
  2. Canal de plugin local a través de setChannel() - Almacenado solo en el dispositivo y no se muestra en la UI de Sobrescritura de Dispositivo
  3. defaultChannel en capacitor.config.ts
  4. Canal Predeterminado (Configuración de nube) - Mayor prioridad

1. Siempre establece defaultChannel para versiones principales

Sección titulada “1. Siempre establece 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
# one-time: create beta and enable metadata gating
# (production is set up in the complete workflow above)
npx @capgo/cli@latest channel add beta
npx @capgo/cli@latest channel set beta --disable-auto-update metadata
# Test on beta channel first
npx @capgo/cli@latest bundle upload \
--channel beta \
--auto-min-update-version
# Monitor for issues, then promote to production
npx @capgo/cli@latest bundle upload \
--channel production \
--auto-min-update-version

Revisa regularmente tu tablero:

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

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

CaracterísticaIonic AppFlowCapgo
Versión basada en la rutaBasada en la versión nativaBasada en la versión nativa a través de defaultChannel + múltiples estrategias
Versión semánticaApoyo básicoAvanzado con --disable-auto-update (mayor/minor/patch)
Restricciones de versión nativaConfiguración manual en la consola de AppFlowIntegrado --min-update-version / --auto-min-update-version con canales de metadatos
Gestión de canalesInterfaz de usuario web + CLIInterfaz de usuario web + CLI + API
Configuraciones de dispositivoControl limitado a nivel de dispositivoControl total a través de la consola/API
Prevención de descargas automáticasSí a través de --no-downgrade
Mantenimiento de varias versionesGestión de rama/ canal manualAutomático con precedencia de canal
AutoalojamientoNoSí (control completo)
Análisis de versionesBásicoDetalles de métricas por versión

Verifica lo siguiente:

  1. Asignación de canal: Verifica que el dispositivo esté en el canal correcto

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

    • Panel de control → Paquetes → Ver la columna “Versión nativa”
  3. Ajustes de Semver: Verificar el canal de ‘ disable-auto-update configuración’

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

    • Panel de control → Dispositivos → Buscar dispositivo → Verificar canal/versión
  1. Revisar defaultChannel: Asegúrese de que el canal esté configurado correctamente en capacitor.config.ts
  2. Verificar carga de paquete: Verifique que el paquete se haya cargado en el canal previsto
  3. Inspeccionar versión de actualización mínima: Confirme --min-update-version (o --auto-min-update-version) se configuró y el canal utiliza --disable-auto-update metadata

Cambios importantes que afectan versiones antiguas

Sección titulada “Cambios importantes que afectan versiones antiguas”
  1. Solución inmediata: Sobreescriba dispositivos afectados con 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, el enfoque de versión funciona de manera muy similar en Capgo, con una mayor flexibilidad:

Concepto de AppFlowCapgo EquivalenteNotas
Canal de DespliegueCapgo CanalMismo concepto, más potente
Bloqueo de Versión Nativa--min-update-version / --auto-min-update-versionControl más detallado
Prioridad del CanalPrecedencia del Canal (sobreescribir → cloud → predeterminado)Precedencia más transparente
Objetivo de DespliegueCanal + controles semverDisponibles varias estrategias
Canales de producciónproduction nombre del canal (o cualquier nombre)Nombres flexibles
Implementación basada en GitCLI carga de paquetes desde ramaMismo flujo de trabajo
Compatibilidad automática con versionesdefaultChannel + restricciones de versiónMejorado con varias estrategias
  1. Más Control: Capgo te ofrece varias estrategias (canales, semver, versión nativa) que se pueden combinar
  2. Mejor Visibilidad: La consola muestra la distribución de versiones y los problemas de compatibilidad
  3. API Acceso: Control total programático sobre la versión de destino
  4. Auto-Hospedaje: 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 de Capgo (usualmente 1:1)
  2. Establecer defaultChannel en capacitor.config.ts para cada versión mayor
  3. Configurar reglas de semver si deseas bloqueo automático en las fronteras de versión
  4. Cargar conjuntos de versiones específicas utilizando --min-update-version (el canal debe utilizar la estrategia de metadatos)
  5. Monitorear la 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. Ruteo basado en canales: Separación automática de versiones 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 una versión nativa mínima para paquetes
  4. Prevención de descenso automático: Nunca entrega paquetes más antiguos a versiones nativas más nuevas
  5. Opciones de dispositivo: Control manual para pruebas y targeting

Al combinar estas estrategias, puede lograr la entrega de actualizaciones automáticas con estilo de AppFlow, con aún más flexibilidad y control. Elija la estrategia que mejor se adapte al flujo de versiones y despliegue de su aplicación.

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

Si estás utilizando Versionamiento de Versión para planificar la ruta de canal y el lanzamiento en etapas, conecta con Canales para los detalles de implementación en Canales, para los detalles de implementación en Canales, para los detalles de implementación en Canales, para los detalles de implementación en Canales, Solución de Pruebas Beta para el flujo de trabajo del producto en Solución de Pruebas Beta, y Solución de Versionamiento de Versión']} Version Targeting Solution para el flujo de trabajo del producto en la Solución de Versionamiento.