Configuración de versiones
Copie un prompt de configuración con los pasos de instalación y la guía de markdown completa para este plugin.
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 FuncionaCapgo utiliza un enfoque multiestratificado 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 actualizaciones a través de fronteras de mayor/menor/patch
- Overscroll de Nivel de Dispositivo: Dirige actualizaciones a dispositivos o grupos de usuarios específicos
Circuito de Coincidencia de Versión
Sección titulada “Flujo de coincidencia de versiones”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.
Escenario de ejemplo
Sección titulada “Escenario de ejemplo”- Aplicación v1.x (100,000 usuarios) →
productioncanales - App v2.x (50,000 usuarios con cambios de ruptura) →
v2canal - App v3.x (10,000 usuarios beta) →
v3canal
Implementación
Sección titulada “Implementación”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 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”- 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# Create a channel that blocks major version updatesnpx @capgo/cli channel create stable --disable-auto-update majorLos 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
Opciones de control granular
Sección titulada “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 noneEstrategia 3: Restricciones de versión nativa
Título de la sección “Estrategia 3: Restricciones de versión nativa”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”# one-time: require min_update_version metadata on uploads to this channelnpx @capgo/cli@latest channel set production --disable-auto-update metadataEstablecer una versión nativa mínima al subir
Sección titulada “Establecer una versión nativa mínima al subir”Al subir un paquete, pase la versión nativa más baja que pueda recibir:
# This bundle requires native version 2.0.0 or highernpx @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:
npx @capgo/cli@latest bundle upload \ --channel production \ --auto-min-update-versionUso de casos
Uso de casos-
Nuevo plugin nativo requerido
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 descenso automático
Título de la sección “Estrategia 4: Prevención de descenso automático”Evitar que los usuarios reciban paquetes más antiguos que su versión nativa actual.
Habilitar en ajustes de canal
Título de sección “Habilitar en ajustes de canal”En el panel de control Capgo:
- 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).
- → Seleccione su canal Habilitar
- “Desactivar la desescalada automática bajo nativo”
Or via CLI:
npx @capgo/cli@latest channel set production --no-downgradeEjemplo
Sección titulada “Ejemplo”- 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.
Forzar 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 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
Sección 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 Establecer Versión
- Reemplazar con una versión específica de canal o paquete
- El dispositivo recibirá actualizaciones de la fuente sobrescrita
Flujo de Trabajo Completo de AppFlow-Style
Sección titulada “Flujo de Trabajo Completo de AppFlow-Style”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 (App v2.0.0)
Sección titulada “2. Cambio de versión (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íe actualizaciones a ambas versiones
Sección titulada “3. Envíe 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 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
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 UI de Sobrescritura de Dispositivo
- 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 - defaultChannel en capacitor.config.ts
- Canal Predeterminado (Configuración de nube) - Mayor prioridad
Prácticas recomendadas
Sección titulada “Prácticas recomendadas”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 manually2. Utilice la versión semántica
Sección titulada “2. Utilice la versión semántica”# ✅ Good1.0.0 → 1.0.1 → 1.1.0 → 2.0.0
# ❌ Bad1.0 → 1.1 → 2 → 2.53. Mantenga ramas separadas
Sección titulada “3. Mantenga ramas separadas”# ✅ Good: Separate branches per major versionmain (v3.x)v2-maintenance (v2.x)v1-maintenance (v1.x)
# ❌ Bad: Single branch for all versions4. Pruebe antes de la implementación
Sección titulada “4. Pruebe 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, aquí está cómo Capgo compara la versión de destino:
| Característica | Ionic AppFlow | Capgo |
|---|---|---|
| Versión basada en la ruta | Basada en la versión nativa | Basada en la versión nativa a través de defaultChannel + múltiples estrategias |
| Versión semántica | Apoyo básico | Avanzado con --disable-auto-update (mayor/minor/patch) |
| Restricciones de versión nativa | Configuración manual en la consola de AppFlow | Integrado --min-update-version / --auto-min-update-version con canales de metadatos |
| Gestión de canales | Interfaz de usuario web + CLI | Interfaz de usuario web + CLI + API |
| Configuraciones de dispositivo | Control limitado a nivel de dispositivo | Control total a través de la consola/API |
| Prevención de descargas automáticas | Sí | 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
Sección titulada “Resolución de problemas”Usuarios que no reciben actualizaciones
Sección titulada “Usuarios que no reciben actualizaciones”Verifica lo siguiente:
-
Asignación de canal: Verifica que el dispositivo esté en el canal correcto
const channel = await CapacitorUpdater.getChannel()console.log('Current channel:', channel) -
Restricciones de versión: Verifica si el paquete tiene requisitos de versión nativos
- Panel de control → Paquetes → Ver la columna “Versión nativa”
-
Ajustes de Semver: Verificar el canal de ‘
disable-auto-updateconfiguración’Ventana de terminal npx @capgo/cli channel list -
Override de dispositivo: Verificar si el dispositivo tiene un override manual
- Panel de control → Dispositivos → Buscar dispositivo → Verificar canal/versión
Paquete entregado a la versión incorrecta
Sección titulada “Paquete entregado a la versión incorrecta”- Revisar defaultChannel: Asegúrese de que el canal esté configurado correctamente en
capacitor.config.ts - Verificar carga de paquete: Verifique que el paquete se haya cargado en el canal previsto
- 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”- Solución inmediata: Sobreescriba dispositivos afectados con paquete seguro
- Panel de control → Dispositivos → Selección en bloque → Establecer versión
- Solución a largo plazo: Crear canales versionados y mantener ramas separadas
- Prevención: Siempre probar actualizaciones en dispositivos representativos antes de la implementación
Migración desde Ionic AppFlow
Título de la sección “Migración desde Ionic AppFlow”Si estás migrando desde Ionic AppFlow, el enfoque de versión funciona de manera muy similar en Capgo, con una mayor flexibilidad:
Mapa conceptual
Título de la sección “Mapa conceptual”| Concepto de AppFlow | Capgo Equivalente | Notas |
|---|---|---|
| Canal de Despliegue | Capgo Canal | Mismo concepto, más potente |
| Bloqueo de Versión Nativa | --min-update-version / --auto-min-update-version | Control más detallado |
| Prioridad del Canal | Precedencia del Canal (sobreescribir → cloud → predeterminado) | Precedencia más transparente |
| Objetivo de Despliegue | Canal + controles semver | Disponibles varias estrategias |
| Canales de producción | production nombre del canal (o cualquier nombre) | Nombres flexibles |
| Implementación basada en Git | CLI carga de paquetes desde rama | Mismo flujo de trabajo |
| Compatibilidad automática con versiones | defaultChannel + restricciones de versión | Mejorado con varias estrategias |
Diferencias clave para usuarios de AppFlow
Sección titulada “Diferencias clave para usuarios de AppFlow”- Más 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 los problemas de compatibilidad
- API Acceso: Control total programático 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
Sección titulada “Pasos de Migración”- Asigna tus canales de AppFlow a los canales de Capgo (usualmente 1:1)
- Establecer
defaultChannelencapacitor.config.tspara cada versión mayor - Configurar reglas de semver si deseas bloqueo automático en las fronteras de versión
- Cargar conjuntos de versiones específicas utilizando
--min-update-version(el canal debe utilizar la estrategia de metadatos) - Monitorear la distribución de versiones en la consola de Capgo
Patrones Avanzados
Sección titulada “Patrones Avanzados”Despliegue Gradual por Versión
Sección titulada “Despliegue 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 Característica por Versión
Sección titulada “Banderas de Característica 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 entre 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 }) }}Capgo ofrece varias 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 través de fronteras de versión mayor/minor/patch
- Restricciones de versión nativa: Requiere una versión nativa mínima para paquetes
- Prevención de descenso automático: Nunca entrega paquetes más antiguos a versiones nativas más nuevas
- 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:
- 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 versión nativas
Siga adelante desde la configuración de versiones
Título de la sección “Siga adelante desde la configuración de versiones”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.