Salta al contenuto principale

Come funzionano i Live Updates in Capgo

Analisi approfondita dell'implementazione tecnica delle Live Update in Capgo, per capire come funziona sotto il cofano su iOS e Android.

Illustrazione del blog: 'Come funzionano le Live Update in Capgo' Capgo

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:

  1. Livello web: Contiene file HTML, CSS e JavaScript caricati nel WebView
  2. 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

  1. 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.

  2. 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
  3. 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

  1. 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
  2. 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
  3. 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
  4. 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:

  1. Il download parte automaticamente
  2. Il progresso viene tracciato internamente
  3. Failed downloads auto-retry at each app open
  4. 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:

  1. download in corso: Download in corso
  2. in attesa: Download completato, in attesa di installazione
  3. successo: Aggiornamento installato e attivo
  4. 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

  1. Rilasci graduali: Distribuisci gli aggiornamenti gradualmente
  2. Controllo di versione: Monitora tutte le versioni distribuite
  3. Supporto al rollback: Ripristino rapido in caso di problemi
  4. 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.

Live updates per le app Capacitor

Quando un bug nel web-layer è live, rilascia la fix tramite Capgo invece di aspettare giorni l'approvazione degli store. Gli utenti ricevono l'update in background, mentre le modifiche native restano nel normale processo di review.

Ultimi articoli dal blog

Capgo ti offre gli insight migliori che ti servono per creare un'app mobile davvero professionale.