Passer à la navigation

Ciblage de Version

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

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

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

  1. Contraintes de version native: Empêcher les bundles de être livrés aux versions natives incompatibles
  2. Routage basé sur le canalRoutez différentes versions de l'application vers différents canaux de mise à jour
  3. Contrôle de la version sémantiqueAutomatiquement bloquer les mises à jour sur les limites majeures/minores/patch
  4. Survolage du niveau appareilCiblez des appareils ou des groupes d'utilisateurs spécifiques
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.

  • App v1.x (100 000 utilisateurs) → production canal
  • App v2.x (50 000 utilisateurs avec des changements de rupture) → v2 canal
  • App v3.x (10 000 utilisateurs bêta) → v3 canal

É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: true,
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: true,
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: true,
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 des ensembles de version spécifique

Section intitulée « Étape 3 : Chargement de 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 - 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

Use Capgo’s built-in semantic versioning controls to prevent updates across version boundaries.

Fenêtre de terminal

Copier dans le presse-papier
Section titled “Désactiver l'actualisation automatique entre les versions majeures”
# 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 PAS la version 2.0.0 automatiquement
  • Empêche les modifications de rupture d'atteindre les versions natives plus anciennes code
Fenêtre de terminal
# 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 updates
npx @capgo/cli channel set stable --disable-auto-update none

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 :

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. Changements natifs API brisants

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

  1. Canaux → Sélectionnez votre canal Activer
  2. Activer dans les paramètres de canal Désactiver la mise à niveau automatique sous native
  3. Sauvegarder 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 aient toujours les dernières mises à jour de sécurité
  • Vous souhaitez prévenir les bogues de régression

Surcharger la mise à jour 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' })
}
}

Dans le tableau de bord Capgo :

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

Voici un exemple complet combinant 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: 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) »
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: true,
defaultChannel: 'v2', // New users get v2 channel
}
}
};
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 vs v2
  • Taux d'adoption des bundles par version
  • Erreurs ou plantages par version

Une fois que 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 canal, Capgo utilise l'ordre de priorité suivant :

  1. Surcharge de l'appareil (Tableau de bord ou API) - Priorité la plus élevée
  2. Surcharge de Cloud via setChannel() appeler
  3. canal par défaut par défaut dans capacitor.config.ts
  4. Canal par Défaut (Réglage Cloud) - Priorité la plus basse

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 manually

2. Utilisez la Versionnement Sémantique

Fenêtre de terminal
Copier dans le presse-papier
# ✅ 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

Copier dans le presse-papier
3. Maintenez des Branches Séparées
# ✅ 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 AppFlowVoici comment la version ciblée de Capgo se compare :

FonctionnalitéIonic AppFlowCapgo
Routage basé sur la versionBasé sur la version nativeVia automatique defaultChannel + plusieurs stratégies
Numérotation sémantiqueSupporte de baseAvancé avec --disable-auto-update (majeur/minor/patch)
Contraintes de version nativeConfiguration manuelle dans le tableau de bord d'AppFlowIntégré --native-version drapeau dans CLI
Gestion de la chaîneInterface Web + CLIInterface Web + CLI + API
Surcharge de dispositifContrôle limité au niveau du dispositifContrôle total via Tableau de bord/API
Prévention de la désactivation automatiqueOuiOui via --disable-downgrade
Maintenance de plusieurs versionsGestion de branches/channels manuelleAutomatisé avec priorité de canal
Hébergement auto-hôteNonOui (contrôle total)
Analytique de versionBasiqueDétails de métriques 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 canal correct

    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 → Bundles → Vérifiez la colonne « Version native »
  3. Paramètres Semver: Vérifiez les paramètres du canal « disable-auto-update fenêtre de terminal

    Copier dans le presse-papier
    npx @capgo/cli channel list
  4. : 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
  1. Réviser defaultChannel : Assurer que le canal est correct capacitor.config.ts
  2. Vérifier l'upload du bundle : Vérifier que le bundle a été uploadé sur le canal prévu
  3. Inspecter la version native : Confirmer que --native-version la bannière a été utilisée correctement

Changements de rupture affectant les anciennes versions

Section intitulée « Changements de rupture affectant les anciennes versions »
  1. 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
  2. Solution durableCré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

Migration depuis Ionic AppFlow

Mise à niveau de Ionic AppFlow

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

AppFlow ConceptCapgo ÉquivalentNotes
Canal de déploiementCapgo CanalMême concept, plus puissant
Verrouillage de version native--native-version flagPlus de contrôle granulaire
Priorité du canalPréférence de canal (surcharge → cloud → par défaut)Préférence plus transparente
Cible de déploiementContrôle de la version par Channel + semverPlusieurs stratégies disponibles
Channel de productionproduction Nom de canal (ou n'importe quel nom)Nommage flexible
Déploiement basé sur GitCLI téléchargement de bundle à partir de branchMême flux de travail
Compatibilité automatique de versiondefaultChannel + contraintes de versionAmé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. Une meilleure visibilité: Le tableau de bord montre la distribution des versions et les problèmes de compatibilité
  3. API Accès: Contrôle programmatique complet sur la cible de version
  4. Hébergement auto: Option de lancer votre propre serveur d'actualisation avec la même logique de version

Étapes de migration

Étape de migration
  1. Cartographiez vos canaux AppFlow à Capgo canaux (généralement 1:1)
  2. Définissez defaultChannel dans capacitor.config.ts pour chaque version majeure
  3. Configurez les règles de semver si vous souhaitez un blocage automatique aux limites de version
  4. Charger des bundles spécifiques à la version en utilisant --native-version flag
  5. Surveillez 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 propose plusieurs stratégies pour la livraison d'actualisations spécifiques à la version :

  1. Routage basé sur le canal: Séparation automatique des versions via defaultChannel
  2. : Empêcher les actualisations entre les frontières de version majeure/minor/patchContraintes de version natives
  3. Contraintes de version natives: Exigez une version native minimale pour les lots
  4. Prévention de la Dégradation Automatique: N'envoyez jamais des lots plus anciens vers des versions natives plus récentes
  5. 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 :