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.
Concepts de base
Une application Capacitor se compose de deux couches principales :
- Couche Web : Contient les fichiers HTML, CSS et JavaScript chargés dans le WebView
- Couche Native : Contient les fichiers spécifiques au code (Java/Kotlin pour Android, Swift pour iOS)
Le système d'actualisation en temps réel de Capgo fonctionne en remplaçant la couche web en temps de exécution, car ces fichiers ne sont pas compilés dans le fichier binaire de l'application.
Mise en œuvre technique
Chemins de serveur dans Capacitor
Capgo gère deux chemins critiques :
- Chemins de serveur actuel : Pointe vers les fichiers chargés actuellement dans WebView
- Chemin du Serveur Suivant: Pointe vers les fichiers qui seront chargés lors du prochain redémarrage de l'application
Implémentation Android
Sur Android, Capgo gère les chemins à travers :
// 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();
}
Implémentation iOS
Sur iOS, les chemins sont gérés à travers :
// 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)
}
Mesures de Sécurité
Capgo met en œuvre des mesures de sécurité militaires grâce à une encryption de bout en bout, garantissant que les mises à jour de votre application restent complètement sécurisées du développement à la mise en production. Notre système d'encryption va au-delà de la signature traditionnelle code pour fournir une sécurité à zéro connaissance réelle.
Architecture de l'Encryption de Bout en Bout
-
Encryption de Bout en Bout (E2EE): Chaque bundle de mise à jour est chiffré à l'aide de l'algorithme AES-256-GCM avant de quitter votre environnement de développement. Cette encryption militaire garantit que les mises à jour de votre application restent complètement privées et sécurisées tout au long du processus de livraison.
-
Architecture à Zéro ConnaissanceContrairement à d'autres solutions d'actualisation OTA qui ne signent que les mises à jour, Capgo utilise une véritable encryption à zéro connaissance. Cela signifie :
- Le contenu des mises à jour est chiffré avant l'envoi
- Capgo n'enregistre que des données chiffrées sur ses serveurs
- La déchiffrement ne se produit que sur les appareils des utilisateurs finals
- Aucun intermédiaire ne peut accéder au contenu de vos mises à jour
-
Gestion des Clés Privées:
- Les clés de chiffrement sont générées et stockées de manière sécurisée dans votre environnement CI/CD
- Les clés privées ne touchent jamais les serveurs de Capgo
- Chaque version d'application peut utiliser des clés de chiffrement uniques
- Support de rotation de clés pour une sécurité renforcée
En savoir plus sur notre système de chiffrement dans notre guide détaillé : Chiffrement de bout en bout dans les mises à jour Capgo Live
Mise à jour du Processus de Sécurité
-
Chiffrement Pré-Import:
- Les mises à jour sont chiffrées dans votre pipeline CI/CD
- Chaque fichier est chiffré individuellement
- Les métadonnées sont également chiffrées pour une totale confidentialité
-
Stockage Sécurisé:
- Les bundles chiffrés sont stockés sur le CDN mondial de Capgo
- Aucune donnée texte brute ne touche jamais nos serveurs
- Même dans le cas d'une violation de serveur, les données restent sécurisées
-
Livraison Sécurisée:
- Les mises à jour sont livrées par des canaux chiffrés
- Chaque instance d'application valide l'intégrité de la chiffrage
- Mécanismes de réessai automatique pour la décryptage échouée
-
Sécurité côté client:
- Les mises à jour sont vérifiées avant l'installation
- La décryptage échouée déclenche un rollback automatique
- Stockage de clés sécurisé dans le stockage protégé de l'application
Cette approche de sécurité exhaustive garantit que vos mises à jour d'applications restent protégées contre :
- Attaques au milieu de la communication
- Pannes côté serveur
- Modifications non autorisées
- Attaques de replay
- Manipulation de contenu
Cycle de vie de mise à jour
Capgo’s process d’actualisation est conçu pour être automatique par défaut. Voici comment le processus automatique fonctionne :
1. Vérification automatique d'actualisation
Le plugin vérifie automatiquement les mises à jour dans les situations suivantes :
- Lors du démarrage de l'application
Ce comportement est contrôlé par la autoUpdate configuration :
// capacitor.config.json
{
"plugins": {
"CapacitorUpdater": {
"autoUpdate": true // Enable automatic updates
}
}
}
Vous pouvez également vérifier manuellement avec getLatest()
2. Téléchargement automatique
Lorsqu'une nouvelle version est détectée, si autoUpdate est activé :
- Le téléchargement démarre automatiquement
- Le progrès est suivi internement
- Téléchargements automatiques de réessais à chaque ouverture de l'application
- Les téléchargements réussis sont stockés dans le stockage de l'application
Vous pouvez suivre ce processus à travers les événements :
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. Installation automatique
La durée de l'installation dépend de votre configuration :
// 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'installation a lieu :
- Immédiatement si
directUpdateà true - À la prochaine mise en arrière-plan de l'application si
directUpdateà false - En cas d'échec de l'installation, le plugin effectue un rollback automatique
Le plugin gère également automatiquement le stockage :
- Supprime les mises à jour échouées si
autoDeleteFailedest vrai - Nettoie les anciennes versions si
autoDeletePreviousest vrai
Diffère les Mises à jour
Vous pouvez contrôler quand les mises à jour sont installées en utilisant des conditions de retard :
// 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'
}
]
});
Conditions de retard disponibles :
- arrière-plan: Installez lorsque l'application passe en arrière-plan
- : Installez après une date et heure spécifiquenativeVersion
- version native: Installer après la mise à jour native suivante
- kill: Installer après l'arrêt de l'application
Cela est utile pour :
- Planifier les mises à jour pendant les heures creuses
- Coordonner les mises à jour avec l'activité de l'utilisateur
- Assurer une expérience de mise à jour fluide
- Prévenir les interruptions pendant les tâches critiques
États de mise à jour
Pendant le processus automatique, les bundles passent par ces états :
- téléchargement: Téléchargement en cours
- en attenteTéléchargement complet, en attente d'installation
- réussiMise à jour installée et active
- erreurMise à jour échouée (déclenche un rollback automatique)
Conformité de l'application
Apple App Store
Les mises à jour en direct sont pleinement conformes aux politiques de l'Apple App Store. Comme indiqué dans le Contrat de licence du programme Apple Developer :
“Les code interprétés peuvent être téléchargés dans une Application mais uniquement si de telles code: (a) ne changent pas l'objectif principal de l'Application en fournissant des fonctionnalités ou des capacités qui sont incohérentes avec l'objectif et l'annonce prévus de l'Application soumise à l'App Store, (b) ne créent pas un magasin ou un point de vente pour d'autres code ou applications, et (c) ne contournent pas les fonctionnalités de signature, de sandbox ou de sécurité de l'OS.”
Capgo met à jour uniquement la couche web tout en respectant toutes les limites de sécurité du système.
Google Play Store
Mises à jour en temps réel respectent les politiques de Google Play.
“This restriction does not apply to code that runs in a virtual machine or an interpreter where either provides indirect access to Android APIs (such as JavaScript in a webview or browser).”
“Cette restriction ne s'applique pas aux Capgo qui s'exécutent dans une machine virtuelle ou un interpréteur qui fournit un accès indirect aux API Android (comme JavaScript dans un webview ou un navigateur).”
Pratiques recommandées
- Déploiements étalés: Déployez les mises à jour progressivement
- Contrôle de version: Suivez toutes les versions déployées
- Support de reversion: Rétablissez rapidement les problèmes
- Mises à jour delta: Téléchargez uniquement les fichiers modifiés
Quand utiliser les mises à jour en temps réel
Idéal pour :
- Corrections de bogues
- Améliorations de l'interface utilisateur
- Mises à jour de contenu
- Tirages de fonctionnalités
Pas adapté pour :
- Changements natifs code
- Mises à jour de version majeure
- Correctifs de sécurité nécessitant des changements natifs
Continuez à partir de Comment les mises à jour en temps réel fonctionnent dans Capgo
Si vous utilisez Comment fonctionnent les mises à jour en temps réel dans Capgo pour planifier le travail de plugin natif, connectez-le à Capgo Répertoire de plugins pour le flux de travail du produit dans Capgo Répertoire de plugins, Capacitor Plugins par Capgo pour les détails d'implémentation dans Capacitor Plugins par Capgo, Ajouter ou mettre à jour des plugins pour les détails d'implémentation dans Ajouter ou mettre à jour des plugins, Alternatives de plugins Enterprise Ionic pour le flux de travail du produit dans Alternatives de plugins Enterprise Ionic, et Capgo Bâtiments natifs pour le flux de travail du produit dans Capgo Bâtiments natifs.