Passer au contenu principal

How Live Updates Work in Capgo

Deep dive into the technical implementation of live updates in Capgo, understanding how it works under the hood for both iOS and Android.

Martin Donadieu

Martin Donadieu

Spécialiste du contenu

How Live Updates Work in Capgo

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 fondamentaux

Une application Capacitor est composée de deux couches principales :

  1. Layer Web: Contient des fichiers HTML, CSS et JavaScript chargés dans le WebView
  2. Layer Natif: Contient des code spécifiques à la plateforme (Java/Kotlin pour Android, Swift pour iOS)

Le système d'actualisation en temps réel de Capgo fonctionne en remplaçant le layer web en temps de exécution, car ces fichiers ne sont pas compilés dans le fichier binaire de l'application.

Implémentation Technique

Chemins de serveur dans Capacitor

Capgo gère deux chemins critiques :

  • Chemins de serveur actuel: Pointe vers les fichiers chargés actuellement dans le WebView
  • Chemin du Serveur Suivant: Pointe vers les fichiers qui chargeront lors du prochain redémarrage de l'application

Implémentation Android

Sur Android, Capgo gère les chemins par le biais de :

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

// 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 par l'intermédiaire de l'encryption de bout en bout, garantissant que les mises à jour de votre application restent complètement sécurisées de la phase de développement à la phase de déploiement. Notre système d'encryption va au-delà de la signature traditionnelle code pour fournir une sécurité à zéro connaissance.

Architecture de l'Encryption de Bout en Bout

  1. 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.

  2. Architecture à Zéro Connaissance: Contrairement à 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
    • Les serveurs de Capgo n'ont que des données chiffrées en stock
    • La décryptage ne se produit que sur les appareils des utilisateurs finals
    • Aucun intermédiaire ne peut accéder au contenu de vos mises à jour
  3. Gestion de Clés Sécures:

    • 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 en temps réel

Processus de mise à jour de sécurité

  1. Chiffrement avant téléchargement:

    • 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é
  2. Stockage sécurisé:

    • Les bundles chiffrés sont stockés sur le CDN mondial de Capgo
    • Aucune donnée texte non chiffrée ne touche jamais nos serveurs
    • Même dans le cas d'une violation de serveur, les données restent sécurisées
  3. 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éessais automatiques pour la décryptage échouée
  4. Sécurité côté client:

    • Les mises à jour sont vérifiées avant l'installation
    • Une 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 restent protégées contre :

  • Les attaques man-in-the-middle
  • Les vols côté serveur
  • Les modifications non autorisées
  • Les attaques de replay
  • La manipulation de contenu

Le cycle de vie de la mise à jour

Le processus d'Capgo mise à jour est conçu pour être automatique par défaut. Voici comment fonctionne le processus automatique :

1. Vérification automatique de mise à jour

Le plugin vérifie automatiquement les mises à jour dans les situations suivantes :

  • Lors du démarrage de l'application

Cette fonctionnalité est contrôlée par la autoUpdate Paramètre :

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

  1. Le téléchargement démarre automatiquement
  2. Le progrès est suivi internement
  3. Téléchargements échoués sont réessayés à chaque ouverture de l'application
  4. 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 est vrai
  • À la prochaine mise en arrière-plan de l'application si directUpdate est faux
  • Rougeau automatique si l'installation échoue

Le plugin gère également automatiquement le stockage :

  • Supprime les mises à jour échouées si autoDeleteFailed est vrai
  • Nettoie les anciennes versions si autoDeletePrevious est vrai

Mise en Suspend

Vous pouvez contrôler quand les mises à jour sont installées en utilisant les 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
  • date : Installez après une date et heure spécifique
  • versionNative: Installer après la mise à jour native suivante
  • kill: Installer après que l'application soit fermée

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 :

  1. téléchargement: Téléchargement en cours
  2. en attente: Téléchargement complet, en attente d'installation
  3. réussi: Mise à jour installée et active
  4. erreur: Mise à jour échouée (déclenche un rollback automatique)

Conformité de l'application

Apple App Store ✅

Les mises à jour en temps réel sont pleinement conformes aux politiques de l'Apple App Store. Comme indiqué dans le Contrat de licence du programme Apple Developer :

“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.”

Les mises à jour Capgo ne modifient que la couche web tout en respectant toutes les limites de sécurité du système.

Google Play Store ✅

Les mises à jour en temps réel respectent les politiques de Google Play. La politique spécifique de l'abuse des appareils et du réseau indique :

“Cette restriction ne s'applique pas aux code 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).”

Puisque Capgo ne met à jour que le contenu de WebView, cela tombe dans ces directives autorisées.

Meilleures Pratiques

  1. Rollouts Phasés: Déployez les mises à jour progressivement
  2. Gestion de Versioncontext : Page/zone : Site web de marketing Capgo. Rôle : Étiquette de navigation ou élément UI court. Clé de message `version_control` (Gestion de version).
  3. : Suivez toutes les versions déployéesSupport de Retour en Arrière
  4. : Récupération rapide des problèmesMises à jour Delta : : Téléchargez uniquement les fichiers modifiés

Quand utiliser les mises à jour en temps réel

Parfait pour :

  • Corrections de bogues
  • Améliorations de l'interface utilisateur
  • Mises à jour de contenu
  • Fonctions de masquage de fonctionnalités

Pas adapté pour :

  • Changements natifs de 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 How Live Updates fonctionnent dans Capgo pour planifier le travail de plugin natif, connectez-l’avec Capgo Répertoire de plugin pour le flux de travail du produit dans Capgo Répertoire de plugin, Capacitor Plugins par Capgo pour le détail d'implémentation dans Capacitor Plugins par Capgo, Ajouter ou Mettre à Jour les Plugins pour le détail d'implémentation dans Ajouter ou Mettre à Jour les Plugins, Alternatives de Plugin Entreprise Ionic pour le flux de travail du produit dans Alternatives de Plugin Entreprise Ionic, et Capgo Bâtiments natifs pour le flux de travail du produit dans Capgo Bâtiments natifs.

Les mises à jour en temps réel pour les applications Capacitor

Quand un bug de la couche web est en direct, expédiez la correction par le biais de Capgo au lieu d'attendre des jours pour l'approbation de la boutique d'applications. Les utilisateurs reçoivent la mise à jour en arrière-plan tandis que les modifications natives restent dans la voie de revue normale.

un soutien humain de Martin

Démarrer maintenant

Dernières actualités de notre Blog

Capgo vous donne les meilleures informations dont vous avez besoin pour créer une application mobile vraiment professionnelle.