Zum Hauptinhalt springen

So funktionieren Live Updates in Capgo

Ein Deep Dive in die technische Implementierung von Live Updates in Capgo – und wie es unter der Haube auf iOS und Android funktioniert.

Wie Capgo Live Updates funktionieren Capgo Blog-Illustration

Live Updates in Capgo verstehen

Capacitor Live Updates (OTA) ersetzt das Web-Bundle in deiner App, sodass du JavaScript-, HTML- und CSS-Änderungen ohne neues Store-Binary ausrollen kannst. Live Updates sind eines der mächtigsten Features in Capacitor-Apps und ermöglichen Echtzeit-Updates ohne App-Store-Submission. Schauen wir uns genau an, wie Capgo diese Funktionalität implementiert.

Kernkonzepte

Eine Capacitor-App besteht aus zwei Hauptschichten:

  1. Web-Layer: Enthält HTML-, CSS- und JavaScript-Dateien, die im WebView geladen werden
  2. Native Layer: Enthält plattformspezifisches code (Java/Kotlin für Android, Swift für iOS)

Das live update-System von Capgo funktioniert, indem es die Web-Ebene zur Laufzeit ersetzt, da diese Dateien nicht in das App-Binary kompiliert werden.

Technische Umsetzung

Server-Pfade in Capacitor

Capgo verwaltet zwei kritische Pfade:

  • Aktueller Server-Pfad: Verweist auf die aktuell in der WebView geladenen Dateien
  • Nächster Serverpfad: Verweist auf die Dateien, die beim nächsten App-Neustart geladen werden

Android-Implementierung

Unter Android verwaltet Capgo die Pfade über:

// 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();
}

iOS-Implementierung

Unter iOS läuft die Pfadverwaltung über:

// 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)
}

Sicherheitsmaßnahmen

Capgo bietet Sicherheit auf Militärniveau durch End-to-End-Verschlüsselung und sorgt dafür, dass deine App-Updates von der Entwicklung bis zum Deployment absolut sicher bleiben. Unser Verschlüsselungssystem geht über herkömmliche code-Signierung hinaus und bietet echte Zero-Knowledge-Sicherheit.

End-to-End-Verschlüsselungsarchitektur

  1. End-to-End-Verschlüsselung (E2EE): Jedes Update-Bundle wird mit AES-256-GCM verschlüsselt, bevor es deine Entwicklungsumgebung verlässt. Diese Verschlüsselung auf Militärniveau stellt sicher, dass deine App-Updates während des gesamten Auslieferungsprozesses absolut privat und sicher bleiben.

  2. Zero-Knowledge-Architektur: Im Gegensatz zu anderen OTA-Update-Lösungen, die Updates lediglich signieren, nutzt Capgo echte Zero-Knowledge-Verschlüsselung. Das bedeutet:

    • Update-Inhalte werden vor dem Upload verschlüsselt
    • Capgo-Server speichern nur verschlüsselte Daten
    • Die Entschlüsselung erfolgt ausschließlich auf den Endgeräten
    • Kein Vermittler kann auf deine Update-Inhalte zugreifen
  3. Sicheres Key Management:

    • Verschlüsselungsschlüssel werden sicher in deiner CI/CD-Umgebung generiert und gespeichert
    • Private Keys gelangen nie auf die Server von Capgo
    • Jede App-Version kann eigene Verschlüsselungsschlüssel nutzen
    • Key-Rotation-Unterstützung für mehr Sicherheit

Erfahre mehr über unser Verschlüsselungssystem in unserem ausführlichen Guide: End-to-End-Verschlüsselung in Capgo Live Updates

Sicherheitsprozess für Updates

  1. Verschlüsselung vor dem Upload:

    • Updates werden in deiner CI/CD-Pipeline verschlüsselt
    • Jede Datei wird einzeln verschlüsselt
    • Metadaten werden für volle Privatsphäre ebenfalls verschlüsselt
  2. Sichere Speicherung:

    • Verschlüsselte Bundles liegen auf dem globalen CDN von Capgo
    • Keine Klartextdaten gelangen jemals auf unsere Server
    • Daten bleiben selbst bei Server-Breaches sicher
  3. Sichere Auslieferung:

    • Updates werden über verschlüsselte Kanäle ausgeliefert
    • Jede App-Instanz validiert die Verschlüsselung
    • Automatischer Retry bei fehlgeschlagener Entschlüsselung
  4. Clientseitige Sicherheit:

    • Updates werden vor der Installation verifiziert
    • Fehlgeschlagene Entschlüsselung löst Rollback aus
    • Sichere Key-Speicherung im geschützten App-Speicher

Dieser umfassende Sicherheitsansatz stellt sicher, dass Ihre App-Updates vor Folgendem geschützt sind:

  • Man-in-the-middle-Angriffen
  • Server-seitigen Breaches
  • Unbefugte Änderungen
  • Replay-Angriffe
  • Inhaltsmanipulation

Update-Lifecycle

Der Update-Prozess von Capgo ist standardmäßig auf Automatisierung ausgelegt. So funktioniert der automatische Prozess:

1. Automatischer Update-Check

Das Plugin prüft in folgenden Situationen automatisch auf Updates:

  • Beim App-Start

Dieses Verhalten wird über die autoUpdate setting:

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

Manuell kannst du auch mit getLatest()

2. Automatischer Download

Wird eine neue Version erkannt, falls autoUpdate ist aktiviert:

  1. Download startet automatisch
  2. Fortschritt wird intern getrackt
  3. Failed downloads auto-retry at each app open
  4. Erfolgreiche Downloads werden im App-Speicher abgelegt

Diesen Prozess kannst du über Events überwachen:

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. Automatische Installation

Der Zeitpunkt der Installation hängt von deiner Konfiguration ab:

// 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)
    }
  }
}

Die Installation erfolgt:

  • Sofort, wenn directUpdate true ist
  • Beim nächsten Hintergrundwechsel der App, wenn directUpdate falsch ist
  • Auto-Rollback bei fehlgeschlagener Installation

Das Plugin verwaltet auch automatisch den Speicher:

  • Fehlgeschlagene Updates entfernen, wenn autoDeleteFailed wahr ist
  • Alte Versionen bereinigen, wenn autoDeletePrevious wahr ist

Updates verzögern

Du kannst über Verzögerungsbedingungen steuern, wann Updates installiert werden:

// 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'
    }
  ]
});

Verfügbare Verzögerungsbedingungen:

  • Hintergrund: Installation, wenn die App in den Hintergrund geht
  • Datum: Installation nach einem bestimmten Datum/Uhrzeit
  • nativeVersion: Installation nach dem nächsten Native Build
  • kill: Installation, nachdem die App beendet wurde

Das ist nützlich für:

  • Geplante Updates außerhalb der Stoßzeiten
  • Abstimmung von Updates mit der Nutzeraktivität
  • Reibungslose Updates gewährleisten
  • Vermeidung von Unterbrechungen bei kritischen Aufgaben

Update-Status

Während des automatischen Prozesses durchlaufen Bundles diese Zustände:

  1. downloading: Download läuft
  2. pending: Download fertig, wartet auf Installation
  3. Erfolgreich: Update installiert und aktiv
  4. error: Update fehlgeschlagen (löst Auto-Rollback aus)

Store-Compliance

Apple App Store ✅

Live Updates sind vollständig konform mit den Richtlinien des Apple App Store. Wie im Apple Developer Program License Agreement festgelegt:

„Interpretierter code darf in eine App heruntergeladen werden, sofern dieser code: (a) nicht den Hauptzweck der App ändert, indem Funktionen bereitgestellt werden, die nicht dem vorgesehenen und beworbenen Zweck der im App Store eingereichten App entsprechen, (b) keinen Store oder Storefront für andere code oder Apps erstellt und (c) das Code-Signing, die Sandbox oder andere Sicherheitsfunktionen des OS nicht umgeht.“

Capgo Updates ändern nur den Web-Layer und respektieren dabei alle Sicherheitsgrenzen der Plattform.

Google Play Store ✅

Live Updates entsprechen den Google Play Richtlinien. Die Richtlinie zu Device and Network Abuse besagt explizit:

„Diese Einschränkung gilt nicht für code, das in einer virtuellen Maschine oder einem Interpreter läuft, wenn eines von beiden indirekten Zugriff auf Android APIs bietet (wie JavaScript in einer WebView oder einem Browser).“

Da Capgo nur den WebView-Content aktualisiert, fällt dies unter die erlaubten Richtlinien.

Best Practices

  1. Phasenweise Rollouts: Updates schrittweise ausrollen
  2. Versionskontrolle: Alle deployten Versionen tracken
  3. Rollback-Support: Schnelle Fehlerbehebung
  4. Delta-Updates: Nur geänderte Dateien downloaden

Wann Live Updates sinnvoll sind

Ideal für:

  • Bugfixes
  • UI-Verbesserungen
  • Content-Updates
  • Feature Toggles

Nicht geeignet für:

  • Native code-Änderungen
  • Major-Version-Updates
  • Security-Patches, die native Änderungen erfordern

Weiterlesen: Wie Live Updates in Capgo funktionieren

Wenn du es nutzt So funktionieren Live Updates in Capgo Um die Arbeit an nativen Plugins zu planen, verbinde sie mit Capgo Plugin-Verzeichnis für den Produkt-Workflow im Capgo Plugin-Verzeichnis, Capacitor Plugins von Capgo für das Implementierungsdetail in Capacitor Plugins von Capgo, Plugins hinzufügen oder aktualisieren für die Implementierungsdetails unter „Plugins hinzufügen oder aktualisieren“, Ionic Enterprise Plugin-Alternativen für den Produkt-Workflow in Ionic Enterprise Plugin-Alternativen und Capgo Native Builds optimieren für den Produkt-Workflow in Capgo Native Builds.

Live-Updates für Capacitor-Apps

Wenn ein Bug im Web-Layer live ist, liefere den Fix über Capgo aus, statt Tage auf die App-Store-Freigabe zu warten. Nutzer bekommen das Update im Hintergrund, während native Änderungen im normalen Review-Prozess bleiben.

Neues aus unserem Blog

Capgo gibt dir die besten Insights, um eine wirklich professionelle Mobile App zu erstellen.