Aller au contenu principal

Comment fonctionnent les Live Updates dans Capgo

Plongez dans l'implémentation technique des live updates dans Capgo et comprenez leur fonctionnement interne sur iOS et Android.

« Comment fonctionnent les Live Updates dans Capgo » Capgo illustration du blog

Comprendre les Live Updates dans Capgo

les live updates Capacitor (OTA) remplace le bundle web dans votre application pour vous permettre de déployer des changements JavaScript, HTML et CSS sans nouveau binaire sur les stores. Les live updates sont l'une des fonctionnalités les plus puissantes des apps Capacitor : elles permettent des mises à jour en temps réel sans soumission aux stores. Voyons en détail comment Capgo implémente cette fonctionnalité.

Concepts clés

Une application Capacitor se compose de deux couches principales :

  1. Couche web: contient les fichiers HTML, CSS et JavaScript chargés dans la WebView
  2. Couche native: contient le code spécifique à la plateforme (Java/Kotlin pour Android, Swift pour iOS)

Le système live update de Capgo fonctionne en remplaçant la couche web au runtime, car ces fichiers ne sont pas compilés dans le binaire de l'application.

Implémentation technique

Chemins serveur dans Capacitor

Capgo gère deux chemins critiques :

  • Chemin serveur actuel: Indique les fichiers actuellement chargés dans la WebView
  • Chemin du serveur suivant: Indique les fichiers qui seront chargés au prochain redémarrage de l’app

Implémentation sur Android

Sur Android, Capgo gère les chemins via :

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

// 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 une sécurité de niveau militaire grâce au chiffrement de bout en bout, pour que les mises à jour de votre app restent parfaitement sécurisées, du développement au déploiement. Notre système de chiffrement va au-delà de la signature code traditionnelle pour offrir une véritable sécurité zero-knowledge.

Architecture de chiffrement de bout en bout

  1. Chiffrement de bout en bout (E2EE): Chaque bundle de mise à jour est chiffré avec AES-256-GCM avant de quitter votre environnement de développement. Ce chiffrement de niveau militaire garantit que les mises à jour de votre application restent totalement privées et sécurisées tout au long du processus de livraison.

  2. Architecture zero-knowledge: Contrairement à d’autres solutions de mise à jour OTA qui se contentent de signer les mises à jour, Capgo utilise un véritable chiffrement zero-knowledge. Cela signifie :

    • Le contenu des mises à jour est chiffré avant l’upload
    • Les serveurs Capgo ne stockent que des données chiffrées
    • Decryption only happens on end-user devices
    • Aucun intermédiaire ne peut accéder au contenu de vos mises à jour
  3. Gestion sécurisée des clés:

    • Les clés de chiffrement sont générées et stockées en toute sécurité dans votre environnement CI/CD
    • Les clés privées ne touchent jamais les serveurs de Capgo
    • Chaque version de l'app peut utiliser des clés de chiffrement uniques
    • Key rotation support for enhanced security

En savoir plus sur notre système de chiffrement dans notre guide détaillé : Chiffrement de bout en bout dans Capgo Live Updates

Processus de sécurité des mises à jour

  1. Chiffrement avant l'upload:

    • Les mises à jour sont chiffrées dans votre pipeline CI/CD
    • Chaque fichier est chiffré individuellement
    • Les métadonnées sont aussi chiffrées pour une confidentialité totale
  2. Stockage sécurisé:

    • Les bundles chiffrés sont stockés sur le CDN mondial de Capgo
    • Aucune donnée en clair ne transite jamais par nos serveurs
    • Même en cas de faille serveur, les données restent sécurisées
  3. Livraison sécurisée:

    • Les mises à jour sont livrées via des canaux chiffrés
    • Chaque instance d’application valide l’intégrité du chiffrement
    • Automatic retry mechanisms for failed decryption
  4. Sécurité côté client:

    • Les mises à jour sont vérifiées avant installation
    • Un échec de déchiffrement déclenche un rollback automatique
    • Stockage sécurisé des clés dans le stockage protégé de l’app

Cette approche de sécurité complète garantit que vos mises à jour d’application restent protégées contre :

  • Les attaques man-in-the-middle
  • Les violations côté serveur
  • Modifications non autorisées
  • Attaques par rejeu
  • Altération du contenu

Cycle de vie des mises à jour

Le processus de mise à jour de Capgo est automatique par défaut. Voici comment il fonctionne :

1. Vérification automatique des mises à jour

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

  • Au démarrage de l'app

Ce comportement est contrôlé par le autoUpdate paramètre :

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

Vous pouvez aussi 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. La progression est suivie en interne
  3. Failed downloads auto-retry at each app open
  4. Les téléchargements réussis sont stockés dans le stockage de l'app

Vous pouvez suivre ce processus via des é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

Le moment 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 s'effectue :

  • Immédiatement si directUpdate est vrai
  • Au prochain passage de l'app en arrière-plan si directUpdate est faux
  • Rollback automatique si l'installation échoue

Le plugin gère aussi automatiquement le stockage :

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

Différer les mises à jour

Vous pouvez contrôler l'installation des mises à jour via des conditions de délai :

// 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 délai disponibles :

  • background: Installer quand l'app passe en arrière-plan
  • date: Installer après une date/heure précise
  • nativeVersion: Installer après la prochaine mise à jour native
  • Arrêter: Installer après fermeture de l'app

C'est utile pour :

  • Planifier les mises à jour pendant les heures creuses
  • Coordonner les mises à jour avec l'activité utilisateur
  • Garantir une expérience de mise à jour fluide
  • Éviter 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 terminé, en attente d’installation
  3. succès: Mise à jour installée et active
  4. erreur: Update failed (triggers auto-rollback)

Conformité aux stores

App Store d'Apple ✅

Les Live Updates sont entièrement conformes aux politiques de l’App Store d’Apple. Comme indiqué dans le Contrat de licence du programme Apple Developer :

« Le code interprété peut être téléchargé dans une application, mais uniquement tant que ce code : (a) ne modifie pas l'objectif principal de l'application en fournissant des fonctionnalités ou des capacités incompatibles avec l'usage prévu et annoncé de l'application telle que soumise à l'App Store, (b) ne crée pas de store ni de vitrine pour d'autres code ou applications, et (c) ne contourne pas la signature, le sandbox ou d'autres fonctionnalités de sécurité de l'OS. »

Les mises à jour Capgo ne modifient que la couche web, tout en respectant les limites de sécurité de la plateforme.

Google Play Store ✅

Les Live Updates respectent les politiques de Google Play. La politique relative à l'abus de l'appareil et du réseau stipule précisément :

« Cette restriction ne s'applique pas à code qui s'exécute dans une machine virtuelle ou un interpréteur, lorsque l'un ou l'autre fournit un accès indirect aux API Android (par exemple du JavaScript dans une WebView ou un navigateur). »

Comme Capgo ne met à jour que le contenu de la WebView, cela respecte ces directives autorisées.

Bonnes pratiques

  1. Déploiements progressifs: Déployer les mises à jour progressivement
  2. Gestion des versions: Suivre toutes les versions déployées
  3. Support du rollback: Récupération rapide en cas de problème
  4. Mises à jour delta: Ne téléchargez que les fichiers modifiés

Quand utiliser les live updates

Idéal pour :

  • Bug fixes
  • Améliorations de l’interface
  • Mises à jour de contenu
  • Bascules de fonctionnalités

Non adapté pour :

  • Modifications natives code
  • Mises à jour de versions majeures
  • Correctifs de sécurité nécessitant des modifications natives

Suite : « Comment fonctionnent les live updates dans Capgo »

Si vous utilisez Comment fonctionnent les Live Updates dans Capgo pour planifier le travail sur les plugins natifs, connectez-l’à Capgo Répertoire des plugins pour le workflow produit dans Capgo Plugin Directory, Plugins Capacitor par Capgo pour les détails d'implémentation dans Plugins Capacitor par Capgo, Ajouter ou mettre à jour des plugins pour les détails d'implémentation dans Adding or Updating Plugins, Alternatives aux plugins Ionic Enterprise pour le workflow produit dans les alternatives aux plugins Ionic Enterprise, et Capgo Native Build pour le workflow produit dans Capgo Native Builds.

Live updates pour les apps Capacitor

Lorsqu'un bug de la couche web est en ligne, déployez le correctif via Capgo au lieu d'attendre des jours l'approbation des stores. Les utilisateurs reçoivent la mise à jour en arrière-plan, tandis que les changements natifs suivent le circuit de validation habituel.

Les derniers articles du blog

Capgo vous offre les meilleures informations pour créer une application mobile vraiment professionnelle.