Ciblage de Version
Copiez un prompt de configuration avec les étapes d'installation et le guide Markdown complet pour ce plugin.
Ce guide explique comment livrer automatiquement la dernière version compatible aux utilisateurs en fonction de leur version d'application native, de la même manière que l'approche d'AppFlow d'IonicCela garantit une gestion simplifiée des mises à jour et des déploiements plus rapides tout en évitant les problèmes de compatibilité.
Vue d'ensemble
Section intitulée « Vue d'ensemble »Capgo's système de ciblage de version vous permet de :
- Fournir automatiquement des mises à jour compatibles aux utilisateurs en fonction de leur version d'application native
- Empêcher les modifications de rupture de parvenir aux versions d'application incompatibles
- Gérer plusieurs versions d'application simultanément sans logique complexe
- Lancer des mises à jour sans heurt aux segments d'utilisateurs spécifiques
Pourquoi la ciblage de version est important (surtout pour les utilisateurs d'AppFlow)
Titre de la section « Pourquoi la ciblage de version est important (surtout pour les utilisateurs d'AppFlow) »Si vous êtes familier avec Ionic AppFlow, vous savez à quel point il est crucial de s'assurer que les utilisateurs reçoivent uniquement des mises à jour compatibles. AppFlow a automatiquement associé des lots de mise à jour live aux versions natives d'applications, empêchant ainsi que des JavaScript incompatibles soient livrés aux versions natives plus anciennes code.
Capgo offre les mêmes garanties de sécurité, avec des fonctionnalités supplémentaires :
- Un contrôle plus granulaire sur la correspondance de version
- Plusieurs stratégies (canaux, semver, contraintes natives)
- Une meilleure visibilité sur la distribution de version
- API et CLI contrôlent aux côtés de la gestion du tableau de bord
Cette approche est particulièrement utile dans les cas suivants :
- Vous avez des utilisateurs sur différentes versions majeures de votre application (par exemple, v1.x, v2.x, v3.x)
- Vous devez maintenir la compatibilité vers le bas tout en mettant à jour les changements de rupture
- Vous voulez empêcher les nouveaux bundles de casser les versions natives code plus anciennes
- Vous migrez les utilisateurs progressivement d'une version à l'autre
- Vous migrez de AppFlow et vous voulez maintenir la même sécurité d'actualisation
Comment ça marche
Section intitulée “Comment ça marche”Capgo utilise une approche multi-niveaux pour matcher les utilisateurs avec des mises à jour compatibles :
- Contraintes de version native: Empêcher les bundles de être livrés aux versions natives incompatibles
- Routage basé sur le canalRoutez différentes versions de l'application vers différents canaux de mise à jour
- Contrôle de la version sémantiqueAutomatiquement bloquer les mises à jour sur les limites majeures/minores/patch
- Survolage du niveau appareilCiblez des appareils ou des groupes d'utilisateurs spécifiques
Flux de correspondance de version
Section intitulée « Flux de correspondance de version »graph TD A[User Opens App] --> B{Check Device Override} B -->|Override Set| C[Use Override Channel] B -->|No Override| D{Check defaultChannel in App} D -->|Has defaultChannel| E[Use App's defaultChannel] D -->|No defaultChannel| F[Use Cloud Default Channel] C --> G{Check Version Constraints} E --> G F --> G G -->|Compatible| H[Deliver Update] G -->|Incompatible| I[Skip Update]Stratégie 1 : Routage de version basé sur le canal
Section intitulée « Stratégie 1 : Routage de version basé sur le canal »Ceci est la approche recommandée pour gérer les changements de rupture et les mises à jour majeures de version. Cela ressemble au modèle de livraison d'AppFlow.
Scénario d'exemple
Section intitulée « Scénario d'exemple »- App v1.x (100 000 utilisateurs) →
productioncanal - App v2.x (50 000 utilisateurs avec des changements de rupture) →
v2canal - App v3.x (10 000 utilisateurs bêta) →
v3canal
Mise en œuvre
Section intitulée « Mise en œuvre »Étape 1 : Configurer les canaux pour chaque version majeure
Section intitulée « Étape 1 : Configurer les canaux pour chaque version majeure »// capacitor.config.ts for version 1.x buildsimport { CapacitorConfig } from '@capacitor/cli';
const config: CapacitorConfig = { appId: 'com.example.app', appName: 'Example App', plugins: { CapacitorUpdater: { autoUpdate: true, defaultChannel: 'production', // or omit for default } }};
export default config;// capacitor.config.ts for version 2.x buildsconst config: CapacitorConfig = { appId: 'com.example.app', appName: 'Example App', plugins: { CapacitorUpdater: { autoUpdate: true, defaultChannel: 'v2', // Routes v2 users automatically } }};// capacitor.config.ts for version 3.x buildsconst config: CapacitorConfig = { appId: 'com.example.app', appName: 'Example App', plugins: { CapacitorUpdater: { autoUpdate: true, defaultChannel: 'v3', // Routes v3 users automatically } }};Étape 2 : Créer des canaux
Section intitulée « Étape 2 : Créer des canaux »# Create channels for each major versionnpx @capgo/cli channel create productionnpx @capgo/cli channel create v2npx @capgo/cli channel create v3
# Enable self-assignment so apps can switch channelsnpx @capgo/cli channel set production --self-assignnpx @capgo/cli channel set v2 --self-assignnpx @capgo/cli channel set v3 --self-assignÉtape 3 : Télécharger des ensembles de version spécifique
Section intitulée « Étape 3 : Chargement de Bundles Spécifiques à la Version »# For v1.x users (from v1-maintenance branch)git checkout v1-maintenancenpm run buildnpx @capgo/cli bundle upload --channel production
# For v2.x users (from v2-maintenance or main branch)git checkout mainnpm run buildnpx @capgo/cli bundle upload --channel v2
# For v3.x users (from beta/v3 branch)git checkout betanpm run buildnpx @capgo/cli bundle upload --channel v3Avantages
Section intitulée « Avantages »- Aucune modification code - Le routage du canal se produit automatiquement
- Séparation claire - Chaque version a son propre pipeline d'actualisation
- Ciblage flexible - Envoyez des mises à jour vers des groupes de versions spécifiques
- Déploiement sécurisé - Les modifications de rupture ne parviennent jamais aux versions incompatibles
Stratégie 2 : Contrôles de versionnement sémantique
Utilisez les contrôles de versionnement sémantique intégrés de __CAPGO_KEEP_0__ pour empêcher les mises à jour à travers les limites de version.Use Capgo’s built-in semantic versioning controls to prevent updates across version boundaries.
Fenêtre de terminal
Copier dans le presse-papier# Create a channel that blocks major version updatesnpx @capgo/cli channel create stable --disable-auto-update majorCette configuration signifie :
- Les utilisateurs de la version de l'application 1.2.3 recevront des mises à jour jusqu'à 1.9.9
- Les utilisateurs recevront PAS la version 2.0.0 automatiquement
- Empêche les modifications de rupture d'atteindre les versions natives plus anciennes code
Options de contrôle granulaire
Section intitulée « Options de contrôle granulaire »# Block minor version updates (1.2.x won't get 1.3.0)npx @capgo/cli channel set stable --disable-auto-update minor
# Block patch updates (1.2.3 won't get 1.2.4)npx @capgo/cli channel set stable --disable-auto-update patch
# Allow all updatesnpx @capgo/cli channel set stable --disable-auto-update noneStratégie 3 : Contraintes de version native
Section intitulée « Stratégie 3 : Contraintes de version native »Spécifiez les exigences de version native minimale pour les lots pour empêcher la livraison à des appareils incompatibles.
Utilisation de la condition de retard de version native
Section intitulée « Utilisation de la condition de retard de version native »Lors de l'envoi d'un lot, vous pouvez spécifier une version native minimale :
# This bundle requires native version 2.0.0 or highernpx @capgo/cli bundle upload \ --channel production \ --native-version "2.0.0"Cas d'utilisation
Section intitulée « Cas d'utilisation »-
Nouveau plugin natif requis
Fenêtre de terminal # Bundle needs Camera plugin added in v2.0.0npx @capgo/cli bundle upload --native-version "2.0.0" -
Changements natifs API brisants
Fenêtre de terminal # Bundle uses new Capacitor 6 APIsnpx @capgo/cli bundle upload --native-version "3.0.0" -
Migration progressive
Fenêtre de terminal # Test bundle only on latest native versionnpx @capgo/cli bundle upload \--channel beta \--native-version "2.5.0"
Stratégie 4 : Prévention de la mise à niveau automatique
Section intitulée « Stratégie 4 : Prévention de la mise à niveau automatique »Empêcher les utilisateurs de recevoir des bundles plus anciens que leur version native actuelle.
Activer dans les paramètres de canal
Dans le tableau de bord __CAPGO_KEEP_0__ :In the Capgo dashboard:
- Canaux → Sélectionnez votre canal Activer
- Activer dans les paramètres de canal Désactiver la mise à niveau automatique sous native
- Sauvegarder les modifications
Ou via CLI:
npx @capgo/cli channel set production --disable-downgrade- Appareil de l'utilisateur : Version native 1.2.5
- Bundle de canal : Version 1.2.3
- RésultatMise à jour bloquée (serait une mise à niveau)
Cela est utile lorsque :
- Les utilisateurs ont installé manuellement une version plus récente depuis l'App Store
- Vous devez vous assurer que les utilisateurs aient toujours les dernières mises à jour de sécurité
- Vous souhaitez prévenir les bogues de régression
Stratégie 5 : Ciblage au niveau appareil
Section intitulée « Stratégie 5 : Ciblage au niveau appareil »Surcharger la mise à jour de canal pour des appareils ou des groupes d'utilisateurs spécifiques
Forcer une version spécifique pour les tests
Section intitulée « Forcer une version spécifique pour les tests »import { CapacitorUpdater } from '@capgo/capacitor-updater'
// Force beta testers to use v3 channelasync function assignBetaTesters() { const deviceId = await CapacitorUpdater.getDeviceId()
// Check if user is beta tester if (isBetaTester(userId)) { await CapacitorUpdater.setChannel({ channel: 'v3' }) }}Ouverture de session de l'appareil
Section intitulée « Ouverture de session de l'appareil »Dans le tableau de bord Capgo :
- Allez à Appareils → Trouvez l'appareil
- Cliquez Définir le canal ou Définir la version
- Surcharger avec une version de canal ou de paquet spécifique
- L'appareil recevra des mises à jour de la source surchargée
Flux de travail complet AppFlow
Section intitulée « Flux de travail complet AppFlow »Voici un exemple complet combinant toutes les stratégies :
1. Configuration initiale (Application v1.0.0)
Section intitulée « 1. Configuration initiale (Application v1.0.0) »# Create production channel with semver controlsnpx @capgo/cli channel create production \ --disable-auto-update major \ --disable-downgradeconst config: CapacitorConfig = { plugins: { CapacitorUpdater: { autoUpdate: true, defaultChannel: 'production', } }};2. Mise à jour de la version avec changement de rupture (Application v2.0.0)
Section intitulée « 2. Mise à jour de la version avec changement de rupture (Application v2.0.0) »# Create v2 channel for new versionnpx @capgo/cli channel create v2 \ --disable-auto-update major \ --disable-downgrade \ --self-assign
# Create git branch for v1 maintenancegit checkout -b v1-maintenancegit push origin v1-maintenance// capacitor.config.ts for v2.0.0const config: CapacitorConfig = { plugins: { CapacitorUpdater: { autoUpdate: true, defaultChannel: 'v2', // New users get v2 channel } }};3. Mettre à jour les deux versions
Section intitulée « 3. Mettre à jour les deux versions »# Update v1.x users (bug fix)git checkout v1-maintenance# Make changesnpx @capgo/cli bundle upload \ --channel production \ --native-version "1.0.0"
# Update v2.x users (new feature)git checkout main# Make changesnpx @capgo/cli bundle upload \ --channel v2 \ --native-version "2.0.0"4. Surveiller la distribution des versions
Section intitulée « 4. Surveiller la distribution des versions »Utilisez le tableau de bord Capgo pour suivre :
- Combien d'utilisateurs sont sur v1 vs v2
- Taux d'adoption des bundles par version
- Erreurs ou plantages par version
5. Dépréciation de la version ancienne
Section intitulée “5. Dépréciation de la version ancienne”Une fois que l'utilisation de v1 tombe en dessous du seuil :
# Stop uploading to production channel# Optional: Delete v1 maintenance branchgit branch -d v1-maintenance
# Move all remaining users to default# (They'll need to update via app store)Préférence de canal
Section intitulée “Préférence de canal”Lorsqu'il existe plusieurs configurations de canal, Capgo utilise l'ordre de priorité suivant :
- Surcharge de l'appareil (Tableau de bord ou API) - Priorité la plus élevée
- Surcharge de Cloud via
setChannel()appeler - canal par défaut par défaut dans capacitor.config.ts
- Canal par Défaut (Réglage Cloud) - Priorité la plus basse
Meilleures Pratiques
Section intitulée « Bonnes Pratiques »1. Définissez toujours defaultChannel pour les Versions Majeures
Section intitulée « 1. Définissez toujours defaultChannel pour les Versions Majeures »// ✅ Good: Each major version has explicit channel// v1.x → production// v2.x → v2// v3.x → v3
// ❌ Bad: Relying on dynamic channel switching// All versions → production, switch manually2. Utilisez la Versionnement Sémantique
Fenêtre de terminal# ✅ Good1.0.0 → 1.0.1 → 1.1.0 → 2.0.0
# ❌ Bad1.0 → 1.1 → 2 → 2.5Fenêtre de terminal
Copier dans le presse-papier# ✅ Good: Separate branches per major versionmain (v3.x)v2-maintenance (v2.x)v1-maintenance (v1.x)
# ❌ Bad: Single branch for all versions4. Tester avant la mise en production
Section intitulée “4. Tester avant la mise en production”# Test on beta channel firstnpx @capgo/cli bundle upload --channel beta
# Monitor for issues, then promote to productionnpx @capgo/cli bundle upload --channel production5. Surveiller la distribution de versions
Section intitulée “5. Surveiller la distribution de versions”Vérifiez régulièrement votre tableau de bord :
- Les utilisateurs se mettent-ils à jour vers les versions natives plus récentes ?
- Les anciennes versions reçoivent-elles encore un trafic élevé ?
- Faut-il déprécier les anciens canaux ?
Comparaison avec Ionic AppFlow
Section intitulée “Comparaison avec Ionic AppFlow”Pour les équipes en train de migrer de Ionic AppFlowVoici comment la version ciblée de Capgo se compare :
| Fonctionnalité | Ionic AppFlow | Capgo |
|---|---|---|
| Routage basé sur la version | Basé sur la version native | Via automatique defaultChannel + plusieurs stratégies |
| Numérotation sémantique | Supporte de base | Avancé avec --disable-auto-update (majeur/minor/patch) |
| Contraintes de version native | Configuration manuelle dans le tableau de bord d'AppFlow | Intégré --native-version drapeau dans CLI |
| Gestion de la chaîne | Interface Web + CLI | Interface Web + CLI + API |
| Surcharge de dispositif | Contrôle limité au niveau du dispositif | Contrôle total via Tableau de bord/API |
| Prévention de la désactivation automatique | Oui | Oui via --disable-downgrade |
| Maintenance de plusieurs versions | Gestion de branches/channels manuelle | Automatisé avec priorité de canal |
| Hébergement auto-hôte | Non | Oui (contrôle total) |
| Analytique de version | Basique | Détails de métriques par version |
Dépannage
Section intitulée « Dépannage »Les utilisateurs ne reçoivent pas les mises à jour
Section intitulée « Les utilisateurs ne reçoivent pas les mises à jour »Vérifiez les éléments suivants :
-
Affectation de canal: Vérifiez que le dispositif est sur le canal correct
const channel = await CapacitorUpdater.getChannel()console.log('Current channel:', channel) -
Contraintes de version: Vérifiez si le bundle a des exigences de version natives
- Tableau de bord → Bundles → Vérifiez la colonne « Version native »
-
Paramètres Semver: Vérifiez les paramètres du canal «
disable-auto-updatefenêtre de terminalCopier dans le presse-papier npx @capgo/cli channel list -
: Vérifiez si le périphérique a une surcharge manuelleTableau de bord → Périphériques → Recherchez le périphérique → Vérifiez le canal/la version
- setting
Bundle Livré à la mauvaise version
Section intitulée « Bundle Livré à la mauvaise version »- Réviser defaultChannel : Assurer que le canal est correct
capacitor.config.ts - Vérifier l'upload du bundle : Vérifier que le bundle a été uploadé sur le canal prévu
- Inspecter la version native : Confirmer que
--native-versionla bannière a été utilisée correctement
Changements de rupture affectant les anciennes versions
Section intitulée « Changements de rupture affectant les anciennes versions »- Réparation immédiate: Surcharger les appareils affectés pour un bundle sécurisé
- Tableau de bord → Appareils → Sélection multiple → Définir la version
- Solution durableCréez des canaux versionnés et maintenez des branches séparées
- Prévention: Testez toujours les mises à jour sur des appareils représentatifs avant le lancement
Migration depuis Ionic AppFlow
Mise à niveau de Ionic AppFlowSi vous migrez depuis Ionic AppFlow, la version ciblée fonctionne de manière très similaire dans Capgo, avec une flexibilité améliorée :
Cartographie de Concept
Section intitulée « Cartographie de concepts »| AppFlow Concept | Capgo Équivalent | Notes |
|---|---|---|
| Canal de déploiement | Capgo Canal | Même concept, plus puissant |
| Verrouillage de version native | --native-version flag | Plus de contrôle granulaire |
| Priorité du canal | Préférence de canal (surcharge → cloud → par défaut) | Préférence plus transparente |
| Cible de déploiement | Contrôle de la version par Channel + semver | Plusieurs stratégies disponibles |
| Channel de production | production Nom de canal (ou n'importe quel nom) | Nommage flexible |
| Déploiement basé sur Git | CLI téléchargement de bundle à partir de branch | Même flux de travail |
| Compatibilité automatique de version | defaultChannel + contraintes de version | Amélioré avec plusieurs stratégies |
Différences clés pour les utilisateurs d'AppFlow
Section intitulée « Différences clés pour les utilisateurs d'AppFlow »- Plus de contrôle: Capgo vous offre plusieurs stratégies (canaux, semver, version native) qui peuvent être combinées
- Une meilleure visibilité: Le tableau de bord montre la distribution des versions et les problèmes de compatibilité
- API Accès: Contrôle programmatique complet sur la cible de version
- Hébergement auto: Option de lancer votre propre serveur d'actualisation avec la même logique de version
Étapes de migration
Étape de migration- Cartographiez vos canaux AppFlow à Capgo canaux (généralement 1:1)
- Définissez
defaultChanneldanscapacitor.config.tspour chaque version majeure - Configurez les règles de semver si vous souhaitez un blocage automatique aux limites de version
- Charger des bundles spécifiques à la version en utilisant
--native-versionflag - Surveillez la distribution des versions dans le tableau de bord Capgo
Modèles avancés
Section intitulée « Modèles avancés »Déploiement progressif par version
Section intitulée « Déploiement progressif par version »// Gradually migrate v1 users to v2async function migrateUsers() { const deviceId = await CapacitorUpdater.getDeviceId() const rolloutPercentage = 10 // Start with 10%
// Hash device ID to get deterministic percentage const hash = hashCode(deviceId) % 100
if (hash < rolloutPercentage) { // User is in rollout group - migrate to v2 await CapacitorUpdater.setChannel({ channel: 'v2' }) }}Drapeaux de fonctionnalité par version
Section intitulée « Drapeaux de fonctionnalité par version »// Enable features based on native versionasync function checkFeatureAvailability() { const info = await CapacitorUpdater.getDeviceId() const nativeVersion = info.nativeVersion
if (compareVersions(nativeVersion, '2.0.0') >= 0) { // Enable features requiring v2.0.0+ enableNewCameraFeature() }}Test A/B sur les versions
Section intitulée « Test A/B sur les versions »// Run A/B tests within same native versionasync function assignABTest() { const nativeVersion = await getNativeVersion()
if (nativeVersion.startsWith('2.')) { // Only A/B test on v2 users const variant = Math.random() < 0.5 ? 'v2-test-a' : 'v2-test-b' await CapacitorUpdater.setChannel({ channel: variant }) }}Capgo propose plusieurs stratégies pour la livraison d'actualisations spécifiques à la version :
- Routage basé sur le canal: Séparation automatique des versions via
defaultChannel - : Empêcher les actualisations entre les frontières de version majeure/minor/patchContraintes de version natives
- Contraintes de version natives: Exigez une version native minimale pour les lots
- Prévention de la Dégradation Automatique: N'envoyez jamais des lots plus anciens vers des versions natives plus récentes
- Paramètres de Dispositif: Contrôle manuel pour les tests et la ciblage
En combinant ces stratégies, vous pouvez atteindre le style d'actualisation automatique d'AppFlow avec encore plus de flexibilité et de contrôle. Choisissez l'approche qui convient le mieux à la versionnage et au flux de déploiement de votre application.
Pour plus de détails sur les fonctionnalités spécifiques :
- Guide des Changements Importants - Stratégie de versionnement du canal détaillée
- Gestion des Canaux - Référence complète de la configuration du canal
- Comportement d'Actualisation Delais et conditions de version native