Zum Hauptinhalt springen

Wie Capgo Live-Updates funktioniert

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

Martin Donadieu

Martin Donadieu

Content-Marketing-Spezialist

Wie Capgo Live-Updates funktioniert

Capgo Live-Updates verstehen

Live-Updates sind eine der mächtigsten Funktionen in Capacitor-Apps, die Echtzeit-Updates ohne App-Store-Submission ermöglichen. Lassen Sie uns tief einsteigen, um zu verstehen, wie Capgo diese Funktionalität umsetzt.

Grundlagen

Eine Capacitor-Anwendung besteht aus zwei Hauptebenen:

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

Capgo’s live Update-System funktioniert, indem der Web Layer bei Laufzeit ersetzt wird, da diese Dateien nicht in das Anwendungsbinär kompiliert werden.

Technische Umsetzung

Server-Pfade in Capacitor

Capgo verwaltet zwei kritische Pfade:

  • Aktueller Server-Pfad: Zeigt auf Dateien, die derzeit im WebView geladen werden
  • Serverpfad für die nächste Instanz: Zeigt auf Dateien, die bei der nächsten Anwendungsneustart geladen werden

Android-Implementierung

Bei Android verwaltet Capgo die Pfade durch:

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

Bei iOS werden die Pfade durch: verwaltet

// 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 implementiert militärisch-grade Sicherheit durch Ende-zu-Ende-Verschlüsselung, um sicherzustellen, dass Ihre App-Updates von der Entwicklung bis zur Bereitstellung vollständig sicher bleiben. Unsere Verschlüsselungssystem geht über traditionelle code-Signierung hinaus, um wahrhaftige Null-Wissens-Sicherheit bereitzustellen.

Architektur der Ende-zu-Ende-Verschlüsselung

  1. Ende-zu-Ende-Verschlüsselung (E2EE): Jedes Update-Bündel wird mit AES-256-GCM-Verschlüsselung vor dem Verlassen Ihres Entwicklungsumgebens verschlüsselt. Diese militärisch-grade Verschlüsselung stellt sicher, dass Ihre App-Updates während des gesamten Lieferprozesses vollständig privat und sicher bleiben.

  2. Null-Wissens-Architektur: Im Gegensatz zu anderen OTA-Update-Lösungen, die nur Updates signieren, verwendet Capgo echte Null-Kenntnis-Verschlüsselung. Dies bedeutet:

    • Die Update-Inhalte werden vor dem Upload verschlüsselt
    • Capgo-Server speichern nur verschlüsselte Daten
    • Die Entschlüsselung erfolgt nur auf den Endgeräten des Benutzers
    • Kein Zwischenstück kann Ihren Update-Inhalt zugreifen
  3. Sichere Schlüsselverwaltung:

    • Verschlüsselungsschlüssel werden sicher in Ihrem CI/CD-Umgebung generiert und gespeichert
    • Private Schlüssel berühren Capgo’s Server nie
    • Jede App-Version kann eindeutige Verschlüsselungsschlüssel verwenden
    • Unterstützung für Schlüsselrotation zur Erhöhung der Sicherheit

Erfahren Sie mehr über unser Verschlüsselungssystem in unserem detaillierten Leitfaden: End-to-End-Verschlüsselung in Capgo Live Updates

Update Sicherheitsprozess

  1. Vor dem Upload Verschlüsselung:

    • Aktualisierungen werden in Ihrem CI/CD-Pipeline verschlüsselt
    • Jeder Datei wird individuell verschlüsselt
    • Metadata wird ebenfalls verschlüsselt, um eine vollständige Privatsphäre zu gewährleisten
  2. Sichere Speicherung:

    • Verschlüsselte Pakete werden auf Capgo’s globalem CDN gespeichert
    • Keine plain text-Daten berühren unsere Server
    • Even in case of server breach, data remains secure
  3. Sichere Lieferung:

    • Aktualisierungen werden über verschlüsselte Kanäle geliefert
    • Jeder App-Instanz wird die Verschlüsselungsintegrität überprüft
    • Automatische Wiederholungsmechanismen für fehlgeschlagene Entschlüsselung
  4. Client-Seitige Sicherheit:

    • Updates werden vor der Installation überprüft
    • Fehlgeschlagene Entschlüsselung löst einen automatischen Rollback aus
    • Sichere Schlüssel speicherung in der App’s geschützten Speicherung

Diese umfassende Sicherheitsstrategie sichert dafür, dass Ihre App-Updates gegen folgende Bedrohungen geschützt bleiben:

  • Man-in-the-middle-Angriffe
  • Server-seitige Sicherheitsverletzungen
  • Unbefugte Modifikationen
  • Replay-Angriffe
  • Inhaltstamperung

Update-Lebenszyklus

Capgo’s Aktualisierungsprozess ist standardmäßig automatisch. Hier ist eine Beschreibung, wie der automatische Prozess funktioniert:

1. Automatische Aktualisierungskontrolle

Der Plugin überprüft automatisch auf Aktualisierungen in folgenden Situationen:

  • Wenn die App gestartet wird

Dieses Verhalten wird durch die autoUpdate Einstellung gesteuert:

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

Sie können auch manuell mit getLatest()

2. Automatische Herunterladen

Wenn eine neue Version erkannt wird, wenn autoUpdate ist aktiviert:

  1. Die Herunterladung beginnt automatisch
  2. Der Fortschritt wird intern verfolgt
  3. Fehlerhafte Downloads werden bei jedem App-Start automatisch wiederholt
  4. Erfolgreiche Downloads werden in der App-Speicherung gespeichert

Sie können diesen Prozess über Events verfolgen:

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

Die Installationszeit hängt von Ihrer 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 wahr ist
  • Bei nächster App-Hintergrundaktivierung wenn directUpdate falsch ist
  • Automatische Rückschaltung bei Installationsfehlern

Das Plugin verwaltet auch die Speicherung automatisch:

  • Entfernt fehlgeschlagene Updates wenn autoDeleteFailed wahr ist
  • Beseitigt alte Versionen wenn autoDeletePrevious wahr ist

Verzögert Updates

Sie können bestimmen, wann Updates installiert werden, indem Sie Verzögerungsbedingungen verwenden:

// 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: Installieren Sie, wenn die App in den Hintergrund geht
  • : Installieren Sie nach einer bestimmten UhrzeitnativeVersion
  • date: Installieren nach nächster nativer Aktualisierung
  • beenden: Installieren nach Anwendung beendet

Dies ist nützlich für:

  • Planung von Aktualisierungen während ruhiger Zeiten
  • Koordinierung von Aktualisierungen mit Benutzeraktivität
  • Einrichten eines glatten Aktualisierungs-Erlebnisses
  • Verhinderung von Störungen während kritischer Aufgaben

Aktualisierungs-Status

Während des automatischen Prozesses wechseln die Pakete durch diese Zustände:

  1. herunterladen: Herunterladen im Gange
  2. warten: Herunterladen abgeschlossen, Installieren warten
  3. Erfolg: Installiert und aktiviert
  4. Fehler: Aktualisierung fehlgeschlagen (Automatische Rollover ausgelöst)

Ladenkompatibilität

Apple App Store

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

“Interpreted code may be downloaded to an Application but only so long as such code: (a) does not change the primary purpose of the Application by providing features or functionality that are inconsistent with the intended and advertised purpose of the Application as submitted to the App Store, (b) does not create a store or storefront for other code or applications, and (c) does not bypass signing, sandbox, or other security features of the OS.”

“Interpretierte Capgo dürfen in eine Anwendung heruntergeladen werden, aber nur so lange, wie solche __CAPGO_KEEP_1__: (a) die Hauptfunktion der Anwendung nicht ändern, indem sie Funktionen oder Funktionalitäten bereitstellen, die mit dem vorgesehenen und beworbenen Zweck der Anwendung, wie sie dem App Store zur Verfügung gestellt wurde, nicht im Einklang stehen, (b) keine Laden oder einen Laden für andere __CAPGO_KEEP_2__ oder Anwendungen erstellen und (c) keine Signierung, Sandbox oder andere Sicherheitsfunktionen des Betriebssystems umgehen.”

__CAPGO_KEEP_0__-Updates ändern nur die Web-Schicht, während alle Plattform-Sicherheitsgrenzen respektiert werden.

Live Updates entsprechen den Google Play Richtlinien. Die Geräte- und Netzwerkmissbrauchsrichtlinie besagt speziell:

Dieser Einschränkung unterliegen keine code die in einer virtuellen Maschine oder einem Interpreter läuft, wobei entweder eine indirekte Zugriff auf Android-APIs (wie JavaScript in einem Webview oder Browser) bietet.

Da Capgo nur WebView-Inhalte aktualisiert, fällt es in diese erlaubten Richtlinien.

Best Practices

  1. Phased Rollouts: Updates schrittweise bereitstellen
  2. Version Control: Alle bereitgestellten Versionen verfolgen
  3. Rollback Support: Schnelle Wiederherstellung von Problemen
  4. Delta Updates: Nur geänderte Dateien herunterladen

Wenn Sie Live Updates verwenden möchten

Eignet sich für:

  • Fehlerbehebungen
  • Benutzeroberflächenvorlagen
  • Inhaltsaktualisierungen
  • Funktionsflags

Nicht geeignet für:

  • Nativ code-Änderungen
  • Größere Versionsupdates
  • Sicherheitspatches, die native Änderungen erfordern

Weitermachen Sie von Wie Live Updates in Capgo funktionieren

Wenn Sie __CAPGO_KEEP_0__ verwenden Wie Live Updates in Capgo funktionieren um native Plugin-Arbeit zu planen, verbinden Sie es mit Capgo Plugin-Verzeichnis für den Produktworkflow in Capgo Plugin-Verzeichnis, Capacitor Plugins von Capgo für die Implementierungsdetails in Capacitor Plugins von Capgo, Hinzufügen oder Aktualisieren von Plugins für die Implementierungsdetails in Hinzufügen oder Aktualisieren von Plugins, Ionic Enterprise Plugin Alternativen für den Produktworkflow in Ionic Enterprise Plugin Alternativen, und Capgo Native Builds für den Produktworkflow in Capgo Native Builds.

Live-Updates für Capacitor-Apps

Wenn ein Fehler im Web-Schicht lebt, versenden Sie die Reparatur über Capgo anstatt Tage zu warten, bis die App-Store-Zulassung genehmigt ist. Die Benutzer erhalten die Aktualisierung im Hintergrund, während native Änderungen im normalen Review-Verfahren bleiben.

Los geht's!

Neuestes aus unserem Blog

Capgo bietet Ihnen die besten Einblicke, die Sie benötigen, um eine wirklich professionelle mobile App zu erstellen.