Target di Versione
Copia un prompt di configurazione con i passaggi di installazione e la guida markdown completa per questo plugin.
Questa guida spiega come consegnare automaticamente il pacchetto più compatibile agli utenti in base alla versione nativa dell'applicazione, simile all'approccio di Ionic AppFlow. Ciò garantisce una gestione semplificata degli aggiornamenti e una distribuzione più veloce, mentre prevenendo problemi di compatibilità.
Panoramica
Sezione intitolata “Panoramica”Capgo's sistema di targeting di versione consente di:
- Distribuire aggiornamenti compatibili in modo automatico agli utenti in base alla versione nativa dell'applicazione
- Prevenire i cambiamenti di rotta dalle versioni dell'applicazione incompatibili
- Gestire più versioni dell'applicazione in modo simultaneo senza logica complessa
- Eseguire aggiornamenti agli utenti specifici
Perché la versione di destinazione è importante (Soprattutto per gli utenti di AppFlow)
Titolo della sezione “Perché la versione di destinazione è importante (Soprattutto per gli utenti di AppFlow)”Se sei abituato a Ionic AppFlow, sai quanto sia cruciale assicurarsi che gli utenti ricevano solo aggiornamenti compatibili. AppFlow ha automaticamente associato i pacchetti di aggiornamento live ai versioni native dell'applicazione, impedendo che il JavaScript incompatibile venisse consegnato alle versioni native più vecchie di code.
Capgo fornisce le stesse garanzie di sicurezza, con funzionalità aggiuntive:
- Maggiore controllo sulla versione di matching
- Strategie multiple (canali, semver, vincoli nativi)
- Migliore visibilità sulla distribuzione delle versioni
- API e CLI controllano insieme alla gestione della dashboard
Questa approccio è particolarmente utile quando:
- Hai utenti su diverse versioni principali dell'app (ad esempio, v1.x, v2.x, v3.x)
- Hai bisogno di mantenere la compatibilità verso il basso mentre esegui cambiamenti breaking
- Vuoi impedire che i pacchetti più recenti rompano le versioni native precedenti code
- Stai migrando gli utenti gradualmente da una versione all'altra
- Stai migrando da AppFlow e vuoi mantenere la stessa sicurezza di aggiornamento
Come Funziona
Sezione intitolata “Come Funziona”Capgo utilizza un approccio multi-layered per accoppiare gli utenti con aggiornamenti compatibili:
- Restrizioni di versione nativa: Impedisci ai pacchetti di essere consegnati alle versioni native incompatibili
- Routing basato sul canaleRouta diverse versioni dell'applicazione verso diverse canali di aggiornamento
- Controlli di Semantica di VersioneRispetta automaticamente gli aggiornamenti ai confini di versione maggiore/minore/patch
- Sovrascritture a livello di dispositivoMirare dispositivi o gruppi di utenti specifici
Flusso di versione di corrispondenza
Sezione intitolata “Flusso di versione di corrispondenza”graph TD A[User Opens App] --> B{Check Device Override} B -->|Override Set| C[Use Override Channel] B -->|No Override| D{Check defaultChannel in App} D -->|Has defaultChannel| E[Use App's defaultChannel] D -->|No defaultChannel| F[Use Cloud Default Channel] C --> G{Check Version Constraints} E --> G F --> G G -->|Compatible| H[Deliver Update] G -->|Incompatible| I[Skip Update]Strategia 1: Routing di versione basato sui canali
Sezione intitolata “Strategia 1: Routing di versione basato sui canali”Questo è l'approccio consigliato per la gestione delle modifiche di rottura e delle aggiornamenti di versione maggiore. È simile al modello di consegna di AppFlow.
Scenario di esempio
Sezione intitolata “Scenario di esempio”- App v1.x (100.000 utenti) →
productioncanale - App v2.x (50.000 utenti con modifiche di rottura) →
v2canale - App v3.x (10.000 utenti beta) →
v3canale
Implementazione
Sezione intitolata “Implementazione”Passo 1: Configura i canali per ogni versione maggiore
Sezione intitolata “Passo 1: Configura i canali per ogni versione maggiore”// 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: true, 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: true, 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: true, defaultChannel: 'v3', // Routes v3 users automatically } }};Passo 2: Crea i canali
Sezione intitolata “Passo 2: Crea i canali”# 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-assignPasso 3: Carica i pacchetti specifici per versione
Sezione intitolata “Passo 3: Carica bundle versione-specifico”# 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 v3Vantaggi
Sezione intitolata “Vantaggi”- Zero code modifiche - Il routino del canale avviene automaticamente
- Separazione chiara - Ogni versione ha il proprio flusso di aggiornamento
- Targeting flessibile - Invia gli aggiornamenti a specifiche gruppi di versioni
- Rulli sicuri - Le modifiche di rottura non raggiungono le versioni incompatibili
Controllo delle versioni semantiche
Sezione intitolata “Controllo delle versioni semantiche”Utilizza i controlli di versioning semantiche integrati di Capgo per evitare gli aggiornamenti tra i confini delle versioni.
Disabilita l'aggiornamento automatico tra versioni maggiori
Sezione intitolata “Disabilita l'aggiornamento automatico tra versioni maggiori”# Create a channel that blocks major version updatesnpx @capgo/cli channel create stable --disable-auto-update majorQuesta configurazione significa:
- Gli utenti con la versione dell'app 1.2.3 riceveranno aggiornamenti fino a 1.9.9
- Gli utenti riceveranno NON la versione 2.0.0 automaticamente
- Preclude le modifiche di rotture da raggiungere le versioni native più vecchie code
Opzioni di controllo granulari
Sezione intitolata “Opzioni di controllo granulari”# Block minor version updates (1.2.x won't get 1.3.0)npx @capgo/cli channel set stable --disable-auto-update minor
# Block patch updates (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 noneSchema 3: vincoli di versione native
Sezione intitolata “Schema 3: vincoli di versione native”Specificare i requisiti minimi di versione native per i pacchetti per prevenire la consegna a dispositivi incompatibili.
Utilizzo della condizione di ritardo della versione nativa
Sezione intitolata “Utilizzo della condizione di ritardo della versione nativa”Quando si carica un pacchetto, puoi specificare una versione nativa minima:
# This bundle requires native version 2.0.0 or highernpx @capgo/cli bundle upload \ --channel production \ --native-version "2.0.0"Casi d'uso
Sezione intitolata “Casi d'uso”-
Richiede nuovo plugin nativo
Finestra del terminale # Bundle needs Camera plugin added in v2.0.0npx @capgo/cli bundle upload --native-version "2.0.0" -
Modifiche native API che rompono
Finestra del terminale # Bundle uses new Capacitor 6 APIsnpx @capgo/cli bundle upload --native-version "3.0.0" -
Migrazione graduale
Finestra del terminale # Test bundle only on latest native versionnpx @capgo/cli bundle upload \--channel beta \--native-version "2.5.0"
Strategia 4: Prevenzione del downgrade automatico
Sottosezione intitolata “Strategia 4: Prevenzione del downgrade automatico”Prevenire agli utenti di ricevere pacchetti più vecchi della loro versione nativa corrente.
Abilita nelle impostazioni del canale
Sottosezione intitolata “Abilita nelle impostazioni del canale”Nella dashboard Capgo:
- Vai a Canali → Seleziona il tuo canale
- Abilita Disabilita l'auto downgrade sotto nativo
- Salva modifiche
O via CLI:
npx @capgo/cli channel set production --disable-downgradeEsempio
Sezione intitolata “Esempio”- Dispositivo dell'utente: Versione nativa 1.2.5
- Bundle del canale: Versione 1.2.3
- RisultatoL'aggiornamento è bloccato (sarebbe una discesa)
Questo è utile quando:
- Gli utenti hanno installato manualmente una versione più recente dall'App Store
- È necessario assicurarsi che gli utenti abbiano sempre le patch di sicurezza più aggiornate
- Desideri prevenire i bug di regressione
Schema 5: Targeting a livello di dispositivo
Sezione intitolata “Schema 5: Targeting a livello di dispositivo”Sostituisci l'assegnazione del canale per dispositivi o gruppi di utenti specifici
Forza versione specifica per le prove
Sezione intitolata “Forza versione specifica per le prove”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' }) }}Dashboard Override del dispositivo
Sezione intitolata “Dashboard Override del dispositivo”Nel Capgo dashboard:
- Vai a Dispositivi → Trova dispositivo
- Clicca Imposta canale o Imposta versione
- Sostituisci con canale o versione bundle specifico
- Il dispositivo riceverà aggiornamenti da fonte sovrascritta
Flusso di lavoro AppFlow completo
Sezione intitolata “Flusso di lavoro AppFlow completo”Ecco un esempio completo che combina tutte le strategie:
1. Configurazione iniziale (App v1.0.0)
Sezione intitolata “1. Configurazione iniziale (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: true, defaultChannel: 'production', } }};2. Rilascio di Modifica Rottura (App v2.0.0)
Sezione intitolata “2. Rilascio di Modifica Rottura (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: true, defaultChannel: 'v2', // New users get v2 channel } }};3. Invia Aggiornamenti a Tutte le Versioni
Sezione intitolata “3. Invia Aggiornamenti a Tutte le Versioni”# 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. Monitora la Distribuzione delle Versioni
Sezione intitolata “4. Monitora la Distribuzione delle Versioni”Utilizza il dashboard Capgo per monitorare:
- Quanti utenti sono su v1 vs v2
- Tassi di adozione dei bundle per versione
- Errori o crash per versione
5. Deprecare Versione Obsoleta
Sezione intitolata “5. Deprecare Versione Obsoleta”Una volta che l'utilizzo di v1 scende al di sotto del threshold:
# 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)Precedenza del Canale
Se esistono più configurazioni di canale, __CAPGO_KEEP_0__ utilizza questo ordine di precedenza:When multiple channel configurations exist, Capgo uses this precedence order:
- (Pannello di controllo o __CAPGO_KEEP_0__) - Priorità più alta (Dashboard or API) - Highest priority
- via Cloudflare
setChannel()chiamata - canale predefinito in capacitor.config.ts
- Canale predefinito (impostazione Cloud) - Priorità più bassa
Pratiche raccomandate
Sezione intitolata “Best Practices”1. Imposta sempre defaultChannel per le versioni maggiori
Sezione intitolata “1. Imposta sempre defaultChannel per le versioni maggiori”// ✅ 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. Utilizza la versione semantica
Sezione intitolata “2. Utilizza la versione semantica”# ✅ Good1.0.0 → 1.0.1 → 1.1.0 → 2.0.0
# ❌ Bad1.0 → 1.1 → 2 → 2.53. Mantieni rami separati
Sezione intitolata “3. Mantieni rami separati”# ✅ Good: Separate branches per major versionmain (v3.x)v2-maintenance (v2.x)v1-maintenance (v1.x)
# ❌ Bad: Single branch for all versions4. Testa prima della distribuzione
Sottosezione intitolata “4. Testa prima della distribuzione”# Test on beta channel firstnpx @capgo/cli bundle upload --channel beta
# Monitor for issues, then promote to productionnpx @capgo/cli bundle upload --channel production5. Monitora la distribuzione delle versioni
Sottosezione intitolata “5. Monitora la distribuzione delle versioni”Controlla regolarmente il tuo dashboard:
- Agli utenti stanno aggiornando a versioni native più recenti?
- Le vecchie versioni continuano a ricevere un alto traffico?
- Devi deprecare i vecchi canali?
Confronto con Ionic AppFlow
Sottosezione intitolata “Confronto con Ionic AppFlow”Per le squadre che stanno migrando da Ionic AppFlowEcco come la versione di Capgo si compara:
| Funzione | Ionic AppFlow | Capgo |
|---|---|---|
| Routing basato sulla versione | Automatico in base alla versione nativa | Automatico tramite defaultChannel + strategie multiple |
| Versioning semantico | Supporto base | Avanzato con --disable-auto-update (major/minor/patch) |
| Restrizioni di versione nativa | Configurazione manuale nel dashboard di AppFlow | Integrato --native-version bandiera in CLI |
| Gestione del canale | Web UI + CLI | Web UI + CLI + API |
| Sovrascrizioni di dispositivo | Controllo limitato a livello di dispositivo | Controllo completo tramite Dashboard/API |
| Prevenzione della discesa automatica | Sì | Sì via --disable-downgrade |
| Manutenzione multi-versione | Gestione del ramo/canale manuale | Automatizzato con precedenza del canale |
| Auto-impostazione | No | Sì (controllo completo) |
| Analisi delle versioni | Basico | Dettagliati per versione |
Risoluzione dei problemi
Sezione intitolata “Risoluzione dei problemi”Utenti che non ricevono aggiornamenti
Sezione intitolata “Utenti che non ricevono aggiornamenti”Controlla i seguenti:
-
Assegnazione del canale: Verifica che il dispositivo sia sul canale corretto
const channel = await CapacitorUpdater.getChannel()console.log('Current channel:', channel) -
Restrizioni di versione: Verifica se il bundle richiede versioni native
- Pannello di controllo → Bundle → Verifica la colonna "Versione nativa"
-
Impostazioni Semver: Verifica le impostazioni del canale
disable-auto-updateFinestra del terminaleCopia negli appunti npx @capgo/cli channel list -
: Verifica se il dispositivo ha impostato una sovrascrittura manualePannello di controllo → Dispositivi → Cerca dispositivo → Verifica canale/vers.
- Copia negli appunti
Pacchetto Spedito alla Versione Errata
Sezione intitolata “Pacchetto Spedito alla Versione Errata”- Recensisci defaultChannel: Assicurati di utilizzare il canale corretto in
capacitor.config.ts - Controlla l'Upload del Pacchetto: Verifica che il pacchetto sia stato caricato nel canale inteso
- Verifica la Versione Nativa: Conferma che
--native-versionflag è stato utilizzato correttamente
Modifiche Critiche che Affectano le Versioni Antiche
Sezione intitolata “Modifiche Critiche che Affectano le Versioni Antiche”- Soluzione di Emergenza: Sovrascrivi dispositivi interessati a bundle sicuro
- Dashboard → Dispositivi → Selezione di massa → Imposta Versione
- Soluzione a lungo termine: Crea canali con versione e mantieni rami separati
- Prevenzione: Testa sempre gli aggiornamenti su dispositivi rappresentativi prima della distribuzione
Migrazione da Ionic AppFlow
Se stai migrando daIonic AppFlow , la versione di targeting funziona in modo molto simile a __CAPGO_KEEP_0__, con maggiore flessibilità:, version targeting works very similarly in Capgo, with improved flexibility:
Migrazione da Ionic AppFlow
Sezione intitolata “Mappatura di concetti”| Flusso di App | Capgo Equivalente | Note |
|---|---|---|
| Canale di distribuzione | Capgo Canale | Lo stesso concetto, più potente |
| Blocco di versione nativo | --native-version Bandiera | Controllo più dettagliato |
| Priorità del canale | Precedenza del canale (override → cloud → predefinito) | Precedenza più trasparente |
| Destinazione di distribuzione | Canale + semver controlla | Disponibili diverse strategie |
| Canale di produzione | production nome del canale (o qualsiasi altro nome) | Nominatività flessibile |
| Distribuzione basata su Git | CLI caricamento del pacchetto dall'origine | Lo stesso workflow |
| Compatibilità automatica con le versioni | defaultChannel + vincoli di versione | Rafforzato con più strategie |
Differenze chiave per gli utenti di AppFlow
Sezione intitolata “Differenze chiave per gli utenti di AppFlow”- Maggiore Controllo: Capgo offre più strategie (canali, semver, versione nativa) che possono essere combinate
- Visibilità Migliorata: La dashboard mostra la distribuzione delle versioni e gli eventuali problemi di compatibilità
- API Accesso: Controllo programmatico completo sulla versione di destinazione
- Auto-Hosting: Opzione per eseguire il proprio server di aggiornamento con la stessa logica di versione
Passaggi di Migrazione
Passaggi di Migrazione- Mappa i canali AppFlow ai canali Capgo (di solito 1:1)
- Impostare
defaultChannelincapacitor.config.tsper ogni versione maggiore - Configura le regole semver se desideri il blocco automatico ai confini delle versioni
- Carica i pacchetti specifici per versione utilizzando
--native-versionflag - Monitorare la distribuzione delle versioni in Capgo dashboard
Modelli avanzati
Sezione intitolata “Modelli avanzati”Esecuzione graduale per versione
Sezione intitolata “Esecuzione graduale per versione”// 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' }) }}Bandiere di feature per versione
Sezione intitolata “Bandiere di feature per versione”// 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() }}Test di A/B su diverse versioni
Sezione intitolata “Test di A/B tra versioni”// 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 }) }}Riepilogo
RiepilogoCapgo fornisce diverse strategie per la consegna di aggiornamenti specifici per versione:
- Routing per canaleSeparazione di versione automatica tramite
defaultChannel - Versioning Semantico: Evita aggiornamenti tra versioni maggiori/minori/patch
- Restrizioni di versione nativaRichiedi versione nativa minima per bundle
- Prevenzione Riduzione VersioneNon consegnare mai bundle più vecchi a versioni native più nuove
- Override dispositivoControllo manuale per il testing e la destinazione
Combinando queste strategie, puoi ottenere la consegna di aggiornamenti automatica AppFlow con ancora più flessibilità e controllo. Scegli l'approccio che meglio si adatta al flusso di versioning e distribuzione del tuo app.
Per ulteriori informazioni sui dettagli specifici:
- Guida alle modifiche di versione - Strategia dettagliata di versioning del canale
- Gestione dei canali - Riferimento completo di configurazione del canale
- Comportamento dell'aggiornamento - Versione nativa ritardi e condizioni