Versión de destino
Copie un prompt de configuración con los pasos de instalación y la guía markdown completa para este plugin.
Esta guía explica cómo entregar automáticamente el paquete compatible más reciente a los usuarios en función de su versión nativa de la aplicación. de manera similar a la aproximación de Ionic AppFlowEsto garantiza un manejo de actualizaciones simplificado y lanzamientos más rápidos, mientras se evitan problemas de compatibilidad.
El sistema de objetivo de versión de Capgo te permite:
- Entregar actualizaciones compatibles automáticamente a los usuarios según su versión de aplicación nativa
- Prevenir cambios que rompan la aplicación de llegar a versiones de la aplicación incompatibles
- Administrar múltiples versiones de la aplicación 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)?
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, 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 la aplicación, 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 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 quieres mantener la misma seguridad de actualización
How It Works
Sección titulada “Cómo funciona”Capgo 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 lo largo de fronteras de versión mayor/minor/patch
- Oversights de Nivel de Dispositivo: Dirige dispositivos o grupos de usuarios específicos
Flujo de Emparejamiento de Versión
Flujo de correspondencia de versióngraph 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
Sección titulada “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
Sección titulada “Escenario de ejemplo”- Aplicación v1.x (100,000 usuarios) →
productioncanal - 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: 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
Sección titulada “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
Sección titulada “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 v3Beneficios
Sección titulada “Beneficios”- Cero code cambios - La configuración de canales se realiza automáticamente
- Separación clara - Cada versión tiene su propio pipeline de actualizaciones
- Diseño flexible - Se pueden enviar actualizaciones a grupos específicos de versiones
- Despliegue seguro - Los cambios disruptivos nunca llegan a versiones incompatibles
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. 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 de la aplicación con versión
- recibirán actualizaciones hasta 1.2.3 Los usuarios recibirán 1.9.9
- ]} NO recibir la versión 2.0.0 de manera automática
- Evita que los cambios de compatibilidad lleguen a las versiones nativas code
- La comparación utiliza la línea 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”Establece requisitos de versión nativa mínimos para los paquetes para evitar la entrega a dispositivos incompatibles.
Usando la condición de retraso de versión nativa
Título de la sección “Usando la condición de retraso de versión nativa”Cuando subas un paquete, puedes especificar una versión nativa mínima:
# This bundle requires native version 2.0.0 or highernpx @capgo/cli bundle upload \ --channel production \ --native-version "2.0.0"Use Cases
Sección titulada “Uso de casos”-
Se requiere nuevo plugin nativo
Ventana de terminal # Bundle needs Camera plugin added in v2.0.0npx @capgo/cli bundle upload --native-version "2.0.0" -
Cambios nativos API que rompen
Ventana de terminal # Bundle uses new Capacitor 6 APIsnpx @capgo/cli bundle upload --native-version "3.0.0" -
Migración gradual
Ventana de terminal # Test bundle only on latest native versionnpx @capgo/cli bundle upload \--channel beta \--native-version "2.5.0"
Estrategia 4: Prevención de Descargas Automáticas
Sección titulada “Estrategia 4: Prevención de Descargas Automáticas”Evite 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 :
- Ir a Canales → Seleccionar su canal
- Habilitar “Deshabilitar descargas automáticas bajo nativo”
- Guardar cambios
O vía CLI:
npx @capgo/cli channel set production --disable-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 versión inferior)
Es útil cuando:
- Los usuarios instalaron manualmente una versión más reciente desde la tienda de aplicaciones
- Deben asegurarse de que los usuarios siempre tengan las últimas actualizaciones de parches de seguridad
- Quieren prevenir bugs 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 una 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 de dispositivo de sobreescripción
Sección titulada “Panel de control de dispositivo de sobreescripción”En el Capgo panel de control:
- Ir a Dispositivos → Encontrar dispositivo
- Hacer clic Establecer canal o Establecer versión
- Sobreescribir con un canal o versión de paquete específico
- El dispositivo recibirá actualizaciones de la fuente sobrescrita
Tarea completa de flujo de aplicación de estilo AppFlow
Secció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 with semver controlsnpx @capgo/cli channel create production \ --disable-auto-update major \ --disable-downgradeconst config: CapacitorConfig = { plugins: { CapacitorUpdater: { autoUpdate: 'atBackground', defaultChannel: 'production', } }};2. Lanzamiento de cambio disruptivo (App v2.0.0)
Sección titulada “2. Lanzamiento de cambio disruptivo (App v2.0.0)”# Create v2 channel for new versionnpx @capgo/cli channel create v2 \ --disable-auto-update major \ --disable-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 bundle upload \ --channel production \ --native-version "1.0.0"
# Update v2.x users (new feature)git checkout main# Make changesnpx @capgo/cli bundle upload \ --channel v2 \ --native-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 para seguir:
- Cuantos usuarios están en v1 vs v2
- Tasas 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 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
Sección titulada “Precedencia de canal”Cuando existan múltiples configuraciones de canal, Capgo utiliza este orden de precedencia:
- Sobrescritura de dispositivo (Panel de control o API) - Prioridad más alta y visible en la interfaz de sobrescritura de dispositivo
- Canal de plugin local a través de
setChannel()- Almacenado solo en el dispositivo y no se muestra en la interfaz de sobrescritura de dispositivo - canal predeterminado en capacitor.config.ts
- Canal por defecto (Configuración de Cloud) - Prioridad más baja
Prácticas recomendadas
Sección titulada “Prácticas recomendadas”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 manually2. Utilizar versionado semántico
Sección titulada “2. Utilizar versionado semántico”# ✅ 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. Prueba antes de la implementación
Sección titulada “4. Prueba antes de la implementación”# Test on beta channel firstnpx @capgo/cli bundle upload --channel beta
# Monitor for issues, then promote to productionnpx @capgo/cli bundle upload --channel production5. Monitorea la distribución de versiones
Sección titulada “5. Monitorea la distribución de versiones”Revisa regularmente tu panel de control:
- ¿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 migran desde Ionic AppFlow, aquí está cómo la versión de Capgo se compara en términos de destino:
| Característica | Ionic AppFlow | Capgo |
|---|---|---|
| Ruteo basado en versión | Automático según la versión nativa | Automático a través de defaultChannel + múltiples estrategias |
| Semántica de versión | 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 --native-version bandera en CLI |
| Gestión de canales | Interfaz de usuario web + CLI | Interfaz de usuario web + CLI + API |
| Override de dispositivos | 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 --disable-downgrade |
| Mantenimiento de varias versiones | Gestión de rama/kanal manual | Automático con precedencia de canal |
| Autohospedaje | No | Sí (control total) |
| Análisis de versiones | Basico | Detalles de métricas por versión |
Resolución de problemas
Sección titulada “Resolución de problemas”Los usuarios no están recibiendo actualizaciones
Sección titulada “Los usuarios no están recibiendo actualizaciones”Verifique lo siguiente:
-
Asignación de canal: Verificar que el dispositivo está en el canal correcto
const channel = await CapacitorUpdater.getChannel()console.log('Current channel:', channel) -
Restricciones de versión: Verificar si el paquete tiene requisitos de versión nativa
- Panel de control → Paquetes → Ver la columna “Versión nativa”
-
Ajustes de Semver: Verificar los ajustes del canal ‘
disable-auto-updateAjusteVentana 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
Bundle entregado a la versión incorrecta
Sección titulada “Bundle entregado a la versión incorrecta”- Revisar defaultChannelAsegurarse de que el canal sea correcto en
capacitor.config.ts - Verificar carga de bundleComprobar si el bundle se cargó al canal deseado
- Inspeccionar versión nativaConfirmar que la bandera se utilizó correctamente
--native-versionCambios importantes que afectan versiones antiguas
Sección titulada “Cambios importantes que afectan versiones antiguas”
__CAPGO_KEEP_0__- Solución Inmediata: Sobreescribir dispositivos afectados a 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
Si está migrando desdeIonic AppFlow , la versión de destino funciona muy de manera similar en __CAPGO_KEEP_0__, con mayor flexibilidad:, version targeting works very similarly in Capgo, with improved flexibility:
Mapa de Conceptos
Título de la sección “Mapa de Conceptos”| Flujo de Aplicación Concepto | Capgo Equivalente | Nota |
|---|---|---|
| Canales de Implementación | Capgo Canal | El mismo concepto, más poderoso |
| Bloqueo de Versión Nativa | --native-version Banderín | Control más detallado |
| Prioridad de Canal | Precedencia de canal (sobreescritura → nube → predeterminado) | Precedencia más transparente |
| Destino de despliegue | Control de canal + semver | Disponibles varias estrategias |
| Canal de producción | production Nombre flexible de canal (o cualquier nombre) | Despliegue basado en Git |
| __CAPGO_KEEP_0__ carga de paquete desde rama | CLI bundle upload from branch | Compatibilidad automática de versión |
| bundle upload from branch | 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 da varias estrategias (canales, semver, versión nativa) que se pueden combinar
- Visibilidad mejorada: La consola muestra la distribución de versiones y problemas de compatibilidad
- API Acceso: Control programático completo sobre la versión objetivo
- Auto-hospedaje: Opción para ejecutar tu propio servidor de actualizaciones con la misma lógica de versión
Pasos de migración
Página titulada “Pasos de migración”- Configura tus canales de AppFlow a Capgo canales (usualmente 1:1)
- Configura
defaultChannelencapacitor.config.tspara cada versión mayor - Configura reglas de semver si deseas bloqueo automático en fronteras de versión
- Carga conjuntos de versiones específicas usando
--native-versionflag - Distribución de versiones de monitoreo 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ísticas 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 a través de versiones
Sección titulada “Pruebas A/B a través 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 varias estrategias para la entrega de actualizaciones específicas de versión:
- Ruteo basado en canales: Separación automática de versiones mediante
defaultChannel - : Prevención de actualizaciones a través de fronteras de versión mayor/minor/patch: Prevención de actualizaciones a través de fronteras de versión mayor/minor/patch
- Restricciones de Versión Nativa: Requiere mínimo versión nativa para paquetes
- Prevención de Descenso Automático: Nunca entrega paquetes más antiguos a versiones nativas más nuevas
- Sobrescrituras de Dispositivo: Control manual para pruebas y targeting
Al combinar estas estrategias, puedes lograr la entrega automática de actualizaciones de AppFlow con aún más flexibilidad y control. Elige el enfoque que mejor se adapte a la versión y el flujo de despliegue de tu 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
- Actualizar Comportamiento - Retrasos y condiciones de la versión nativa
Sigue adelante desde la versión objetivo
Sección titulada “Sigue adelante desde la versión objetivo”Si estás utilizando Planificación de versión para planificar la ruta de canales y el despliegue en etapas, conecta con Canales para los detalles de implementación en Canales, Canales para los detalles de implementación en Canales, Canales para el detalle 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 Alcance de Versión para el flujo de trabajo del producto en Solución de Alcance de Versión.