Avete mai desiderato poter inviare una modifica direttamente a un utente specifico per la loro revisione e feedback immediati - senza chiedergli di scaricare e installare una nuova versione da TestFlight o Google Play?
Ho avuto clienti che mi hanno chiesto miglioramenti che ho potuto implementare velocemente, ma ottenere i risultati nelle loro mani per la validazione significava inviare un aggiornamento a tutti gli utenti (rischioso per un cambiamento sperimentale) o creare un build personalizzato per il cliente (un fastidio per entrambi).
C'era bisogno di flessibilità. Gli sviluppatori volevano poter servire aggiornamenti diversi a gruppi diversi di utenti, come stakeholder non tecnici, QA o l'intera base di utenti quando opportuno.
Non c'era modo per un build di produzione di passare a una versione in corso di sviluppo, raccogliere feedback e poi tornare alla produzione.
È questo che il 'channel surfing' consente. Un'app installata su un dispositivo dell'utente può passare da un canale di aggiornamento all'altro in esecuzione, trasformando un'app di produzione in uno spazio flessibile per la revisione e l'iterazione piuttosto che un punto di arrivo fissato. Questo è particolarmente utile per i stakeholder non tecnici che lavorano con app di produzione, consentendo loro di testare le modifiche e dare feedback direttamente nell'app che già hanno installato.
Capire i canali di aggiornamento
Aggiornamenti dei canali sono come Capgo puntano gli aggiornamenti a specifiche costruzioni. Ogni costruzione è associata a un canale e quel canale determina quali aggiornamenti riceverà.
Per esempio, puoi pubblicare gli aggiornamenti in un canale senza influenzare gli utenti su preview In passato, cambiare canale richiedeva l'installazione di una diversa costruzione nativa o la modifica manuale delle assegnazioni degli dispositivi attraverso il pannello di controllo. productionIl canali in __CAPGO_KEEP_0__ ti consentono di:
Channels in Capgo allow you to:
- Eseguire test A/B assegnando gli utenti a canali diversi
- Rilasciare gradualmente nuove funzionalità
- Creare programmi di testing beta
- Debuggare problemi di produzione con utenti individuali
- Se non sei familiare con i canali di aggiornamento, la documentazione dei canali di __CAPGO_KEEP_0__
__CAPGO_KEEP_0__ Capgo copre questi aspetti in modo più dettagliato.
Cos'è il Channel Surfing?
Il channel surfing consente a un'app installata di estrarre aggiornamenti da diverse flussi di aggiornamento senza dover reinstallare. Un'app installata può cambiare canale di aggiornamento in esecuzione e continuerà a ricevere aggiornamenti dal canale selezionato fino a quando non viene disinstallata o cambiata a un altro canale.
In pratica, ciò significa che il proprietario di un prodotto o un QA può cambiare una production costruzione a, ad esempio, un preview canale, provare le ultime modifiche. Quando hanno finito di testare, cambiano di nuovo a production ancora una volta. Non è necessario reinstallare o creare un build di anteprima separato.
Sotto la cappa, il channel surfing funziona permettendo all'app di dire al client degli aggiornamenti quale canale utilizzare. Questa scelta può essere cambiata in esecuzione e rimane in vigore fino a quando non viene eliminata o sostituita.
Come implementare il Channel Surfing
Prima di poter provare il channel surfing, il tuo progetto deve essere configurato con Capgo Live Updates. Per configurarlo, segui il Capgo quickstart guide.
L'unica configurazione richiesta per il channel surfing è l'abilitazione di "Consenti ai dispositivi di associarsi da soli" su ogni canale che desideri cambiare in Capgo dashboard. No code modifiche o modifiche di configurazione necessarie oltre a quelle.
Al suo interno, la navigazione tra canali è guidata da un singolo API chiamata:
import { CapacitorUpdater } from '@capgo/capacitor-updater';
await CapacitorUpdater.setChannel({ channel: 'your-channel' });
Questo imposta il canale utilizzato quando si richiedono aggiornamenti a Capgo. Scopri di più sulla funzione setChannel API.
Canale di rete istantaneo (v5.34.0+)
Partendo dalla versione del plugin 5.34.0, 6.34.0, 7.34.0 o 8.0.0 (in base alla tua versione maggiore), setChannel() funziona in modo diverso e molto più veloce:
- Validazione del backend (lettura solo): Viene inviata una richiesta al backend di Capgo per validare il canale se è consentito
- Aggiornamento del storage locale: Se la validazione ha successo, il canale viene salvato nel storage locale del dispositivo
- Effetto immediato: La prossima verifica degli aggiornamenti utilizza immediatamente il nuovo canale
In precedenza, setChannel() aveva salvato l'override del canale nel database backend (come Dashboard o API modifiche). I dispositivi dovevano attendere la riproduzione del backend (fino a 2 minuti) prima che il nuovo canale fosse riconosciuto. Il nuovo comportamento legge solo dal backend (per la validazione) e memorizza localmente, rendendo le scelte dei canali istantanee.
Ciclo di Scelta del Canale Completo
Per una migliore esperienza utente, desidererai spesso fare di più che solo cambiare il canale e attendere il prossimo riavvio dell'applicazione. Un approccio comune è quello di verificare immediatamente gli aggiornamenti, scaricarli se disponibili e ricaricare l'applicazione affinché l'utente atterri direttamente sull'aggiornamento selezionato del canale.
Un flusso tipico assomiglia a questo:
- Cambia il canale (
setChannel) - Verifica un aggiornamento (
getLatest) - Esegui l'aggiornamento (
download,setonext) - Ricarica l'applicazione se necessario (
reload)
Ecco un esempio completo:
import { CapacitorUpdater } from '@capgo/capacitor-updater';
async function switchChannel(selectedChannel: string) {
try {
// 1. Set the updates channel (with optional auto-update trigger)
await CapacitorUpdater.setChannel({
channel: selectedChannel,
triggerAutoUpdate: true // Immediately check for updates
});
console.log(`Switched to channel: ${selectedChannel}`);
// If you want more control, handle the update manually:
// const latest = await CapacitorUpdater.getLatest();
// if (latest.url) {
// const bundle = await CapacitorUpdater.download({
// url: latest.url,
// version: latest.version
// });
// await CapacitorUpdater.set({ id: bundle.id });
// }
} catch (error) {
console.error('Failed to switch channel:', error);
}
}
// Switch to the beta channel
switchChannel('beta');
La struttura di questo flusso è a tua scelta. Potresti suddividere questi passaggi in più interazioni o eseguirli tutti contemporaneamente. Indipendentemente da come strutturi il flusso, assicurati di tenere conto degli errori. Problemi di rete o un canale non valido possono impedire che un aggiornamento venga applicato.
L'Unico Requisito: Abilita l'Auto-Assegnazione
Questo è l'unica cosa che devi fare per abilitare il naviglio dei canali. Prima che il tuo app possa passare a un canale utilizzando setChannel(), devi abilitare l'auto-assegnazione per quel canale nel tuo dashboard Capgo:
- Vai al Sezione dei canali del tuo dashboard Capgo
- Clicca sul nome del canale che desideri gestire
- Abilita “Consenti ai dispositivi di auto-associarsi”
- Salva le modifiche

Ecco fatto. Nessuna modifica di configurazione è necessaria nell'app. Nessuna defaultChannel impostazione è richiesta. Basta abilitare l'assegnazione auto sui canali che desideri che gli utenti possano cambiare.
Se questa impostazione è disabilitata, qualsiasi tentativo di chiamare setChannel() con questo canale fallirà e l' channelPrivate evento si attiverà.
Elenco dei Canali Disponibili
Puoi estrarre l'elenco dei canali disponibili per l'assegnazione auto:
const { channels } = await CapacitorUpdater.listChannels();
console.log('Available channels:', channels.map(c => c.name));
// Use this to build a channel selector UI
Questo restituisce solo i canali dove l'assegnazione auto è abilitata.
Ottieni il Canale Attuale
Controlla quale canale il dispositivo è attualmente assegnato a:
const { channel } = await CapacitorUpdater.getChannel();
console.log('Current channel:', channel);
Ritornare al Canale Predefinito
Per rimuovere l'override del canale e tornare al predefinito:
await CapacitorUpdater.unsetChannel({});
Questo disconnette il dispositivo da qualsiasi canale assegnato specificamente, causando il suo ritorno al defaultChannel nel tuo config o il cloud predefinito.
Come Testare la Navigazione tra Canali
Per vedere la navigazione tra canali in azione, avrai bisogno di un rilascio build - il @capgo/capacitor-updater API è progettato per i rilasci. In costruzioni di debug, l'app carica tipicamente JavaScript da un server di sviluppo al posto di questo, il che bypassa il normale flusso di aggiornamento.
Requisiti
L'unica richiesta per la navigazione tra canali è l'abilitazione “Consenti ai dispositivi di associarsi da soli” su ogni canale che desideri consentire lo switching a. Non sono necessarie modifiche di config nel tuo app.
Creazione di un Test Build
Costruisci l'app come di consueto:
bun run build && npx cap sync
Poi crea le build native utilizzando Xcode o Android Studio, o utilizza il tuo pipeline CI/CD. L'app inizierà sul canale impostato come default nel tuo Capgo dashboard.
Pubblicazione di Aggiornamenti su Canali diversi
Una volta installata l'app, pubblica aggiornamenti su canali diversi:
# Publish to preview channel
npx @capgo/cli@latest bundle upload --channel preview
# Publish to production channel
npx @capgo/cli@latest bundle upload --channel production
Dal menu, naviga alla tua interfaccia di navigazione tra canali nell'app e attiva il cambio canale. L'app dovrebbe scaricare l'aggiornamento dal canale selezionato e ricaricare con l'aggiornamento nuovo.
Creazione di un UI per il Cambio Canale
La navigazione tra canali è di solito qualcosa che desideri esporre a un limitato set di utenti, non a tutti gli utenti che utilizzano l'app. Ad esempio, potresti avere un pulsante disponibile solo per gli impiegati autenticati che cambia l'app sul canale di anteprima.
Ecco un esempio di componente React per un cambio canale:
import { useState, useEffect } from 'react';
import { CapacitorUpdater } from '@capgo/capacitor-updater';
export function ChannelSwitcher() {
const [currentChannel, setCurrentChannel] = useState<string>('');
const [availableChannels, setAvailableChannels] = useState<string[]>([]);
const [isLoading, setIsLoading] = useState(false);
useEffect(() => {
loadChannelInfo();
}, []);
async function loadChannelInfo() {
const { channel } = await CapacitorUpdater.getChannel();
setCurrentChannel(channel || 'default');
const { channels } = await CapacitorUpdater.listChannels();
setAvailableChannels(channels.map(c => c.name));
}
async function handleChannelSwitch(channel: string) {
setIsLoading(true);
try {
await CapacitorUpdater.setChannel({
channel,
triggerAutoUpdate: true
});
setCurrentChannel(channel);
// App will update in background or on next restart
} catch (error) {
console.error('Failed to switch channel:', error);
} finally {
setIsLoading(false);
}
}
return (
<div>
<p>Current channel: {currentChannel}</p>
<div>
{availableChannels.map(channel => (
<button
key={channel}
onClick={() => handleChannelSwitch(channel)}
disabled={isLoading || channel === currentChannel}
>
Switch to {channel}
</button>
))}
</div>
</div>
);
}
Problemi di Aggiornamento in Tempo di Esecuzione
Questi non sono specifici della navigazione tra canali, ma tendono a diventare evidenti rapidamente non appena inizi a cambiare canali in esecuzione.
Mancanza di Versione di Esecuzione Corrispondente
Gli aggiornamenti in Capgo sono legati alle versioni native dell'app. Se la versione nativa di un aggiornamento non corrisponde alla versione nativa dell'app installata, l'aggiornamento non verrà scaricato o applicato. Quando si naviga tra canali, questo si manifesta tipicamente come l'app che cambia canali ma non viene applicato alcun aggiornamento, anche se ne esiste uno su quel canale.
This usually means the update was published from a different native version of the app. Assicurarsi che il pacchetto del canale sia compatibile con la versione nativa installata sul dispositivo.
Removing or Undoing Updates
Se un'app ha già scaricato un aggiornamento per un canale, eliminare quell'aggiornamento dal dashboard Capgo non lo elimina dai dispositivi che già lo hanno. La cancellazione ferma solo le future scaricate. future downloads.
La via più affidabile per annullare un aggiornamento dannoso è pubblicare un aggiornamento noto buono sullo stesso canale. Questo crea un nuovo aggiornamento in cima alla storia del canale, che i clienti tratteranno come la versione più recente e applicheranno al suo posto.
Capgo fornisce anche un meccanismo di rollback che può istruire i clienti a ripetere una versione di aggiornamento stabile precedente o cadere indietro all'aggiornamento incorporato nel build.
Data Migration Considerations
Passare da un canale all'altro cambia il pacchetto JavaScript che l'app esegue. Se l'app dipende da migrazioni o forme di dati che non sono compatibili tra i canali, passare avanti e indietro può causare problemi.
Ad esempio, se un aggiornamento beta applica una migrazione del database, la versione di produzione potrebbe non capire lo schema nuovo. I sviluppatori dovrebbero assicurarsi che le loro aggiornamenti rimangano sicuri da passare tra loro o limitare il passaggio a una sola direzione quando necessario.
Why Channel Surfing Improves Mobile Iteration
Channel surfing è specialmente utile quando si ha bisogno di esaminare le modifiche velocemente in un ambiente di produzione.
Rapida Valutazione
Immagina un bug di urgenza che richiede una valutazione prima di essere distribuito ampiamente. Con il canale di navigazione, il cambiamento può essere isolato in un piccolo set di utenti designati che possono esaminarlo prima che arrivi alla produzione.
Valutazione dei Stakeholder
Un proprietario del prodotto o un QA possono passare la loro installazione di produzione a un altro canale di aggiornamento, verificare il riparo o la funzionalità e poi tornare indietro una volta che sono finiti.
Test di Flusso Semplificato
Ciò rende più facile coinvolgere i stakeholder non tecnici nella revisione e nella decisione, mentre si mantiene il flusso liscio. Un unico build di produzione diventa uno strumento flessibile per il testing, la feedback e la valutazione.
Casi d'uso
- Test di QA: Il team QA può passare tra le branch di funzionalità
- Programmi Beta: Gli utenti si iscrivono al canale beta per l'accesso anticipato
- Valutazione dei Stakeholder: Proprietari di prodotto visualizzano le modifiche prima della release
- A/B Testing: Assegna gli utenti a canali diversi per gli esperimenti
- Debugging: Passa un utente specifico a un canale di debug per diagnosticare gli issue
Comparazione: Metodi di modifica del canale
| Metodo | Effetto Tempo | Persistente Dove | Utilizzo |
|---|---|---|---|
setChannel() da plugin |
Instant | Solo dispositivo (locale) | Passaggio del canale inizializzato dall'utente all'interno dell'app |
| Impostazione dispositivo del pannello di controllo | Fino a 2 min | Database del backend | Modifiche inizializzate dall'amministratore per dispositivi specifici |
| API assegnazione del canale | Fino a 2 min | Database del backend | Integrazioni backend automatizzate |
Per offrire la migliore esperienza utente quando si costruisce UI per il passaggio del canale, utilizzare sempre il metodo del plugin. setChannel() Impostazioni del dispositivo
Pratiche Ottimali
- Limitare l'Accesso: La navigazione tra canali è generalmente riservata all'uso interno - non esporla a tutti gli utenti
- Gestire gli Errori: Gestisci sempre gli errori con grazia quando si passa da un canale all'altro
- Verificare laCompatibilità: Assicurati che gli aggiornamenti sui diversi canali siano compatibili con la versione nativa installata
- Documentare i Canali: Tieni una documentazione chiara su cosa ogni canale è destinato a fare
- Monitorare l'Utilizzo: Traccia quali dispositivi sono su quali canali per la debuggazione
Risorse
Conclusioni
Channel surfing transforms how you can iterate on your Capacitor app. Instead of treating production builds as fixed endpoints, they become flexible tools for testing, validation, and rapid iteration.
Con il switching dei canali istantaneo introdotto nelle versioni recenti del plugin, l'esperienza è ora senza soluzione di continuità - gli utenti possono passare da un canale all'altro e ricevere immediatamente aggiornamenti dal nuovo canale senza alcun periodo di attesa.
Sia che stiate validando i riparazioni di bug con gli stakeholder, eseguendo programmi beta, o debuggando problemi con gli utenti specifici, il channel surfing vi dà la flessibilità di spedire l'aggiornamento giusto all'utente giusto al momento giusto.
Continua da Channel Surfing per Capgo: Come passare ai canali di aggiornamento in tempo di esecuzione
Se stai utilizzando Channel Surfing per Capgo: Come passare ai canali di aggiornamento in tempo di esecuzione 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 Targeting della Versione per il flusso di lavoro del prodotto in Soluzione di Targeting della Versione.