Passer à la navigation

Ciblage de version

Cette guide explique comment livrer automatiquement la dernière version compatible de l'ensemble 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é.

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'appareil native
  • Prévenir les modifications de rupture qui atteignent les versions d'appareil incompatibles
  • Gérer plusieurs versions d'applications simultanément sans logique complexe
  • Déployez des mises à jour sans heurt à 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 devez 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

Capgo utilise une approche multi-niveaux pour correspondre les utilisateurs avec des mises à jour compatibles :

  1. Contraintes de version native: Prévenir les bundles d'être livrés à des versions natives incompatibles
  2. Channel-Based Routing: Routage basé sur les canaux pour différentes versions d'applications
  3. Semantic Versioning Controls: Contrôles de versionnement sémantique pour bloquer automatiquement les mises à jour
  4. Device-Level Overrides: Surcharge de version spécifique pour des appareils ou des groupes d'utilisateurs
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 les canaux

Flux de correspondance de version

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 production App v2.x
  • (50 000 utilisateurs avec des changements de version majeure) → canal v2 App v3.x
  • (50 000 utilisateurs avec des changements de version majeure) → (10 000 utilisateurs bêta) → v3 chaîne

É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 builds
import { 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 builds
const 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 builds
const config: CapacitorConfig = {
appId: 'com.example.app',
appName: 'Example App',
plugins: {
CapacitorUpdater: {
autoUpdate: 'atBackground',
defaultChannel: 'v3', // Routes v3 users automatically
}
}
};
Fenêtre de terminal
# Create channels for each major version
npx @capgo/cli channel create production
npx @capgo/cli channel create v2
npx @capgo/cli channel create v3
# Enable self-assignment so apps can switch channels
npx @capgo/cli channel set production --self-assign
npx @capgo/cli channel set v2 --self-assign
npx @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”
Fenêtre de terminal
# For v1.x users (from v1-maintenance branch)
git checkout v1-maintenance
npm run build
npx @capgo/cli bundle upload --channel production
# For v2.x users (from v2-maintenance or main branch)
git checkout main
npm run build
npx @capgo/cli bundle upload --channel v2
# For v3.x users (from beta/v3 branch)
git checkout beta
npm run build
npx @capgo/cli bundle upload --channel v3
  • Aucune modification code - La mise en route de 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 changements de rupture ne parviennent jamais aux versions incompatibles

Use Capgo’s built-in 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. 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.

Desactiver la mise à jour automatique entre les versions majeures

Titre de la section « Desactiver la mise à jour automatique entre les versions majeures »
Fenêtre de terminal
# Create a channel that blocks major version updates
npx @capgo/cli channel create stable --disable-auto-update major

Cette configuration signifie :

  • Les utilisateurs de la version de l'application 1.2.3 recevront des mises à jour jusqu'à 1.9.9
  • Les utilisateurs recevront NE PAS recevoir la version 2.0.0 automatiquement
  • Empêche les modifications de rupture de parvenir aux anciens natives code
  • La comparaison utilise la référence de base native envoyée comme version_build
Fenêtre de terminal
# 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 updates
npx @capgo/cli channel set stable --disable-auto-update none

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 :

Fenêtre de terminal
# This bundle requires native version 2.0.0 or higher
npx @capgo/cli bundle upload \
--channel production \
--native-version "2.0.0"
  1. Nouveau plugin natif requis

    Fenêtre de terminal
    # Bundle needs Camera plugin added in v2.0.0
    npx @capgo/cli bundle upload --native-version "2.0.0"
  2. Mise à jour native API

    Fenêtre de terminal
    # Bundle uses new Capacitor 6 APIs
    npx @capgo/cli bundle upload --native-version "3.0.0"
  3. Migration progressive

    Fenêtre de terminal
    # Test bundle only on latest native version
    npx @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.

Dans le tableau de bord Capgo :

  1. Allez à Canaux → Sélectionnez votre canal
  2. Activer « Désactiver la mise à niveau automatique native »
  3. Enregistrer les modifications

Ou via CLI :

Fenêtre de terminal
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 disposent toujours des dernières mises à jour de sécurité
  • Vous souhaitez prévenir les bugs de régression

Surcharger l'affectation de canal pour des appareils ou des groupes d'utilisateurs spécifiques.

import { CapacitorUpdater } from '@capgo/capacitor-updater'
// Force beta testers to use v3 channel
async 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 sur le tableau de bord

Section intitulée “Ouverture de session de l'appareil sur le tableau de bord”

Dans le tableau de bord Capgo :

  1. Allez à Appareils → Trouvez l'appareil
  2. Cliquez Définir le canal ou Fixer la version
  3. Remplacez par une version spécifique du canal ou du paquet
  4. L'appareil recevra des mises à jour de la source remplacée

Voici un exemple complet qui combine toutes les stratégies :

Fenêtre de terminal
# Create production channel with semver controls
npx @capgo/cli channel create production \
--disable-auto-update major \
--disable-downgrade
capacitor.config.ts
const config: CapacitorConfig = {
plugins: {
CapacitorUpdater: {
autoUpdate: 'atBackground',
defaultChannel: 'production',
}
}
};
Fenêtre de terminal
# Create v2 channel for new version
npx @capgo/cli channel create v2 \
--disable-auto-update major \
--disable-downgrade \
--self-assign
# Create git branch for v1 maintenance
git checkout -b v1-maintenance
git push origin v1-maintenance
// capacitor.config.ts for v2.0.0
const 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”
Fenêtre de terminal
# Update v1.x users (bug fix)
git checkout v1-maintenance
# Make changes
npx @capgo/cli bundle upload \
--channel production \
--native-version "1.0.0"
# Update v2.x users (new feature)
git checkout main
# Make changes
npx @capgo/cli bundle upload \
--channel v2 \
--native-version "2.0.0"

Utilisez le tableau de bord Capgo pour suivre :

  • Combien d'utilisateurs sont sur v1 par rapport à v2
  • Taux d'adoption des bundles par version
  • Erreurs ou plantages par version

Une fois l'utilisation de v1 tombe en dessous du seuil :

Fenêtre de terminal
# Stop uploading to production channel
# Optional: Delete v1 maintenance branch
git branch -d v1-maintenance
# Move all remaining users to default
# (They'll need to update via app store)

Lorsqu'il existe plusieurs configurations de canaux, Capgo utilise l'ordre de priorité suivant :

  1. Surcharge de l'appareil (Tableau de bord ou API) - Priorité la plus élevée et visible dans l'interface de surcharge de l'appareil
  2. Canaux de plugin local via setChannel() - Stocké uniquement sur l'appareil et non affiché dans l'interface de surcharge de l'appareil
  3. défautChannel dans capacitor.config.ts
  4. Canaux par défaut (Réglage Cloud) - Priorité la plus basse

à partir de l'application valide le canal avec le serveur de backend, puis le stocke localement sur l'appareil.

Meilleures Pratiques

Section intitulée « Meilleures Pratiques »

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 manually
Fenêtre de terminal
# ✅ Good
1.0.0 1.0.1 1.1.0 2.0.0
# ❌ Bad
1.0 1.1 2 2.5
Fenêtre de terminal
# ✅ Good: Separate branches per major version
main (v3.x)
v2-maintenance (v2.x)
v1-maintenance (v1.x)
# ❌ Bad: Single branch for all versions
Fenêtre de terminal
# Test on beta channel first
npx @capgo/cli bundle upload --channel beta
# Monitor for issues, then promote to production
npx @capgo/cli bundle upload --channel production

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 ?

Pour les équipes en train de migrer de Ionic AppFlowici est comment Capgo cible les versions :

FonctionnalitéIonic AppFlowCapgo
Routage basé sur la versionAutomatique en fonction de la version nativeAutomatique via defaultChannel + plusieurs stratégies
Gestion de version sémantiqueSupport de baseAvancé avec --disable-auto-update (major/minor/patch)
Contraintes de version nativeConfiguration manuelle dans le tableau de bord d'AppFlowIntégré --native-version drapeau dans CLI
Gestion de la chaîneWeb UI + CLIWeb UI + CLI + API
Survol de dispositifsContrôle limité au niveau du dispositifContrôle total via Dashboard/API
Prévention de la dégradation automatiqueOuiOui via --disable-downgrade
Maintenance multi-versionGestion de branchement manuelleAutomatique avec priorité de canal
Hébergement autoNonOui (contrôle total)
Analytique de versionBasiqueMétriques détaillées par version

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 :

  1. Affectation de canal: Vérifiez que le dispositif est sur le bon canal

    const channel = await CapacitorUpdater.getChannel()
    console.log('Current channel:', channel)
  2. Contraintes de version: Vérifiez si le bundle a des exigences de version natives

    • Tableau de bord → Paquets → Vérifiez la colonne « Version native »
  3. Paramètres Semver: Vérifiez le canal de « disable-auto-update paramètre

    Fenêtre de terminal
    npx @capgo/cli channel list
  4. Surcharge de dispositif: Vérifiez si le dispositif a une surcharge manuelle

    • Tableau de bord → Dispositifs → Recherchez le dispositif → Vérifiez le canal/la version
  1. Réviser le canal par défaut: Assurez-vous que le canal est correct capacitor.config.ts
  2. Vérifiez l'envoi du bundle: Vérifiez si le bundle a été envoyé vers le canal prévu
  3. Inspectez la version native: Confirmez --native-version l'indicateur a été utilisé correctement

Changements Importants Affectant les Anciennes Versions

Section intitulée “Changements Importants Affectant les Anciennes Versions”
  1. Solution à court terme: Forcez les appareils affectés à utiliser le bundle sécurisé
    • Tableau de bord → Appareils → Sélection multiple → Définir la version
  2. Solution à long terme: Créez des canaux versionnés et maintenez des branches séparées
  3. Prévention: Testez toujours les mises à jour sur des appareils représentatifs avant le lancement

Si vous migrez depuis AppFlow Ionic, la ciblage de version fonctionne de manière très similaire à Capgo, avec une flexibilité améliorée :

Concept AppFlowCapgo ÉquivalentNotes
Chaîne de déploiementCapgo ChaîneMême concept, plus puissant
Version Native Bloquée--native-version flagPlus de contrôle granulaire
Priorité de la chaînePrééminence de la chaîne (surcharge → cloud → par défaut)Prééminence plus transparente
Cible de déploiementChaîne + contrôle semver]Plusieurs stratégies disponibles
Chaîne de productionproduction chaîne (ou tout nom)Nommage flexible
Déploiement basé sur GitCLI téléchargement du bundle depuis la brancheMême flux de travail
Compatibilité automatique avec les versionsdefaultChannel 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”
  1. Plus de Contrôle: Capgo vous offre plusieurs stratégies (canaux, semver, version native) qui peuvent être combinées
  2. Mieux Voir: Le tableau de bord montre la répartition des versions et les problèmes de compatibilité
  3. API Accès: Contrôle programmation complet sur la cible de version
  4. Hébergement Auto: Option pour exécuter votre propre serveur d'actualisation avec la même logique de version
  1. Cartographiez vos canaux AppFlow vers les canaux Capgo (généralement 1:1)
  2. Définir defaultChannel dans capacitor.config.ts pour chaque version majeure
  3. Configurer les règles de semver si vous souhaitez un blocage automatique aux limites de version
  4. Télécharger des ensembles de versions spécifiques en utilisant --native-version flag
  5. Surveiller la distribution des versions dans le tableau de bord Capgo
// Gradually migrate v1 users to v2
async 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' })
}
}
// Enable features based on native version
async 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()
}
}
// Run A/B tests within same native version
async 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 :

  1. Channel-Based Routing : Séparation automatique de la version via defaultChannel
  2. Semantic Versioning : Empêcher les mises à jour en dehors des limites de version majeure/minor/patch
  3. Native Version Constraints : Exiger une version native minimale pour les ensembles
  4. Auto-Downgrade Prevention : Jamais livrer des ensembles plus anciens aux versions natives plus récentes
  5. Paramètres de dispositif: Contrôle manuel pour le test et la cible

En combinant ces stratégies, vous pouvez atteindre une mise à jour automatique AppFlow-style 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 :

Si vous utilisez Version Ciblée pour planifier la routage de canal et la mise en production étape par étape, 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 Beta pour le flux de travail du produit dans Solution de Test Beta, et Solution de Version Ciblée pour le flux de produit dans la Solution de ciblage de version.