Understanding Live Updates in Capgo
Live updates are one of the most powerful features in Capacitor apps, allowing real-time updates without app store submissions. Let’s dive deep into how Capgo implements this functionality.
Grundlagen
Eine Capacitor-Anwendung besteht aus zwei Hauptlagen:
- Web-Layer: Enthält HTML-, CSS- und JavaScript-Dateien, die im WebView geladen werden
- 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 App-Binärdatei kompiliert werden.
Technische Umsetzung
Server-Pfade in Capacitor
Capgo verwalte zwei kritische Pfade:
- aktuelle Server-Pfad: Zeigt auf Dateien, die derzeit im WebView geladen werden
- Zukünftiger Server Pfad: Zeigt auf Dateien, die bei der nächsten App-Neustart 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 vollständig sicher von der Entwicklung bis zur Bereitstellung bleiben. Unser Verschlüsselungssystem geht über traditionelle code-Signierung hinaus, um echte Null-Wissens-Sicherheit bereitzustellen.
End-to-End-Verschlüsselungsarchitektur
-
End-to-End-Verschlüsselung (E2EE): Jeder Update-Bundle wird mit AES-256-GCM-Verschlüsselung vor dem Verlassen Ihres Entwicklungsumgebungen verschlüsselt. Diese militärisch-grade Verschlüsselung stellt sicher, dass Ihre App-Updates vollständig privat und sicher während des gesamten Lieferprozesses bleiben.
-
Null-Wissens-Architektur: Im Gegensatz zu anderen OTA-Update-Lösungen, die nur Updates signieren, verwendet Capgo echte Null-Kenntnis-Verschlüsselung. Das 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 Zwischenstation kann Ihren Update-Inhalt zugreifen
-
Sichere Schlüsselverwaltung:
- Die Verschlüsselungsschlüssel werden sicher in Ihrem CI/CD-Umgebung generiert und gespeichert
- Private Schlüssel berühren Capgo-Server nie
- Jede App-Version kann eindeutige Verschlüsselungsschlüssel verwenden
- Unterstützung für Schlüsselrotation zur Erhöhung der Sicherheit
Erhalten Sie weitere Informationen über unser Verschlüsselungssystem in unserem detaillierten Leitfaden: End-to-End-Verschlüsselung in Capgo Live Updates
Update-Sicherheitsprozess
-
Vor-Upload-Verschlüsselung:
- Updates werden in Ihrem CI/CD-Pipeline verschlüsselt
- Jeder Datei wird individuell verschlüsselt
- Die Metadaten werden ebenfalls verschlüsselt, um eine vollständige Privatsphäre zu gewährleisten
-
Sichere Speicherung:
- Verschlüsselte Pakete werden auf Capgo’s globaler CDN gespeichert
- Keine plain text-Daten berühren unsere Server
- Even in case of server breach, data remains secure
-
Even in case of server breach, data remains secure:
- Sichere Lieferung
- Updates werden über verschlüsselte Kanäle geliefert
- Automatische Wiederholungsmechanismen für fehlgeschlagene Entschlüsselung
-
Clientseitige Sicherheit:
- Updates werden vor der Installation verifiziert
- Fehlgeschlagene Entschlüsselung löst einen automatischen Rollback aus
- Sichere Schlüssel speichern in der geschützten Speicherung der App
Diese umfassende Sicherheitsstrategie stellt sicher, dass Ihre App-Updates vor folgenden Bedrohungen geschützt bleiben:
- Man-in-the-middle-Angriffe
- Serverseitige Sicherheitsverletzungen
- Unbefugte Modifikationen
- Wiedergabeangriffe
- Inhaltsmanipulationen
Update-Lebenszyklus
Capgo’s Aktualisierungsprozess ist standardmäßig automatisch. Hier ist eine Beschreibung, wie der automatische Prozess funktioniert:
1. Automatische Aktualisierungsprüfung
Der Plugin prüft automatisch auf Aktualisierungen in folgenden Situationen:
- Wenn die App gestartet wird
Dieses Verhalten wird durch die Einstellung gesteuert: autoUpdate Sie können auch manuell mit
// capacitor.config.json
{
"plugins": {
"CapacitorUpdater": {
"autoUpdate": true // Enable automatic updates
}
}
}
2. Automatische Herunterladen getLatest()
Wenn eine neue Version ermittelt wird, wenn
ist aktiviert: autoUpdate Die Herunterladung beginnt automatisch
- Der Fortschritt wird intern verfolgt
- __CAPGO_KEEP_0__’s
- Automatische Downloads werden bei jedem App-Öffnen erneut versucht
- Bei erfolgreichen Downloads werden die Daten 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 Installation ist von Ihrer Konfiguration abhängig:
// 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:
- Unmittelbar, wenn
directUpdateist wahr - Bei der nächsten App-Hintergrundaktivität, wenn
directUpdateist falsch - Automatische Rückschaltung bei Installationsschlägen
Der Plugin verwaltet auch die Speicherung automatisch:
- Entfernt fehlgeschlagene Updates wenn
autoDeleteFailedist wahr - Beseitigt alte Versionen wenn
autoDeletePreviousist wahr
Verzögert Updates
Sie können die Installation von Updates steuern, 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 geschoben wird
- Datum: Installieren Sie nach einem bestimmten Datum/Uhrzeit
- nativeVersion: Nach dem nächsten Native-Update installieren
- Beenden: Installieren, nachdem die App beendet wurde
Dies ist nützlich für:
- Scheduling von Updates während der Nebenzeit
- Koordinierung von Updates mit Benutzeraktivität
- Ein glatter Update-Erlebnis sicherzustellen
- Verhinderung von Unterbrechungen während kritischer Aufgaben
Update-Zustände
Während des automatischen Prozesses wechseln die Pakete durch diese Zustände:
- herunterladen: Herunterladen im Gange
- in Vorbereitung: Die Herunterladung ist abgeschlossen, Installationswarten
- Erfolg: Die Aktualisierung wurde installiert und ist aktiv
- Fehler: Die Aktualisierung fehlgeschlagen (Auslöser für automatischen Rollback)
Lizenzvereinbarung
Apple App Store ✅
Live-Updates sind vollständig mit den Richtlinien der Apple App Store vereinbar. Wie im Apple Developer Program License Agreement festgelegt:
“Interpretierte code dürfen heruntergeladen werden, um eine Anwendung, aber nur so lange, wie solche code: (a) die Hauptzweck der Anwendung nicht ändert, indem sie Funktionen oder Funktionalitäten bereitstellt, die mit dem beabsichtigten und beworbenen Zweck der Anwendung, wie sie dem App Store vorgelegt wurde, nicht übereinstimmen, (b) keine Verkaufsplattform oder -geschäft für andere code oder Anwendungen erstellt und (c) die Signierung, Sandbox oder andere Sicherheitsmerkmale des Betriebssystems nicht umgeht.”
Updates von Capgo ändern nur die Web-Schicht, während alle Plattform-Sicherheitsgrenzen respektiert werden.
Google Play Store ✅
Live Updates entsprechen den Google Play Richtlinien. Die Geräte- und Netzwerkmissbrauchsrichtlinie besagt speziell:
“Diese Einschränkung gilt nicht für code, das in einer virtuellen Maschine oder einem Interpreter läuft, der entweder einen indirekten Zugriff auf Android-APIs bietet (z. B. JavaScript in einem Webview oder Browser).”
Da Capgo nur die WebView-Inhalte aktualisiert, fällt es in diese erlaubten Richtlinien.
Best Practices
- Phased Rollouts: Updates schrittweise bereitstellen
- Version Control: Alle bereitgestellten Versionen verfolgen
- Rollback Support: Schnelle Wiederherstellung von Problemen
- Deltas: Nur geänderte Dateien herunterladen
When Live Updates zu verwenden
Perfect für:
- Korrekturen von Fehlern
- Verbesserungen der Benutzeroberfläche
- Inhaltsaktualisierungen
- Funktionsflags
Kein geeignetes Szenario:
- Native code-Änderungen
- Große Versionsaktualisierungen
- Sicherheitspatches, die native Änderungen erfordern
Fortsetzen Sie mit How Live Updates Work in Capgo
Wenn Sie __CAPGO_KEEP_0__ verwenden How Live Updates funktionieren in Capgo um native Plugin-Arbeit zu planen, verbinden Sie es mit Capgo Plugin-Verzeichnis zur Produktworkflow in Capgo Plugin-Verzeichnis Capacitor Plugins von Capgo zur Implementierungsdetail in Capacitor Plugins von Capgo Hinzufügen oder Aktualisieren von Plugins zur Implementierungsdetail in Hinzufügen oder Aktualisieren von Plugins Ionic Enterprise Plugin Alternativen zur Produktworkflow in Ionic Enterprise Plugin Alternativen, und Capgo Native Builds zur Produktworkflow in Capgo Native Builds.