Zum Hauptinhalt springen

So funktionieren Live Updates in Capgo

Ein tiefer Einblick in die technische Implementierung von Live Updates in Capgo, um zu verstehen, wie es unter der Haube für iOS und Android funktioniert.

So funktionieren Live Updates in Capgo

Live Updates in Capgo verstehen

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

Kernkonzepte

Eine Capacitor App besteht aus zwei Hauptebenen:

  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 die Web-Ebene zur Laufzeit ersetzt wird, da diese Dateien nicht in das App-Binary kompiliert werden.

Technische Implementierung

Server-Pfade in Capacitor

Capgo verwaltet zwei kritische Pfade:

  • Aktueller Server-Pfad: Verweist auf die aktuell in der WebView geladenen Dateien
  • Nächster Server-Pfad: 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 werden die Pfade verwaltet ü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 setzt auf höchste Sicherheitsstandards durch End-to-End-Verschlüsselung. So bleiben deine App-Updates von der Entwicklung bis zum Deployment absolut sicher. Unser Verschlüsselungssystem geht über herkömmliches code Signing hinaus und bietet echte Zero-Knowledge-Sicherheit.

End-to-End-Verschlüsselungsarchitektur

  1. End-to-End-Verschlüsselung (E2EE): Jedes Update-Bundle wird mittels AES-256-GCM verschlüsselt, bevor es deine Entwicklungsumgebung verlässt. Diese Verschlüsselung garantiert, dass deine App-Updates während des gesamten Delivery-Prozesses 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 berühren niemals die Capgo-Server
    • Jede App-Version kann eigene Verschlüsselungsschlüssel nutzen
    • Key Rotation für erhöhte Sicherheit

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

Sicherheitsprozess der 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
    • Selbst bei einem Server-Breach bleiben die Daten 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 bleiben:

  • Man-in-the-middle-Angriffen
  • Server-seitigen Breaches
  • Unbefugten Modifikationen
  • Replay-Attacks
  • Content Tampering

Update-Lifecycle

Der Update-Prozess von Capgo ist standardmäßig auf Automatik 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
    }
  }
}

Du kannst auch manuell prüfen mit getLatest()

2. Automatischer Download

Wird eine neue Version erkannt und autoUpdate ist aktiviert:

  1. Startet der Download automatisch
  2. Der Fortschritt wird intern verfolgt
  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 ist true
  • Beim nächsten Wechsel in den Hintergrund, wenn directUpdate false ist
  • Auto-Rollback bei fehlgeschlagener Installation

Das Plugin verwaltet den Speicher automatisch:

  • Fehlgeschlagene Updates werden entfernt, wenn autoDeleteFailed ist true
  • Alte Versionen werden bereinigt, wenn autoDeletePrevious ist true

Updates verzögern

Mit Delay-Bedingungen steuerst du die Installation von Updates:

// 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 Delay-Bedingungen:

  • Hintergrund: Installation, wenn die App in den Hintergrund geht
  • Datum: Installation nach einem bestimmten Datum/Uhrzeit
  • nativeVersion: Nach dem nächsten Native Build installieren
  • kill: Nach dem Schließen der App installieren

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. ausstehend: Download abgeschlossen, Installation wartet
  3. erfolgreich: Update installiert und aktiv
  4. fehler: Update fehlgeschlagen (Auto-Rollback wird ausgelöst)

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:

„Interpretierte code dürfen in eine App heruntergeladen werden, aber nur, solange diese code: (a) nicht den Hauptzweck der App ändert, indem sie Funktionen bereitstellt, die nicht dem beabsichtigten und beworbenen Zweck der im App Store eingereichten App entsprechen, (b) keinen Store oder Storefront für andere code oder Apps erstellt und (c) die Signierung, das Sandboxing 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 konkret:

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

Da Capgo nur den WebView-Content aktualisiert, liegt dies innerhalb der 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 man Live Updates nutzt

Ideal für:

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

Nicht geeignet für:

  • Native code Änderungen
  • Major-Version-Updates
  • Security Patches mit nativen Änderungen

Weiterlesen: Wie Live Updates in Capgo funktionieren

Wenn Sie ... verwenden So funktionieren Capgo Live Updates um die Arbeit an Native Plugins zu planen, verbinde es mit Capgo Plugin-Verzeichnis für den Produkt-Workflow im Capgo Plugin-Verzeichnis, Capacitor Plugins von Capgo für die Implementierungsdetails in Capacitor Plugins von Capgo, Plugins hinzufügen oder aktualisieren für die Implementierungsdetails in Adding or Updating Plugins, Ionic Enterprise Plugin-Alternativen für den Produkt-Workflow in Ionic Enterprise Plugin Alternatives und Capgo Native Builds für den Produkt-Workflow in Capgo Native Builds.

Live-Updates für Capacitor-Apps

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

Neuestes aus unserem Blog

Capgo bietet dir die besten Insights für eine wirklich professionelle Mobile App.