Versión de destino
Instale
Esta guía explica cómo entregar automáticamente la última versión compatible del paquete 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 te permite:
- Entregar actualizaciones compatibles automáticamente a usuarios según su versión nativa de la aplicación
- Prevenir cambios disruptivos evitar que lleguen a versiones de aplicación incompatibles
- Administrar múltiples versiones de aplicación 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)?
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 AppFlowsabes 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 incompatible a versiones nativas antiguas de 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 disruptivos
- Quieres evitar que los paquetes más nuevos rompan las versiones nativas antiguas de code
- 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
¿Cómo Funciona
Sección titulada “¿Cómo Funciona”Capgo utiliza un enfoque de múltiples capas para emparejar a los usuarios con actualizaciones compatibles:
- Restricciones de Versión Nativa: Evita que los paquetes se entreguen a versiones nativas incompatibles
- Ruteo Basado en Canal: Ruta diferentes versiones de la aplicación a diferentes canales de actualización
- Controles de Versión Semántica: Bloquea automáticamente las actualizaciones a través de fronteras de mayor/minor/patch
- Anulaciones de Nivel de Dispositivo: Dirige actualizaciones específicas a dispositivos o grupos de usuarios
Flujo de coincidencia de versión
Título de la sección “Flujo de coincidencia de versión”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 versión basada en canal
Título de la sección “Estrategia 1: Ruta de versión basada en canal”Esta es la enfoque recomendado para gestionar cambios importantes y actualizaciones de versión mayor. Es similar al modelo de entrega de AppFlow.
Escenario de ejemplo
Título de la sección “Escenario de ejemplo”- App v1.x (100,000 usuarios) →
productioncanal - App v2.x (50,000 usuarios con cambios disruptivos) →
v2canal - App v3.x (10,000 usuarios beta) →
v3canal
Implementación
Sección titulada “Implementación”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 buildsimport { 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 buildsconst 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 buildsconst config: CapacitorConfig = { appId: 'com.example.app', appName: 'Example App', plugins: { CapacitorUpdater: { autoUpdate: 'atBackground', defaultChannel: 'v3', // Routes v3 users automatically } }};Paso 2: Crear canales
Título de la sección “Paso 2: Crear canales”# Create channels for each major versionnpx @capgo/cli channel create productionnpx @capgo/cli channel create v2npx @capgo/cli channel create v3
# Enable self-assignment so apps can switch channelsnpx @capgo/cli channel set production --self-assignnpx @capgo/cli channel set v2 --self-assignnpx @capgo/cli channel set v3 --self-assignPaso 3: Subir paquetes específicos de versión
Título de la sección “Paso 3: Subir paquetes específicos de versión”# For v1.x users (from v1-maintenance branch)git checkout v1-maintenancenpm run buildnpx @capgo/cli bundle upload --channel production
# For v2.x users (from v2-maintenance or main branch)git checkout mainnpm run buildnpx @capgo/cli bundle upload --channel v2
# For v3.x users (from beta/v3 branch)git checkout betanpm run buildnpx @capgo/cli bundle upload --channel v3Ventajas
Sección titulada “Ventajas”- Cero code cambios - La ruta del canal sucede automáticamente
- - Separación clara - Cada versión tiene su propio pipeline de actualizaciones
- - Puede enviar actualizaciones a grupos de versiones específicas - Los despliegues son seguros
- - Los cambios disruptivos nunca llegan a versiones incompatibles targetLanguage
Estrategia 2: Controles de versión semántica
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. No habilitar actualizaciones automáticas entre versiones principales
Sección titulada “No habilitar actualizaciones automáticas entre versiones principales”
ventana de terminal# Create a channel that blocks major version updatesnpx @capgo/cli channel create stable --disable-auto-update majorLos usuarios de la aplicación con versión
- recibirán actualizaciones hasta 1.2.3 will receive updates up to 1.9.9
- Los usuarios no No recibirán automáticamente 2.0.0 la versión
- evita que los cambios de versión rompan la aplicación en versiones antiguas de code
- La comparación utiliza la línea base nativa enviada como
version_build
Opciones de control granular
Título de la sección “Opciones de control granular”# 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 updatesnpx @capgo/cli channel set stable --disable-auto-update noneEsta utiliza la estrategia de metadatos de canal (
) másEsta estrategia solo funciona si siguemin_update_version) on each bundle so Capgo only delivers it to devices whose native binary is new enough.
para las versiones de su aplicación. Asegúrese de que los números de versión de su aplicación sigan el formato. Esta estrategia utiliza la estrategia de metadatos de canal (--disable-auto-update metadata) más --min-update-version o --auto-min-update-version __CAPGO_KEEP_0__ --native-version CLI flag.
Título de la sección: Habilitar la configuración de metadatos en el canal
ventana de terminal# one-time: require min_update_version metadata on uploads to this channelnpx @capgo/cli@latest channel set production --disable-auto-update metadataTítulo de la sección: Establecer una versión nativa mínima al subir
Cuando se sube 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 highernpx @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:
npx @capgo/cli@latest bundle upload \ --channel production \ --auto-min-update-versiondetalles.
Sección titulada “Casos de uso”-
Necesario nuevo plugin nativo
Ventana de terminal # Bundle needs Camera plugin added in v2.0.0npx @capgo/cli@latest bundle upload \--channel production \--min-update-version "2.0.0" -
Cambios nativos API que rompen la compatibilidad
Ventana de terminal # Bundle uses new Capacitor 6 APIsnpx @capgo/cli@latest bundle upload \--channel production \--min-update-version "3.0.0" -
Migración gradual
Ventana de terminal # one-time: enable metadata gating on betanpx @capgo/cli@latest channel set beta --disable-auto-update metadata# Test bundle only on latest native versionnpx @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”Evita que los usuarios reciben paquetes más antiguos que su versión nativa actual.
Habilitar en Configuración de Canal
Sección titulada “Habilitar en Configuración de Canal”En el panel de control Capgo:
- 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 de marca blanca).
- → Seleccione su canal Habilitar
- “Desactiva la descarga automática bajo nativo”
Or via CLI:
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 hacia abajo)
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: Targetización a nivel de dispositivo
Estrategia 5: Targetización a nivel de dispositivoSuperar la asignación de canal para dispositivos o grupos de usuarios específicos.
Forzar Versión Específica para Pruebas
Estrategia titulada “Forzar Versión Específica para Pruebas”import { CapacitorUpdater } from '@capgo/capacitor-updater'
// Force beta testers to use v3 channelasync function assignBetaTesters() { const deviceId = await CapacitorUpdater.getDeviceId()
// Check if user is beta tester if (isBetaTester(userId)) { await CapacitorUpdater.setChannel({ channel: 'v3' }) }}Panel de control Opción de dispositivo
Estrategia titulada “Opción de dispositivo de panel de control”En el Capgo panel de control:
- Ir a Dispositivos → Encontrar dispositivo
- Hacer clic Establecer Canal o ¿Qué canal elegir?
- Establecer Versión
- Sobreescribir con una versión específica de canal o paquete
Utilice las sobrescripciones del dispositivo para probar actualizaciones en su propio dispositivo antes de implementarlas en todos los usuarios.
Flujo de Trabajo Completo de AppFlowSección titulada “Flujo de Trabajo Completo de 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)”# Create production channel, then enable metadata min-version gatingnpx @capgo/cli@latest channel add productionnpx @capgo/cli@latest channel set production \ --disable-auto-update metadata \ --no-downgradeconst 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)”# Create v2 channel for new versionnpx @capgo/cli@latest channel add v2npx @capgo/cli@latest channel set v2 \ --disable-auto-update metadata \ --no-downgrade \ --self-assign
# Create git branch for v1 maintenancegit checkout -b v1-maintenancegit push origin v1-maintenance// capacitor.config.ts for v2.0.0const config: CapacitorConfig = { plugins: { CapacitorUpdater: { autoUpdate: 'atBackground', defaultChannel: 'v2', // New users get v2 channel } }};3. Envía actualizaciones a ambas versiones
Sección titulada “3. Envía actualizaciones a ambas versiones”# Update v1.x users (bug fix)git checkout v1-maintenance# Make changesnpx @capgo/cli@latest bundle upload \ --channel production \ --min-update-version "1.0.0"
# Update v2.x users (new feature)git checkout main# Make changesnpx @capgo/cli@latest bundle upload \ --channel v2 \ --min-update-version "2.0.0"4. Monitorear la distribución de versiones
Sección titulada “4. Monitorear la distribución de versiones”Utilice el Capgo panel de control para seguir:
- ¿Cuántos usuarios están en v1 vs v2
- Índices de adopción de paquetes por versión
- Errores o fallas por versión
5. Deprecar la versión antigua
Sección titulada “5. Deprecar la versión antigua”Una vez que el uso de v1 caiga por debajo del umbral:
# Stop uploading to production channel# Optional: Delete v1 maintenance branchgit branch -d v1-maintenance
# Move all remaining users to default# (They'll need to update via app store)Precedencia de canal
Título de la sección “Precedencia de canal”Cuando existen múltiples configuraciones de canal, Capgo utiliza este orden de precedencia:
- Sobrescritura de dispositivo (Panel de control o API) - Mayor prioridad y visible en la interfaz de usuario de Sobrescritura de dispositivo
- Canal de plugin local via
setChannel()- Almacenado solo en el dispositivo y no se muestra en la interfaz de usuario de Sobrescritura de dispositivo - defaulChannel en capacitor.config.ts
- Canal predeterminado (Configuración de Cloud) - Prioridad más baja
Prácticas recomendadas
Sección titulada “Prácticas recomendadas”1. Siempre establezca defaultChannel para versiones principales
Sección titulada “1. Establecer siempre el valor predeterminado de 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 manually2. Utilizar la versión semántica
Sección titulada “2. Utilizar la versión semántica”# ✅ Good1.0.0 → 1.0.1 → 1.1.0 → 2.0.0
# ❌ Bad1.0 → 1.1 → 2 → 2.53. Mantener ramas separadas
Sección titulada “3. Mantener ramas separadas”# ✅ Good: Separate branches per major versionmain (v3.x)v2-maintenance (v2.x)v1-maintenance (v1.x)
# ❌ Bad: Single branch for all versions4. Probar antes de la implementación
Sección titulada “4. Probar antes de la implementación”# one-time: create beta and enable metadata gating# (production is set up in the complete workflow above)npx @capgo/cli@latest channel add betanpx @capgo/cli@latest channel set beta --disable-auto-update metadata
# Test on beta channel firstnpx @capgo/cli@latest bundle upload \ --channel beta \ --auto-min-update-version
# Monitor for issues, then promote to productionnpx @capgo/cli@latest bundle upload \ --channel production \ --auto-min-update-version5. Monitorear la distribución de versiones
Sección titulada “5. Monitorear la distribución de versiones”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?
Comparación con Ionic AppFlow
Sección titulada “Comparación con Ionic AppFlow”Para equipos que están migrando desde Ionic AppFlow¿Cómo compara Capgo con la versión de destino:
| Característica | AppFlow de Ionic | Capgo |
|---|---|---|
| Versionamiento basado en versión | Ruteo basado en versión automático | Automático mediante defaultChannel (+ varias estrategias) |
| Versionamiento semántico | Apoyo básico | Avanzado con --disable-auto-update (mayor/minor/patch) |
| Restricciones de versión nativas | Configuración manual en la consola de AppFlow | Integrado --min-update-version / --auto-min-update-version con canales de metadatos |
| Gestión de canales | Web UI + CLI | Web UI + CLI + API |
| Interfaz de usuario web + __CAPGO_KEEP_0__ + __CAPGO_KEEP_1__ | Superposiciones de dispositivo | Full control via Dashboard/API |
| Control total a través de Dashboard/__CAPGO_KEEP_0__ | Prevención de descenso automático | Sí a través de --no-downgrade |
| Mantenimiento de varias versiones | Gestión de rama/canal manual | Automático con precedencia de canal |
| Autoalojamiento | No | Sí (control completo) |
| Análisis de versiones | Básico | Detalles de métricas por versión |
Resolución de problemas
Título de la sección: Resolución de problemasUsuarios que no reciben actualizaciones
Título de la sección: Usuarios que no reciben actualizacionesVerifique lo siguiente:
-
Asignación de canal: Verifique que el dispositivo está en el canal correcto
const channel = await CapacitorUpdater.getChannel()console.log('Current channel:', channel) -
Restricciones de versión: Verifique si el paquete tiene requisitos de versión nativa
- Panel de control → Paquetes → Verifique la columna "Versión nativa"
-
Configuración de Semver: Verifique la configuración del canal
disable-auto-updateConfiguraciónVentana de terminal npx @capgo/cli channel list -
Override de dispositivo: Verifique si el dispositivo tiene un override manual
- Panel de control → Dispositivos → Buscar dispositivo → Verifique canal/versión
Paquete entregado a la versión incorrecta
Sección titulada "Paquete entregado a la versión incorrecta"- Revisar canal predeterminado: Asegúrese de que el canal esté correcto en
capacitor.config.ts - Verificar carga de paquete: Verifique si el paquete se cargó en el canal deseado
- 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 importantes que afectan versiones antiguas
Sección titulada “Cambios importantes que afectan versiones antiguas”- Solución inmediata: Sobrescriba dispositivos afectados con paquete seguro
- Panel de control → Dispositivos → Selección en masa → Establecer versión
- Solución a largo plazo: Crear canales con versiones y mantener ramas separadas
- Prevención: Siempre prueba las actualizaciones en dispositivos representativos antes de la implementación
Migración desde Ionic AppFlow
Sección titulada “Migración desde Ionic AppFlow”Si estás migrando desde Ionic AppFlow, la versión objetivo funciona de manera muy similar en Capgo, con mayor flexibilidad:
Mapa conceptual
Sección titulada “Mapa conceptual”| Concepto de AppFlow | Capgo Equivalente | Notas |
|---|---|---|
| Canal de Implementación | Capgo Canal | El mismo concepto, pero más poderoso |
| Bloqueo de Versión Nativa | --min-update-version / --auto-min-update-version | Control más detallado |
| Prioridad del Canal | Precedencia del Canal (sobreescribir → en la nube → por defecto) | Precedencia más transparente |
| Objetivo de la Implementación | Control de canal + semver | Disponibles varias estrategias |
| Canal de producción | production nombre del canal (o cualquier otro) | Nombres flexibles |
| Despliegue basado en Git | subir paquete CLI desde rama | Misma secuencia de trabajo |
| Compatibilidad automática de versiones | defaultChannel Restricciones de versión + | Mejorado con varias estrategias |
Diferencias clave para usuarios de AppFlow
Diferencias clave para usuarios de AppFlow- Mayor control: Capgo te ofrece varias estrategias (canales, semver, versión nativa) que se pueden combinar
- Mejor visibilidad: La consola muestra la distribución de versiones y problemas de compatibilidad
- API de acceso: Control programático completo sobre la versión de destino
- Auto-hospedaje: Opción para ejecutar tu propio servidor de actualizaciones con la misma lógica de versión
Pasos de migración
Diferencias clave para usuarios de AppFlow- Mapa tus canales de AppFlow a Capgo canales (usualmente 1:1)
- Establecer
defaultChannelencapacitor.config.tspara cada versión mayor - Configurar reglas de semver si desea bloqueo automático en las fronteras de versión
- Subir conjuntos de versiones específicas utilizando
--min-update-version(el canal debe utilizar la estrategia de metadatos) - Monitorear la distribución de versiones en Capgo panel de control
Patrones Avanzados
Sección titulada “Patrones Avanzados”Implementación Gradual por Versión
Sección titulada “Implementación Gradual por Versión”// Gradually migrate v1 users to v2async 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' }) }}Banderas de Funcionalidad por Versión
Sección titulada “Banderas de Funcionalidad por Versión”// Enable features based on native versionasync 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() }}Pruebas A/B entre Versiones
Sección titulada “Pruebas A/B a lo largo de versiones”// Run A/B tests within same native versionasync 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 }) }}Resumen
Sección titulada “Resumen”Capgo ofrece múltiples estrategias para la entrega de actualizaciones específicas de versión:
- Ruteo basado en canales: Separación automática de versiones mediante
defaultChannel - : Versión semántica: Evita actualizaciones a lo largo de fronteras de versión mayor/minor/patch
- Restricciones de versión nativa: Requiere versión nativa mínima para paquetes
- Prevención de descenso automático: Nunca envíe paquetes más antiguos a versiones nativas más nuevas
- 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:
- Guía de cambios importantes - Estrategia de versionamiento de canales detallada
- Gestión de canales - Referencia completa de configuración de canales
- Comportamiento de actualización - Retrasos y condiciones de versiones nativas
Siga adelante desde la configuración de versiones
Sección titulada “Continúa desde la configuración de versión”Si estás utilizando Configuración de Versión para planificar la ruta de canal y el lanzamiento en etapas, conecta con Canal para los detalles de implementación en Canal, Canal para los detalles de implementación en Canal, Canal Solución de Pruebas Beta para el flujo de trabajo del producto en Solución de Pruebas Beta, y __CAPGO_KEEP_0__ Solución de Enfoque de Versión para el flujo de trabajo del producto en Solución de Enfoque de Versión.