Ciblage de version
Copier un prompt de configuration avec les étapes d'installation et la guide markdown complet pour ce plugin.
Cette guide explique comment livrer automatiquement la dernière version compatible du bundle aux utilisateurs en fonction de leur version d'application native, de manière similaire à l'approche d'Ionic AppFlowCela garantit une gestion simplifiée des mises à jour et des déploiements rapides tout en évitant les problèmes de compatibilité.
Vue d'ensemble
Section intitulée « Vue d'ensemble »Le système de ciblage de version de Capgo vous permet de :
- Fournir automatiquement des mises à jour compatibles aux utilisateurs en fonction de leur version d'applications natives
- Empêcher les modifications de rupture de parvenir aux versions d'applications incompatibles
- Gérer plusieurs versions d'applications simultanément sans logique complexe
- Roulez sans heurts les mises à jour vers des segments d'utilisateurs spécifiques
Pourquoi la ciblage de version est important (Surtout pour les utilisateurs d'AppFlow)
Section intitulée “Pourquoi la ciblage de version est important (Surtout pour les utilisateurs d'AppFlow)”Si vous êtes familiarisé avec Ionic AppFlow, vous savez à quel point il est crucial de vous assurer que les utilisateurs reçoivent uniquement des mises à jour compatibles. AppFlow a automatiquement associé des lots de mise à jour en direct à des versions natives d'applications, empêchant ainsi du JavaScript incompatibles d'être livrés à des versions natives code plus anciennes.
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 and CLI control alongside dashboard management
Cet approche est particulièrement utile lorsque :
- Vous avez des utilisateurs sur différentes versions majeures de votre application (par exemple, v1.x, v2.x, v3.x)
- Vous avez besoin de maintenir la compatibilité inverseur tout en mettant en œuvre des changements de rupture
- Vous voulez empêcher les nouvelles archives de casser les code natifs plus anciens
- Vous êtes en train de migrer les utilisateurs progressivement d'une version à l'autre
- Vous êtes en train de migrer de AppFlow et voulez maintenir la même sécurité de mise à jour
Comment ça marche
Section intitulée « Comment ça marche »Capgo utilise une approche multi-niveaux pour correspondre les utilisateurs avec des mises à jour compatibles :
- Contraintes de version native: Prévenir les bundles d'être livrés à des versions natives incompatibles
- Routage basé sur le canal: Routez différentes versions d'applications vers différents canaux de mise à jour
- Contrôles de versionnement semantique: Bloquez automatiquement les mises à jour à travers les limites de version majeure/minor/patch
- Survol de niveau de dispositif: Ciblez 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 local plugin channel} D -->|setChannel value| E[Use local setChannel channel] D -->|No local channel| F{Check defaultChannel in App} F -->|Has defaultChannel| G[Use App's defaultChannel] F -->|No defaultChannel| H[Use Cloud Default Channel] C --> I{Check Version Constraints} E --> I G --> I H --> I I -->|Compatible| J[Deliver Update] I -->|Incompatible| K[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”Cette est l'approche recommandée pour gérer les changements majeurs et les mises à jour de version majeure. C'est similaire au modèle de livraison d'AppFlow. Exemple de scénario
Section intitulée “Exemple de scénario”
App v1.x- (100 000 utilisateurs) → canal
productionApp v2.x - (50 000 utilisateurs avec des changements de version majeure) → canal
v2App v3.x - (100 000 utilisateurs avec des changements de version majeure) → (10 000 utilisateurs bêta) →
v3chaîne
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: 'atBackground', 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: 'atBackground', 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: 'atBackground', 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 les Bundles Spécifiques à la Version
Section intitulée “Étape 3 : Télécharger les 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”- Zéro code modifications - La mise en route des canaux se fait automatiquement
- Une séparation claire - Chaque version a son propre pipeline d'actualisation
- Une cible flexible - Envoyez des mises à jour vers des groupes de versions spécifiques
- Un lancement sûr - Les changements de rupture ne parviennent jamais aux versions incompatibles
Stratégie 2 : Contrôles de versionnement sémantique
Section intitulée “Stratégie 2 : Contrôles de versionnement sémantique”Use Capgo’s built-in intégrés à __CAPGO_KEEP_0__ pour empêcher les mises à jour à travers les limites de version. Utilisez les contrôles de versionnement sémantique intégrés à __CAPGO_KEEP_0__ pour empêcher les mises à jour à travers les limites de version.
Désactiver la mise à jour automatique entre les versions majeures
Titre de la section « Désactiver la mise à jour automatique entre les versions majeures »# 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 de parvenir aux anciens code natives
- La comparaison utilise la ligne de base native envoyée comme
version_build
Options de contrôle granulaire
Section intitulée « Options de contrôle granulaire »# Block target bundles outside the native major.minor line (1.2.x won't get 1.3.0)npx @capgo/cli channel set stable --disable-auto-update minor
# Block target bundles outside the exact native MAJOR.MINOR.PATCH core (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 minimales de version native 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'upload 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 importants
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 dégradation automatique
Section intitulée “Stratégie 4 : Prévention de la dégradation automatique”Empêcher les utilisateurs de recevoir des bundles plus anciens que leur version native actuelle.
Activer dans les paramètres de la chaîne
Section intitulée « Activer dans les paramètres de la chaîne »Dans le tableau de bord Capgo :
- Allez à Chaînes → Sélectionnez votre chaîne
- Activer « Désactiver la mise à niveau automatique native »
- Enregistrer 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 vers une version antérieure)
Cela est utile lorsque :
- Les utilisateurs ont manuellement installé une version plus récente depuis l'App Store
- Vous avez besoin de vous assurer que les utilisateurs disposent toujours des dernières mises à jour de sécurité
- Vous souhaitez prévenir les bugs de régression
Stratégie 5 : Ciblage au niveau de l'appareil
Section intitulée « Stratégie 5 : Ciblage au niveau de l'appareil »Surcharger l'affectation 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 Fixer la version
- Remplacez par une version spécifique de canal ou de paquet
- L'appareil recevra des mises à jour de la source remplacée
Flux de travail complet AppFlow-Style
Sous-section intitulée “Flux de travail complet AppFlow-Style”Voici un exemple complet combinant toutes les stratégies :
1. Initialisation (App v1.0.0)
Sous-section intitulée “Initialisation (App 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: 'atBackground', defaultChannel: 'production', } }};2. Modification de rupture (App v2.0.0)
Section intitulée “2. Modification de rupture (App 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: 'atBackground', defaultChannel: 'v2', // New users get v2 channel } }};3. Envoyer des mises à jour vers les deux versions
Section intitulée “3. Envoyer des mises à jour vers 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. Surveillance de la distribution de versions
Section intitulée « 4. Surveillance de la distribution de versions »Utilisez le tableau de bord Capgo pour suivre :
- Combien d'utilisateurs sont sur v1 par rapport à v2
- Taux d'adoption de 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 l'utilisation de v1 chute 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)Ordre de Préférence de Canal
Titre de la section « Ordre de Préférence de Canal »Lorsqu'il existe plusieurs configurations de canal, Capgo utilise cet ordre de préférence :
- Surcharge de Dispositif (Tableau de bord ou API) - Priorité la plus élevée et visible dans l'interface de Surcharge de Dispositif
- Canal de plugin local via
setChannel()- Stocké uniquement sur le dispositif et non affiché dans l'interface de Surcharge de Dispositif - canalParDéfaut dans capacitor.config.ts
- Canal Par Défaut (Réglage Cloud) - Priorité la plus basse
Meilleures Pratiques
Section intitulée « Meilleures 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. Utiliser la versionnement semantique
Section intitulée « 2. Utiliser la versionnement semantique »# ✅ Good1.0.0 → 1.0.1 → 1.1.0 → 2.0.0
# ❌ Bad1.0 → 1.1 → 2 → 2.53. Maintenir des branches séparées
Section intitulée « 3. Maintenir des branches séparées »# ✅ Good: Separate branches per major versionmain (v3.x)v2-maintenance (v2.x)v1-maintenance (v1.x)
# ❌ Bad: Single branch for all versions4. Tester avant le lancement
Section intitulée « 4. Tester avant le lancement »# Test on beta channel firstnpx @capgo/cli bundle upload --channel beta
# Monitor for issues, then promote to productionnpx @capgo/cli bundle upload --channel production5. Suivre la distribution des versions
Section intitulée « 5. Suivre la distribution des 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 depuis Ionic AppFlow, voici comment Capgo cible les versions :
| Fonctionnalité | Ionic AppFlow | Capgo |
|---|---|---|
| Routage basé sur la version | Automatique en fonction de la version native | Automatique via defaultChannel + plusieurs stratégies |
| Versionnement semantique | Support de base | Avancé avec --disable-auto-update (major/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 | UI Web + CLI | UI Web + CLI + API |
| Surcharge de dispositif | Contrôle limité au niveau du dispositif | Contrôle total via Dashboard/API |
| Prévention de la descente automatique | Oui | Oui via --disable-downgrade |
| Maintenance multi-version | Gestion de branchement/chânel manuelle | Automatisé avec priorité de chânel |
| Hébergement auto | Non | Oui (contrôle total) |
| Analytique de version | Basique | Métriques détaillées par version |
Sous-titre : « Résolution des problèmes »
Les utilisateurs ne reçoivent pas les mises à jourSous-titre : « Les utilisateurs ne reçoivent pas les mises à jour »
Vérifiez les éléments suivants :Affectation du canal
-
: Vérifiez que le dispositif est sur le bon canalCopier dans le presse-papier
const channel = await CapacitorUpdater.getChannel()console.log('Current channel:', channel) -
: Vérifiez si le bundle a des exigences de version nativesCopy to clipboard
- Tableau de bord → Paquets → Vérifiez la colonne « Version native »
-
Paramètres Semver: Vérifiez le canal de «
disable-auto-updateparamètreFenêtre de terminal npx @capgo/cli channel list -
Désactivation de l'appareil: Vérifiez si l'appareil a une désactivation manuelle
- Tableau de bord → Appareils → Recherchez l'appareil → Vérifiez le canal/la version
Paquet livré à la mauvaise version
Section intitulée « Paquet livré à la mauvaise version »- Examen de la valeur par défaut de la chaîne de canal: Assurez-vous que le canal est correct
capacitor.config.ts - Vérifiez l'envoi du bundle: Vérifiez si le bundle a été envoyé vers le canal prévu
- Inspectez la version native: Confirmez
--native-versionl'indicateur a été utilisé correctement
Changements de rupture affectant les anciennes versions
Section intitulée “Changements de rupture affectant les anciennes versions”- Solution immédiate: Forcez les appareils affectés à utiliser le bundle sécurisé
- Tableau de bord → Appareils → Sélection multiple → Définir la version
- Solution à long terme: Cré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
Mise à niveau depuis Ionic AppFlow
Section intitulée “Mise à niveau depuis Ionic AppFlow”Si vous migrez depuis AppFlow Ionic, la cible de version fonctionne de manière très similaire à Capgo, avec une flexibilité améliorée :
Cartographie de concepts
Section intitulée “Cartographie de concepts”| Concept AppFlow | Capgo Équivalent | Notes |
|---|---|---|
| Chaîne de déploiement | Capgo Chaîne | Même concept, plus puissant |
| Version Native Bloquée | --native-version flag | Plus de contrôle granulaire |
| Priorité de la chaîne | Prééminence de la chaîne (surcharge → cloud → par défaut) | Prééminence plus transparente |
| Cible de déploiement | Chaîne + contrôle semver] | Plusieurs stratégies disponibles |
| Canal de production | production Nom du canal (ou n'importe quel nom) | Nom flexible |
| Déploiement basé sur Git | CLI téléchargement du bundle depuis la branche | Même flux de travail |
| Compatibilité automatique de version | defaultChannel Contraintes de version + | Amélioré avec plusieurs stratégies |
Differences clés pour les utilisateurs d'AppFlow
Section intitulée “Differences 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 répartition des versions et les problèmes de compatibilité
- API Access: Contrôle programmé complet sur la cible de version
- Auto-Hébergement: Option pour exécuter votre propre serveur d'actualisation avec la même logique de version
Étapes de Migration
Section intitulée “Étapes de Migration”- Cartographiez vos canaux AppFlow vers les canaux Capgo (généralement 1:1)
- Définir
defaultChanneldanscapacitor.config.tspour chaque version majeure - Configurer les règles de semver si vous souhaitez un blocage automatique aux limites de version
- Télécharger des bundles spécifiques à la version en utilisant
--native-versionflag - Surveiller 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 entre versions
Section intitulée “Test A/B entre 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 fournit plusieurs stratégies pour la livraison d'actualisations spécifiques à la version :
- Channel-Based Routing : Séparation automatique de la version via
defaultChannel - Semantic Versioning : Empêcher les mises à jour à travers les limites de version majeure/minor/patch
- Native Version Constraints : Exiger une version native minimale pour les ensembles
- Auto-Downgrade Prevention : Jamais livrer des ensembles plus anciens à des versions natives plus récentes
- Paramètres de dispositif: Contrôle manuel pour la mise en œuvre et la cible
En combinant ces stratégies, vous pouvez atteindre une mise à jour automatique de style AppFlow avec encore plus de flexibilité et de contrôle. Choisissez l'approche qui convient le mieux à votre flux de travail de versionnement et de déploiement d'application.
Pour plus de détails sur les fonctionnalités spécifiques :
- Guide des changements majeurs - Stratégie de versionnement détaillée des canaux
- Gestion des canaux - Référence complète de la configuration des canaux
- Comportement de mise à jour - Retards et conditions de version native
Continuez de la ciblage de version
Section intitulée “Continuez de la ciblage de version”If vous utilisez Planification de version pour planifier la routage de canal et la mise en production étalée, connectez-le avec Canaux pour les détails d'implémentation dans Canaux, Canaux pour les détails d'implémentation dans Canaux, Canaux pour les détails d'implémentation dans Canaux, Solution de test bêta pour le flux de travail du produit dans Solution de test bêta, et Solution de planification de version pour le flux de produit dans la Solution de ciblage de version.