Salta al contenuto principale

Come funzionano i Live Update in Capgo

Un approfondimento tecnico sull'implementazione dei Live Update in Capgo, per capire come funzionano sotto il cofano sia su iOS che su Android.

Come funzionano i Live Update in Capgo

Capire i Live Update in Capgo

Live update di Capacitor (OTA) sostituisce il web bundle all'interno della tua app per distribuire modifiche a JavaScript, HTML e CSS senza un nuovo binario sugli store. I Live Update sono una delle funzionalità più potenti nelle app Capacitor, permettendo aggiornamenti in tempo reale senza sottoporre nuove versioni agli store. Scopriamo nel dettaglio come Capgo implementa questa funzionalità.

Concetti Fondamentali

Un'app Capacitor è composta da due layer principali:

  1. Livello Web: Contiene i file HTML, CSS e JavaScript caricati nella WebView
  2. Livello Native: Contiene code specifici per la piattaforma (Java/Kotlin per Android, Swift per iOS)

Il sistema live update di Capgo funziona sostituendo il web layer a runtime, poiché questi file non sono compilati nel binario dell'app.

Implementazione Tecnica

Server Path in Capacitor

Capgo gestisce due path critici:

  • Percorso server attuale: Punta ai file attualmente caricati nella WebView
  • Prossimo percorso server: Punta 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 sicuri dallo sviluppo al deployment. Il nostro sistema di crittografia va oltre la tradizionale firma code per offrire 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 l'ambiente di sviluppo. Questa crittografia di livello militare assicura che gli aggiornamenti della tua app rimangano privati e sicuri durante tutto il processo di delivery.

  2. Architettura Zero-Knowledge: A differenza di altre soluzioni OTA che si limitano a firmare gli aggiornamenti, Capgo utilizza una vera crittografia zero-knowledge. Ciò significa:

    • I contenuti dell'update sono criptati prima dell'upload
    • I server di Capgo memorizzano solo dati criptati
    • La decriptazione avviene solo sui dispositivi dell'utente finale
    • Nessun intermediario può accedere al contenuto del tuo update
  3. Gestione sicura delle chiavi:

    • Le chiavi di cifratura sono generate e salvate in modo sicuro nel tuo ambiente CI/CD
    • Le chiavi private non toccano mai i server di Capgo
    • Ogni versione dell'app può usare chiavi di cifratura uniche
    • Supporto alla rotazione delle chiavi per una sicurezza avanzata

Scopri di più sul nostro sistema di cifratura nella nostra guida dettagliata: Crittografia end-to-end in Capgo Live Updates

Processo di sicurezza degli update

  1. Crittografia pre-upload:

    • Gli update sono crittografati nella tua pipeline CI/CD
    • Ogni file viene crittografato singolarmente
    • Anche i metadati sono crittografati per la massima privacy
  2. Archiviazione sicura:

    • I bundle crittografati sono salvati sulla CDN globale di Capgo
    • Nessun dato in chiaro tocca mai i nostri server
    • Anche in caso di breach del server, i dati restano sicuri
  3. Consegna sicura:

    • Gli update vengono consegnati tramite canali crittografati
    • Ogni istanza dell'app valida l'integrità della crittografia
    • Meccanismi di retry automatici per la decrittazione fallita
  4. Sicurezza Client-Side:

    • Gli update vengono verificati prima dell'installazione
    • Il fallimento della decrittazione attiva un rollback automatico
    • Archiviazione sicura delle chiavi nello storage protetto dell'app

Questo approccio di sicurezza completo garantisce che gli update della tua app siano protetti da:

  • Attacchi Man-in-the-middle
  • Data breach lato server
  • Modifiche non autorizzate
  • Attacchi di replay
  • Manomissione dei contenuti

Ciclo di vita dell'update

Il processo di update di Capgo è automatico di default. Ecco come funziona:

1. Controllo automatico dell'update

Il plugin controlla automaticamente la presenza di update in queste situazioni:

  • All'avvio dell'app

Questo comportamento è gestito dall'impostazione autoUpdate di

// capacitor.config.json
{
  "plugins": {
    "CapacitorUpdater": {
      "autoUpdate": true // Enable automatic updates
    }
  }
}

Puoi anche effettuare un controllo manuale con getLatest()

2. Download automatico

Quando viene rilevata una nuova versione, se autoUpdate è abilitato:

  1. Il download parte automaticamente
  2. Il progresso è tracciato internamente
  3. I download falliti riprovano all'apertura dell'app
  4. I download completati sono salvati nello storage dell'app

Puoi monitorare il processo tramite questi 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

Il timing dell'installazione dipende dalla 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
  • Al prossimo background dell'app se directUpdate è false
  • Auto-rollback in caso di errore nell'installazione

Il plugin gestisce automaticamente anche lo storage:

  • Rimuove gli update falliti se autoDeleteFailed è true
  • Pulisce le vecchie versioni se autoDeletePrevious è true

Delay degli 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
  • date: Installa dopo una data/ora specifica
  • nativeVersion: Installa al prossimo aggiornamento nativo
  • kill: Installa dopo la chiusura dell'app

Questo è utile per:

  • Pianificare gli aggiornamenti nelle ore di minor traffico
  • Coordinare gli aggiornamenti con l'attività dell'utente
  • Garantire un'esperienza di aggiornamento fluida
  • Evitare interruzioni durante task critici

Stati dell'aggiornamento

Durante il processo automatico, i bundle passano attraverso questi stati:

  1. downloading: Download in corso
  2. in attesa: Download completato, in attesa dell'installazione
  3. successo: Update installato e attivo
  4. errore: Update fallito (attiva l'auto-rollback)

Conformità Store

Apple App Store ✅

I Live Updates sono pienamente conformi alle policy dell'App Store di Apple. Come indicato nel Contratto di licenza dell'Apple Developer Program:

“Il code interpretato può essere scaricato su un'Applicazione, ma solo finché tale code: (a) non modifichi lo scopo principale dell'Applicazione fornendo funzionalità incoerenti con lo scopo previsto e dichiarato dell'Applicazione così come inviata all'App Store, (b) non crei uno store o una vetrina per altri code o applicazioni, e (c) non aggiri la firma, il sandbox o altre funzionalità di sicurezza del sistema operativo.”

Gli update Capgo modificano solo il web layer rispettando tutti i confini di sicurezza della piattaforma.

Google Play Store ✅

Le Live Update rispettano le policy di Google Play. La policy sull'uso improprio di dispositivi e reti specifica che:

“Questa restrizione non si applica a code che viene eseguito in una macchina virtuale o in un interprete che fornisca un 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. Rollout Graduali: Distribuisci gli aggiornamenti gradualmente
  2. Controllo versione: Traccia tutte le versioni distribuite
  3. Supporto al Rollback: Ripristino rapido in caso di problemi
  4. Delta update: Scarica solo i file modificati

Quando usare Live Updates

Ideale per:

  • Bug fix
  • Miglioramenti UI
  • Aggiornamenti dei contenuti
  • Feature toggle

Non adatto per:

  • Modifiche native a code
  • Aggiornamenti di versione major
  • Patch di sicurezza che richiedono modifiche native

Continua da Come funzionano i Live Updates in Capgo

Se stai usando Come funzionano i Live Update in Capgo per pianificare il lavoro sui plugin nativi, collegalo a Directory dei plugin Capgo per il workflow del prodotto nella Directory dei plugin Capgo, Plugin Capacitor di Capgo per i dettagli di implementazione nei Capacitor Plugin di Capgo, Aggiungere o aggiornare i Plugin per i dettagli di implementazione in Aggiungere o aggiornare i Plugin, Alternative ai Plugin di Ionic Enterprise per il workflow del prodotto in Alternative ai Plugin di Ionic Enterprise, e Capgo Native Build per il workflow del prodotto nei Capgo Native Build.

Live update per le app Capacitor

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

Le ultime dal nostro blog

Capgo ti offre i migliori insight per creare un'app mobile davvero professionale.