Saltar al contenido

Versión de destino

Esta guía explica cómo entregar automáticamente la última versión compatible de la caja a los usuarios en función de su versión nativa de la aplicación. de manera similar a la aproximación de Ionic AppFlow. Esto garantiza un manejo simplificado de actualizaciones y lanzamientos más rápidos, mientras se evitan problemas de compatibilidad.

El sistema de versión de Capgo permite que puedas:

  • Entregar actualizaciones compatibles automáticamente para usuarios según su versión nativa de la aplicación
  • Prevenir cambios que rompen la aplicación evitar que actualizaciones incompatibles lleguen a versiones de la aplicación incompatibles
  • Gestionar múltiples versiones de la aplicación hacerlo sin lógica compleja
  • Realizar actualizaciones sin problemas a segmentos específicos de usuarios

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

Título de la sección “¿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 la aplicación, evitando que se entregara JavaScript incompatibilidad a versiones nativas antiguas code.

Capgo ofrece las mismas garantías de seguridad, con 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 rotos
  • 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 quiere mantener la misma seguridad de actualización

Capgo utiliza un enfoque de múltiples capas 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 lo largo de los límites de mayor/minor/patch
  4. Oversights de Nivel de Dispositivo: Dirige actualizaciones específicas a dispositivos o grupos de usuarios
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: Ruta de versiones basada en canales

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

Este es el 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 canal
  • App v2.x (50,000 usuarios con cambios disruptivos) → v2 canal
  • App v3.x (10,000 usuarios beta) → v3 canal

Paso 1: Configurar canales para cada versión mayor

Sección titulada “Paso 1: Configurar 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
  • Zero code changes - La ruta del canal sucede automáticamente
  • - Separación clara - Cada versión tiene su propio pipeline de actualizaciones
  • - Puedes enviar actualizaciones a grupos de versiones específicas - Los despliegues son seguros
  • - Los cambios disruptivos nunca llegan a versiones incompatibles Sin cambios

Utilice los controles de versión semántica integrados de Capgo para evitar actualizaciones a través de límites de versión. No Actualizar Automáticamente a Versión Mayor

Sección titulada “No Actualizar Automáticamente a 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 will receive updates up to 1.9.9
  • Los usuarios recibirán NO no recibirán la versión 2.0.0 automáticamente
  • Evita que los cambios de ruptura lleguen a versiones nativas más antiguas code
  • La comparación utiliza la línea 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.

Esto utiliza la estrategia de metadatos del canal metadatos Estrategia (--disable-auto-update metadata) más --min-update-version o --auto-min-update-version __CAPGO_KEEP_0__ --native-version CLI flag.

Título: Habilitar la configuración de metadatos en el canal

ventana de terminal
Copiar a portapapeles
# one-time: require min_update_version metadata on uploads to this channel
npx @capgo/cli@latest channel set production --disable-auto-update metadata

Título: Habilitar la configuración de metadatos en el canal

ventana de terminal

Copiar a portapapeles

Al subir un paquete, pase la versión nativa más baja que pueda recibir:
# 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 dejamos 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
  1. Necesario nuevo plugin nativo

    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"

Estrategia 4: Prevención de la degradación automática

Sección titulada “Estrategia 4: Prevención de la degradación automática”

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

En el panel de control Capgo:

  1. Vaya a Canal contexto: nombre de característica de canales de Capgo. Página/área: página de marketing de soluciones de Capgo. Rol: etiqueta de UI corta 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 descarga 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
  • Debes asegurarte de que los usuarios siempre tengan las últimas actualizaciones de seguridad
  • Quieres prevenir errores de regresión

Estrategia 5: Bloqueo de dispositivo

Estrategia 5: Targeteo a nivel de 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 ¿Qué canal elegir?
  3. ¿Qué versión establecer?
  4. Establecer con una versión específica de canal o paquete

Utilice las sobrescripciones de dispositivo para probar actualizaciones en su propio dispositivo antes de implementarlas en todos los usuarios.

Flujo de trabajo completo de estilo AppFlow

Sección titulada “Flujo de trabajo completo de estilo AppFlow”

Aquí hay un ejemplo completo que combina todas las estrategias: 1. Configuración inicial (App v1.0.0)

Sección titulada “1. Configuración inicial (App v1.0.0)”
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',
}
}
};

2. Cambio de versión que rompe la compatibilidad (App v2.0.0)

Sección titulada “2. Cambio de versión que rompe la compatibilidad (App v2.0.0)”
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 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 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) - Prioridad más alta y visible en la interfaz de Sobrescritura de dispositivo
  2. Canal de plugin local via setChannel() - Almacenado solo en el dispositivo y no se muestra en la interfaz de Sobrescritura de dispositivo
  3. defaulChannel en capacitor.config.ts
  4. Canal predeterminado (Configuración de Cloud) - Prioridad más baja
// ✅ 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 AppFlowen español, aquí está cómo Capgo compara la versión de destino:

CaracterísticaAppFlow de IonicCapgo
Versión basada en rutasBasado en versión automáticaBasado en versión automática mediante defaultChannel + múltiples estrategias
Versión semánticaApoyo básicoAvanzado con --disable-auto-update (mayor/minor/parche)
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
Sobrescrituras de dispositivoControl limitado a nivel de dispositivoControl completo a través de la consola /API
Prevención de descenso automáticoSí 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á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: Verificar si el paquete tiene requisitos de versión nativa

    • Dashboard → Paquetes → Verificar la columna “Versión Nativa”
  3. Configuración de Semver: Verificar la configuración de canal de ‘ disable-auto-update configuración

    ventana de terminal
    npx @capgo/cli channel list
  4. Sobrescritura de dispositivo: Verificar si el dispositivo tiene una sobrescritura manual

    • Dashboard → Dispositivos → Buscar dispositivo → Verificar canal/versión

Se ha entregado el paquete a la versión incorrecta

Sección titulada “Se ha entregado el paquete a la versión incorrecta”
  1. Revisar canal predeterminado: Asegúrese de que el canal correcto esté en capacitor.config.ts
  2. Comprobar 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 estableció y el canal utiliza --disable-auto-update metadata

Cambios de ruptura que afectan versiones antiguas

Sección titulada “Cambios de ruptura que afectan versiones antiguas”
  1. Solución inmediata: Sobrescriba dispositivos afectados con paquete seguro
    • Panel de control → Dispositivos → Selección en bloque → Establecer Versión
  2. Solución a largo plazo: Crear canales con versiones y mantener ramas separadas
  3. Prevención: Siempre prueba las 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 mayor flexibilidad:

Concepto de AppFlowCapgo EquivalenteNota
Canales de ImplementaciónCapgo CanalMismo concepto, más potente
Bloqueo de Versión Nativa--min-update-version / --auto-min-update-versionMás control granular
Prioridad del CanalPrecedencia del Canal (sobreescribir → en la nube → por defecto)Precedencia más transparente
Objetivo de ImplementaciónControl de canal + semverDisponibles varias estrategias
Producción de canalproduction canal (o cualquier nombre)Nombres flexibles
Implementación basada en GitCLI carga de paquete desde ramaMismo flujo de trabajo
Compatibilidad automática de versióndefaultChannel + 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 de acceso: Control programático completo 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 Capgo canales (usualmente 1:1)
  2. Establecer defaultChannel en capacitor.config.ts para cada versión mayor
  3. Configurar reglas de semver si desea bloqueo automático en las fronteras de versión
  4. Subir conjuntos de versiones específicas usando --min-update-version (el canal debe utilizar la estrategia de metadatos)
  5. Monitorear la distribución de versiones en el Capgo dashboard
// 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. Gestión de versiones semánticas: Evita actualizaciones a lo largo de fronteras de versión mayor/minor/patch
  3. Restricciones de versión nativa: Requiere versión nativa mínima para paquetes
  4. Prevención de descenso automático: Nunca entregue paquetes más antiguos a versiones nativas más nuevas
  5. Device Overrides: Control manual para pruebas y targeting

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

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

Siga adelante desde la configuración de targeting de versiones

Sección titulada “Sigue adelante desde la versión de destino”

Si estás utilizando Versión de destino conectarla 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 y Solución de Enfoque de Versión para el flujo de trabajo del producto en Solución de Enfoque de Versión.