Versione di Riferimento
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 bundle più compatibile agli utenti in base alla versione nativa dell'applicazione. Questo approccio è simile a quello di Ionic AppFlow.Ciò garantisce una gestione semplificata degli aggiornamenti e una distribuzione più rapida, mentre prevenendo problemi di compatibilità.
Panoramica
Sottosezione intitolata “Panoramica”il sistema di targeting delle versioni di Capgo consente di:
- Invia automaticamente aggiornamenti compatibili ai utenti in base alla versione nativa del loro app
- Prevenire modifiche che rompono le versioni dell'app incompatibili
- Gestire più versioni dell'app contemporaneamente senza logica complessa
- Rilascia aggiornamenti senza intoppi su specifiche fasce di utenti
Perché la versione di destinazione è importante (specialmente per gli utenti di AppFlow)
Sottosezione intitolata “Perché la versione di destinazione è importante (specialmente per gli utenti di AppFlow)”Se sei già familiarizzato con 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 garantisce le stesse garanzie di sicurezza, con funzionalità aggiuntive:
- Maggiore controllo granulare sulla corrispondenza delle versioni
- Strategie multiple (canali, semver, vincoli native)
- Migliore visibilità sulla distribuzione delle versioni
- Ecco come API e CLI controllano insieme alla gestione del pannello
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à a ritroso mentre rilasci cambiamenti che rompono
- Vuoi impedire che i pacchetti più recenti rompano le code native più vecchie
- Stai migrando gli utenti gradualmente da una versione all'altra
- Stai migrando da AppFlow e vuoi mantenere la stessa sicurezza degli aggiornamenti
Come Funziona
Sottosezione intitolata “Come Funziona”Capgo utilizza un approccio multi-layered per accoppiare gli utenti con aggiornamenti compatibili:
- Restrizioni di versione nativa: Prevenire i bundle da essere consegnati a versioni native incompatibili
- Routing basato sul canale: Inviare versioni diverse dell'app a canali di aggiornamento diversi
- Controlli di versioning semantico: Bloccare automaticamente gli aggiornamenti ai confini di major/minor/patch
- Override a livello di dispositivo: Targetare dispositivi specifici o gruppi di utenti
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 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]Strategia 1: Routing di versione basato sul canale
Sezione intitolata “Strategia 1: Routing di versione basato sul canale”Questo è l'approccio consigliato per la gestione dei cambiamenti di versione e delle versioni maggiori. È simile al modello di consegna di AppFlow. Esempio di Scenario
Sezione intitolata “Esempio di Scenario”
App v1.x- (100.000 utenti) → canale
productionApp v2.x - (50.000 utenti con cambiamenti di versione) → canale
v2App v3.x - (aggiornamento con cambiamenti di versione) → (10.000 utenti beta) →
v3canale
Implementazione
Sezione intitolata “Implementazione”Passo 1: Configura i canali per ogni versione principale
Sezione intitolata “Passo 1: Configura i canali per ogni versione principale”// 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 } }};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-assignPassaggio 3: Carica bundle specifico per versione
Sezione intitolata “Passaggio 3: Carica bundle specifico per versione”# 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 - La routing dei canali avviene automaticamente
- Separazione chiara - Ogni versione ha il proprio flusso di aggiornamento
- Targeting flessibile - Invia aggiornamenti a gruppi di versioni specifiche
- Rollout sicuro - Le modifiche di rottura non raggiungono le versioni incompatibili
Strategy 2: Controlli di versioning semantico
Sezione intitolata “Strategy 2: Controlli di versioning semantico”Utilizza i controlli di versioning semantico integrati di Capgo per prevenire gli aggiornamenti oltre i confini delle versioni. per prevenire gli aggiornamenti oltre i confini delle versioni.
Disabilita l'aggiornamento automatico tra versioni principali
Sezione intitolata “Disabilita l'aggiornamento automatico tra versioni principali”# Create a channel that blocks major version updatesnpx @capgo/cli channel create stable --disable-auto-update majorQuesta configurazione significa:
- Gli utenti con versione dell'app 1.2.3 riceveranno aggiornamenti fino a 1.9.9
- Gli utenti non riceveranno la versione automaticamente 2.0.0 Previene i cambiamenti di rotta che raggiungono le versioni native precedenti __CAPGO_KEEP_0__
- Prevents breaking changes from reaching older native code
- The comparison uses the native baseline sent as
version_build
Opzioni di controllo granulari
Sezione intitolata “Opzioni di controllo granulari”# 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 noneStrategia 3: vincoli di versione native
Sezione intitolata “Strategy 3: vincoli di versione nativa”Specificare i requisiti minimi di versione nativa per i pacchetti per prevenire la consegna a dispositivi incompatibili.
Condizione di ritardo di versione nativa
Sezione intitolata “Condizione di ritardo di versione nativa”Quando si carica un pacchetto, è possibile 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"Uso dei casi
Sezione intitolata “Uso dei casi”-
Nuovo Plugin Nativo Richiesto
Finestra del terminale # Bundle needs Camera plugin added in v2.0.0npx @capgo/cli bundle upload --native-version "2.0.0" -
Modifiche Native API
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"
Prevenzione della Riduzione Automatica
Sezione intitolata “Prevenzione della Riduzione Automatica”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”Nell'area di controllo Capgo:
- Vai a Canali → Seleziona il tuo canale
- Abilita “Disabilita l'auto-downgrade nativo”
- Salva le modifiche
O via CLI:
npx @capgo/cli channel set production --disable-downgrade- Dispositivo dell'utente: Versione nativa 1.2.5
- Pacco di canale: Versione 1.2.3
- Risultato: Aggiornamento bloccato (sarebbe una versione precedente)
Questo è utile quando:
- Gli utenti hanno installato manualmente una versione più recente dalla store di app
- Hai bisogno di assicurarti che gli utenti abbiano sempre le patch di sicurezza più recenti
- Vuoi prevenire i bug di regressione
Strategia 5: Targeting a livello di dispositivo
Sottosezione intitolata “Strategia 5: Targeting a livello di dispositivo”Sovrascrivi l'assegnazione del canale per dispositivi o gruppi di utenti specifici.
Forza Versione Specifica per Test
Sezione intitolata “Forza Versione Specifica per Test”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 Dispositivo
Sezione intitolata “Dashboard Override Dispositivo”Nella dashboard Capgo :
- Vai a Dispositivi → Trova dispositivo
- Clicca Imposta Canale o Imposta Versione
- Sostituisci con una versione specifica di canale o pacchetto
- Il dispositivo riceverà aggiornamenti dalla fonte sovrascritta
Flusso di lavoro completo AppFlow-Style
Sezione intitolata “Flusso di lavoro completo AppFlow-Style”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: 'atBackground', defaultChannel: 'production', } }};2. Cambio di rilascio (App v2.0.0)
Sezione intitolata “2. Cambio di rilascio (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. 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. Monitorare la distribuzione delle versioni
Sezione intitolata “4. Monitorare la distribuzione delle versioni”Utilizza il dashboard Capgo per tracciare:
- Quanti utenti sono su v1 vs v2
- Tassi di adozione dei bundle per versione
- Errori o crash per versione
5. Deprecare la versione vecchia
Sezione intitolata “5. Deprecare la versione vecchia”Una volta che l'utilizzo di v1 scende sotto il 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)Priorità dei canali
Sottosezione intitolata “Priorità dei canali”Quando esistono più configurazioni di canali, Capgo utilizza questo ordine di priorità:
- Sovrascrittura del dispositivo (Pannello di controllo o API) - Priorità più alta e visibile nel Pannello di controllo per la sovra-scrittura del dispositivo
- Canale plugin locale via
setChannel()- Memorizzato sul dispositivo solo e non mostrato nel Pannello di controllo per la sovra-scrittura del dispositivo - canale predefinito in capacitor.config.ts
- Canale predefinito (Impostazione Cloud) - Priorità più bassa
Pratiche Raccomandate
Sezione intitolata “Pratiche Raccomandate”1. Impostare sempre defaultChannel per le Versioni Principali
Sezione intitolata “1. Impostare sempre defaultChannel per le Versioni Principali”// ✅ 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
Sezione 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. Monitorare la distribuzione delle versioni
Sezione intitolata “5. Monitorare la distribuzione delle versioni”Controlla regolarmente il tuo dashboard:
- Gli utenti stanno aggiornando a versioni native più recenti?
- Le vecchie versioni continuano a ricevere traffico elevato?
- Dovresti deprecare i vecchi canali?
Confronto con Ionic AppFlow
Sezione intitolata “Confronto con Ionic AppFlow”Per le squadre che stanno migrando da Ionic AppFlow ecco come Capgo si differenzia per quanto riguarda la versione di destinazione
| Caratteristica | Ionic AppFlow | Capgo |
|---|---|---|
| Routing basato sulla versione | Automatico in base alla versione nativa | Automatico via defaultChannel + strategie multiple |
| Versioning semantico | Supporto base | Avanzato con --disable-auto-update (major/minor/patch) |
| Vincoli di versione nativa | Configurazione manuale nel dashboard di AppFlow | Integrato --native-version flag in CLI |
| Gestione del canale | Web UI + CLI | Web UI + CLI + API |
| Override del dispositivo | Controllo limitato a livello di dispositivo | Controllo completo tramite Dashboard/API |
| Prevenzione del downgrade automatico | Sì | Sì via --disable-downgrade |
| Manutenzione multi-versione | Gestione manuale di branch e canali | Automatizzato con precedenza di canale |
| Auto-hosting | No | Sì (controllo completo) |
| Analisi di versione | Base | Metriche dettagliate per versione |
Risoluzione dei problemi
Sezione intitolata “Risoluzione dei problemi”Utenti che non ricevono aggiornamenti
Sezione intitolata “Utenti che non ricevono aggiornamenti”Controlla il seguente:
-
Assegnazione del canale: Verifica che il dispositivo sia sul canale corretto
const channel = await CapacitorUpdater.getChannel()console.log('Current channel:', channel) -
Restrizioni di versione: Controlla se il pacchetto ha richieste di versione native
- Pannello di controllo → Pacchetti → Verifica la colonna "Versione nativa"
-
Impostazioni Semver: Verifica il canale di "
disable-auto-update__CAPGO_KEEP_0__"Finestra del terminale npx @capgo/cli channel list -
Override dispositivo: Controlla se il dispositivo ha un override manuale
- Pannello di controllo → Dispositivi → Cerca dispositivo → Verifica canale/versione
Pacchetto consegnato alla versione sbagliata
Sezione intitolata "Pacchetto consegnato alla versione sbagliata"- Recensisci defaultChannel: Assicurati di utilizzare il canale corretto in
capacitor.config.ts - Verifica l'upload del bundle: Verifica che il bundle sia stato caricato sul canale inteso
- Ispeziona la versione nativa: Conferma
--native-versionsegliere la bandiera è stata utilizzata correttamente
Cambiamenti Rilevanti che Affectano le Versioni Vecchie
Sottosezione intitolata “Cambiamenti Rilevanti che Affectano le Versioni Vecchie”- Soluzione di Emergenza: Sovrascrivi i dispositivi colpiti con il bundle sicuro
- Pannello di controllo → Dispositivi → Seleziona in massa → Imposta la versione
- Soluzione a Lungo Termine: Crea canali versionati e gestisci rami separati
- Prevenzione: Testa sempre gli aggiornamenti su dispositivi rappresentativi prima del rollout
Migrazione da Ionic AppFlow
Se stai migrando daIonic AppFlow , la versione di destinazione funziona in modo molto simile a __CAPGO_KEEP_0__, con maggiore flessibilità:, version targeting works very similarly in Capgo, with improved flexibility:
Rami di AppFlow
__CAPGO_KEEP_0__ Equivalent| Migrazione da Ionic AppFlow | Capgo Equivalent | Note |
|---|---|---|
| Canale di distribuzione | Capgo Canale | Stesso concetto, più potente |
| Versione nativa bloccata | --native-version flag | Controllo più dettagliato |
| Priorità del canale | Precedenza del canale (override → cloud → default) | Precedenza più trasparente |
| Destinazione di distribuzione | Canale + semver controlla | Strategie multiple disponibili |
| Canale di produzione | production canale (o qualsiasi nome) | Nominazione flessibile |
| Deploy con Git | CLI caricamento del bundle da ramo | Lo stesso workflow |
| Versione automatica | defaultChannel Vincoli di versione con + | Rafforzato con strategie multiple |
Differenze chiave per gli utenti di AppFlow
Sottosezione intitolata “Differenze chiave per gli utenti di AppFlow”- Più Controllo: Capgo offre diverse 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 completo programmatico sulla versione di destinazione
- Self-Hosting: Opzione per eseguire il proprio server di aggiornamento con la stessa logica di versione
Passaggi di Migrazione
Sezione intitolata “Passaggi di Migrazione”- Mappa i canali AppFlow a Capgo canali (di solito 1:1)
- Imposta
defaultChannelincapacitor.config.tsper ogni versione principale - Configura le regole semver se desideri il blocco automatico ai confini di versione
- Carica bundle specifici per versione utilizzando
--native-versionflag - Monitora la distribuzione delle versioni nel dashboard Capgo
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' }) }}Feature Flags per versione
Sezione intitolata “Feature Flags 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 A/B tra versioni
Sezione intitolata “Test 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
Sezione intitolata “Riepilogo”Capgo fornisce strategie multiple per la consegna di aggiornamenti specifici per versione:
- Routing basato sui canali : Separazione automatica della versione via
defaultChannel - Semantic Versioning : Prevenire gli aggiornamenti attraverso i confini di versione maggiore/minore/patch
- Versioni native vincolate : Richiedere la versione minima nativa per i pacchetti
- Prevenzione del downgrade automatico : Non consegnare mai pacchetti più vecchi alle versioni native più nuove
- Device Overrides: Control manuale per test e targeting
Combinando queste strategie, puoi raggiungere l'aggiornamento automatico di 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 significative - Strategia dettagliata di versioning dei canali
- Gestione dei canali - Riferimento completo alla configurazione dei canali
- Comportamento dell'aggiornamento - Ritardi e condizioni native della versione
Continua da Targeting delle versioni
Sezione intitolata “Continua da Targeting delle versioni”If sei stai utilizzando Versione Targeting per pianificare la routing dei canali e la distribuzione in fasi, connettilo con Canali per i dettagli di implementazione in Canali, Canali per i dettagli di implementazione in Canali, Canali per i dettagli di implementazione in Canali, Soluzione di Test Beta per il flusso di lavoro del prodotto in Soluzione di Test Beta, e Soluzione di Versione Targeting per il flusso di prodotto nella Version Targeting Solution.