Capire i Live Updates in Capgo
Live update di Capacitor (OTA) sostituiscono il web bundle all'interno della tua app, permettendoti di pubblicare modifiche a JavaScript, HTML e CSS senza un nuovo binario per lo store. Le Live Update sono una delle funzionalità più potenti nelle app Capacitor, consentendo aggiornamenti in tempo reale senza dover passare per l'approvazione degli app store. Vediamo nel dettaglio come Capgo implementa questa funzionalità.
Concetti fondamentali
Un'app Capacitor è composta da due livelli principali:
- Livello web: Contiene file HTML, CSS e JavaScript caricati nel WebView
- Livello nativo: Contiene code specifici per piattaforma (Java/Kotlin per Android, Swift per iOS)
Il sistema live update di Capgo funziona sostituendo il layer web a runtime, poiché questi file non vengono compilati nel binario dell'app.
Implementazione tecnica
Percorsi server in Capacitor
Capgo gestisce due percorsi critici:
- Percorso server attuale: Puntato ai file attualmente caricati nel WebView
- Percorso server successivo: Puntato ai file che verranno caricati al prossimo riavvio dell'app
Implementazione Android
Su Android, Capgo gestisce i percorsi tramite:
// Store next server path
private void setNextCapacitorServerPath(String path) {
SharedPreferences prefs = context.getSharedPreferences("CapWebViewSettings", Activity.MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();
editor.putString("serverBasePath", path);
editor.apply();
}
// Update current path and reload
private void setCurrentCapacitorServerPath(String path) {
bridge.setServerBasePath(path);
bridge.reload();
}
Implementazione iOS
Su iOS, i percorsi sono gestiti tramite:
// Store next server path
private func setNextCapacitorServerPath(path: String) {
KeyValueStore.standard["serverBasePath"] = path
}
// Update current path
private func setCurrentCapacitorServerPath(path: String) {
bridge.viewController.setServerBasePath(path: path)
}
Misure di sicurezza
Capgo implementa una sicurezza di livello militare tramite crittografia end-to-end, garantendo che gli aggiornamenti della tua app rimangano completamente sicuri dallo sviluppo al deployment. Il nostro sistema di crittografia va oltre la tradizionale firma code per fornire una vera sicurezza zero-knowledge.
Architettura di crittografia end-to-end
-
Crittografia end-to-end (E2EE): Ogni bundle di aggiornamento viene crittografato con AES-256-GCM prima di lasciare il tuo ambiente di sviluppo. Questa crittografia di livello militare garantisce che gli aggiornamenti della tua app rimangano completamente privati e sicuri durante l'intero processo di distribuzione.
-
Architettura zero-knowledge: A differenza di altre soluzioni di aggiornamento OTA che firmano solo gli aggiornamenti, Capgo utilizza una vera crittografia zero-knowledge. Questo significa:
- I contenuti dell'aggiornamento vengono cifrati prima dell'upload
- I server di Capgo archiviano solo dati crittografati
- Decryption only happens on end-user devices
- Nessun intermediario può accedere al contenuto dei tuoi aggiornamenti
-
Gestione sicura delle chiavi:
- Le chiavi di crittografia vengono generate e archiviate in modo sicuro nel tuo ambiente CI/CD
- Le chiavi private non toccano mai i server di Capgo
- Ogni versione dell'app può utilizzare chiavi di crittografia uniche
- Supporto alla rotazione delle chiavi per una sicurezza avanzata
Scopri di più sul nostro sistema di crittografia nella nostra guida dettagliata: Crittografia end-to-end in Capgo Live Updates
Processo di sicurezza degli aggiornamenti
-
Crittografia pre-upload:
- Gli aggiornamenti vengono crittografati nella tua pipeline CI/CD
- Ogni file viene crittografato singolarmente
- Anche i metadati vengono crittografati per una privacy completa
-
Archiviazione sicura:
- I bundle crittografati vengono archiviati sul CDN globale di Capgo
- Nessun dato in chiaro tocca mai i nostri server
- Anche in caso di violazione del server, i dati restano protetti
-
Distribuzione sicura:
- Gli aggiornamenti vengono distribuiti tramite canali cifrati
- Ogni istanza dell'app valida l'integrità della cifratura
- Meccanismi di retry automatici in caso di decifratura fallita
-
Sicurezza lato client:
- Updates are verified before installation
- Il fallimento della decifratura attiva un rollback automatico
- Archiviazione sicura delle chiavi nello storage protetto dell'app
Questo approccio di sicurezza completo garantisce che gli aggiornamenti della tua app restino protetti da:
- Attacchi man-in-the-middle
- Violazioni lato server
- Modifiche non autorizzate
- Attacchi di replay
- Manomissione del contenuto
Ciclo di vita degli update
Il processo di update di Capgo è progettato per essere automatico di default. Ecco come funziona il processo automatico:
1. Controllo automatico degli update
Il plugin controlla automaticamente gli update in queste situazioni:
- All'avvio dell'app
Questo comportamento è controllato dall' autoUpdate impostazione:
// capacitor.config.json
{
"plugins": {
"CapacitorUpdater": {
"autoUpdate": true // Enable automatic updates
}
}
}
Puoi anche controllare manualmente con getLatest()
2. Download automatico
Quando viene rilevata una nuova versione, se autoUpdate è abilitato:
- Il download parte automaticamente
- Il progresso viene tracciato internamente
- Failed downloads auto-retry at each app open
- I download completati sono salvati nello storage dell'app
Puoi monitorare questo processo tramite gli eventi:
CapacitorUpdater.addListener('download', (info: DownloadEvent) => {
console.log('Auto-download progress:', info.percent);
});
CapacitorUpdater.addListener('downloadComplete', (info: DownloadCompleteEvent) => {
console.log('Auto-download complete:', info.bundle);
});
3. Installazione automatica
I tempi di installazione dipendono dalla tua configurazione:
// capacitor.config.json
{
"plugins": {
"CapacitorUpdater": {
"autoUpdate": true,
"directUpdate": false // install update on app backgrounding
"resetWhenUpdate": true, // reset live updates on native update (true by default)
"autoDeleteFailed": true, // Auto cleanup failed updates (true by default)
"autoDeletePrevious": true // Auto cleanup old versions (true by default)
}
}
}
L'installazione avviene:
- Immediatamente se
directUpdateè true - Allo sfondamento successivo dell'app, se
directUpdateè false - Rollback automatico se l'installazione fallisce
Il plugin gestisce automaticamente anche lo storage:
- Rimuove gli update falliti se
autoDeleteFailedè true - Pulisce le vecchie versioni se
autoDeletePreviousè true
Posticipare gli update
Puoi controllare quando installare gli update tramite condizioni di delay:
// Delay until app goes to background
await CapacitorUpdater.setDelay({
kind: 'background'
});
// Delay until specific date
await CapacitorUpdater.setDelay({
kind: 'date',
value: '2024-03-20T10:00:00.000Z'
});
// Delay until next native version
await CapacitorUpdater.setDelay({
kind: 'nativeVersion'
});
// Multiple conditions
await CapacitorUpdater.setMultiDelay({
delayConditions: [
{
kind: 'background'
},
{
kind: 'date',
value: '2024-03-20T10:00:00.000Z'
}
]
});
Condizioni di delay disponibili:
- background: Installa quando l'app va in background
- data: Installa dopo una data/ora specifica
- nativeVersion: Installa dopo il prossimo aggiornamento nativo
- kill: Installa dopo che l'app è stata chiusa
This is useful for:
- Pianificare gli aggiornamenti nelle ore di minor traffico
- Coordinare gli aggiornamenti con l'attività degli utenti
- Garantire un'esperienza di aggiornamento fluida
- Evitare interruzioni durante attività critiche
Stati di aggiornamento
Durante il processo automatico, i bundle passano attraverso questi stati:
- download in corso: Download in corso
- in attesa: Download completato, in attesa di installazione
- successo: Aggiornamento installato e attivo
- errore: Aggiornamento non riuscito (attiva il rollback automatico)
Conformità agli store
Apple App Store ✅
Live Updates è pienamente conforme alle policy di Apple App Store. Come indicato nell'Apple Developer Program License Agreement:
“code interpretato può essere scaricato in un'Applicazione, ma solo finché tale code: (a) non modifica lo scopo primario dell'Applicazione offrendo funzionalità non coerenti con lo scopo previsto e pubblicizzato dell'Applicazione così come inviata all'App Store, (b) non crea uno store o una vetrina per altri code o applicazioni, e (c) non aggira la firma, il sandbox o altre funzionalità di sicurezza del sistema operativo.”
Capgo aggiorna solo il layer web rispettando tutti i confini di sicurezza della piattaforma.
Google Play Store ✅
Le Live Updates rispettano le policy di Google Play. La policy sull'abuso di dispositivi e reti specifica che:
“Questa restrizione non si applica a code che gira in una macchina virtuale o in un interprete, dove uno dei due fornisce accesso indiretto alle API Android (come JavaScript in una webview o in un browser).”
Poiché Capgo aggiorna solo il contenuto della WebView, rientra in queste linee guida consentite.
Best practice
- Rilasci graduali: Distribuisci gli aggiornamenti gradualmente
- Controllo di versione: Monitora tutte le versioni distribuite
- Supporto al rollback: Ripristino rapido in caso di problemi
- Aggiornamenti delta: Scarica solo i file modificati
Quando usare Live Update
Perfetto per:
- Bug fix
- Miglioramenti UI
- Aggiornamenti dei contenuti
- Feature toggles
Non adatto per:
- Modifiche Native code
- Aggiornamenti major
- Patch di sicurezza che richiedono modifiche native
Continua da Come funzionano i Live Updates in Capgo
Se stai usando Come funzionano i Live Updates in Capgo per pianificare il lavoro sui plugin nativi, collegalo a Directory dei plugin di Capgo per il workflow del prodotto nella Capgo Plugin Directory, Plugin Capacitor di Capgo per i dettagli di implementazione in Capacitor Plugins di Capgo, Aggiunta o aggiornamento dei plugin per i dettagli sull'implementazione in Adding or Updating Plugins, Alternative ai plugin Ionic Enterprise per il workflow del prodotto in Ionic Enterprise Plugin Alternatives, e Capgo Native Build per il workflow di prodotto in Capgo Native Builds.