Passer à la navigation

Version Ciblée

Ce guide explique comment livrer automatiquement la dernière version compatible du bundle aux utilisateurs en fonction de leur version d'application native, de même que l'approche d'Ionic AppFlow. Cela 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:

  • Livrer automatiquement des mises à jour compatibles aux utilisateurs en fonction de leur version d'application native
  • Prévenir les modifications de rupture de ne pas atteindre les versions d'application incompatibles
  • Gérer plusieurs versions d'application sans logique complexe simultanément
  • Déployer des mises à jour sans heurt aux segments d'utilisateurs spécifiques

Pourquoi la ciblage de version est important (Surtout pour les utilisateurs d'AppFlow)

Section intitulée “Pourquoi le ciblage de version est important (Surtout pour les utilisateurs d'AppFlow)”

Si vous êtes familiarisé avec Ionic AppFlow, vous savez combien il est crucial de s'assurer que les utilisateurs reçoivent uniquement des mises à jour compatibles. AppFlow a automatiquement associé les lots de mise à jour en direct aux versions natives d'application, empêchant ainsi que du 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 en parallèle de la gestion de tableau de bord

Cette 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é inverse tout en mettant en œuvre des changements de rupture
  • Vous voulez empêcher les nouvelles ensembles de casser les code natives plus anciennes
  • Vous êtes en train de migrer les utilisateurs progressivement d'une version à l'autre
  • Vous êtes en train de migrer de AppFlow et souhaite 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: Empêcher les lots de livraisons à des versions natives incompatibles
  2. Affiliation par canal: Diriger différentes versions d'applications vers différents canaux de mise à jour
  3. Contrôles de version sémantique: Bloquer automatiquement les mises à jour à travers les limites majeures/minores/patch
  4. Survol de niveau de dispositif: Cibler 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 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 »

Ceci est la méthode 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.

  • App v1.x (100 000 utilisateurs) → production chaîne
  • App v2.x (50 000 utilisateurs avec des modifications de rupture) → v2 chaîne
  • App v3.x (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 des ensembles spécifiques à la version

Section intitulée « Étape 3 : Télécharger des ensembles 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
  • Zero code changes - La mise en route du canal se fait automatiquement
  • Une séparation claire - Chaque version a son propre pipeline d'actualisation
  • Une cible flexible - Envoyer des mises à jour vers des groupes de versions spécifiques
  • Un déploiement sécurisé - Les modifications 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 »

Utilisez les contrôles de versionnement sémantique intégrés de Capgo pour empêcher les mises à jour à travers les limites de version. Empêcher les Mises à Jour Automatiques Entre Versions Majeures

Section intitulée « Empêcher les Mises à Jour Automatiques Entre Versions Majeures »

Fenêtre de terminal
Copier dans le presse-papier
# Create a channel that blocks major version updates
npx @capgo/cli channel create stable --disable-auto-update major

Les utilisateurs sur la version de l'application

  • recevront des mises à jour jusqu'à 1.2.3 will receive updates up to 1.9.9
  • Les utilisateurs recevront NE PAS la version 2.0.0 automatiquement
  • Empêche les modifications de version qui cassent de parvenir aux versions natives plus anciennes code
  • La comparaison utilise la ligne de base native envoyée sous la forme 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 une version minimale de l'application native (min_update_version) sur chaque ensemble pour que Capgo ne le livre qu'aux appareils dont le code binaire natif est suffisamment récent.

Cela utilise la stratégie de métadonnées du canal ( ) plus les métadonnées--disable-auto-update metadatametadata --min-update-version ou --auto-min-update-version __CAPGO_KEEP_0__ --native-version CLI flag.

Activer la ciblage de métadonnées sur le canal

Fenêtre de terminal
Copier dans le presse-papier
# one-time: require min_update_version metadata on uploads to this channel
npx @capgo/cli@latest channel set production --disable-auto-update metadata

Section intitulée « Fixer une version native minimale lors de l'upload »

Lors de l'upload d'un bundle, passez la version native la plus basse qui peut le recevoir :

Fenêtre de terminal

Copier dans le presse-papier
# This bundle requires native version 2.0.0 or higher
npx @capgo/cli@latest bundle upload \
--channel production \
--min-update-version "2.0.0"

Ou laissez Capgo définir le seuil en fonction de la compatibilité du package native :

Onglet de terminal
npx @capgo/cli@latest bundle upload \
--channel production \
--auto-min-update-version
  1. Nouveau plugin natif requis

    Fenêtre de terminal
    # Bundle needs Camera plugin added in v2.0.0
    npx @capgo/cli@latest bundle upload \
    --channel production \
    --min-update-version "2.0.0"
  2. Changements natifs API critiques

    Fenêtre de terminal
    # Bundle uses new Capacitor 6 APIs
    npx @capgo/cli@latest bundle upload \
    --channel production \
    --min-update-version "3.0.0"
  3. Migration progressive

    Fenêtre de terminal
    # one-time: enable metadata gating on beta
    npx @capgo/cli@latest channel set beta --disable-auto-update metadata
    # Test bundle only on latest native version
    npx @capgo/cli@latest bundle upload \
    --channel beta \
    --min-update-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 »

Prévenir les utilisateurs de recevoir des ensembles plus anciens que leur version native actuelle.

Dans le tableau de bord Capgo :

  1. Allez à Canaux context : Nom du canal de mise à jour de Capgo. Page/zone : Page de marketing des solutions de Capgo. Rôle : Étiquette de navigation ou élément de navigation court. Vu dans : page solutions/white-label.astro. Clé de message `solutions_white_label_visual_cell2_value` (Valeur de cellule visuelle de Solutions White Label).
  2. → Sélectionnez votre canal Activer
  3. « Désactiver la mise à niveau automatique sous native »

Or via CLI:

Ou via __CAPGO_KEEP_0__ :
npx @capgo/cli@latest channel set production --no-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 inférieure)

Cela est utile dans les cas suivants :

  • 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

Surpasser la mise en file d'attente 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 Configurer le canal ou Configurer la version
  3. Ouvrir avec une version spécifique du canal ou du bundle
  4. Le dispositif recevra des mises à jour de la source surchargée

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

Fenêtre de terminal
# Create production channel, then enable metadata min-version gating
npx @capgo/cli@latest channel add production
npx @capgo/cli@latest channel set production \
--disable-auto-update metadata \
--no-downgrade
capacitor.config.ts
const config: CapacitorConfig = {
plugins: {
CapacitorUpdater: {
autoUpdate: 'atBackground',
defaultChannel: 'production',
}
}
};

2. Modification de rupture de version (Application v2.0.0)

Section intitulée « 2. Modification de rupture de version (Application v2.0.0) »
Fenêtre de terminal
# Create v2 channel for new version
npx @capgo/cli@latest channel add v2
npx @capgo/cli@latest channel set v2 \
--disable-auto-update metadata \
--no-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@latest bundle upload \
--channel production \
--min-update-version "1.0.0"
# Update v2.x users (new feature)
git checkout main
# Make changes
npx @capgo/cli@latest bundle upload \
--channel v2 \
--min-update-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 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 canaux, Capgo utilise l'ordre de priorité suivant :

  1. Surcharge de dispositif (Tableau de bord ou API) - Priorité la plus élevée et visible dans l'interface de surcharge de dispositif
  2. Canal de plugin local via setChannel() - Stocké uniquement sur le dispositif et non affiché dans l'interface de surcharge de dispositif
  3. defaultChannel dans capacitor.config.ts
  4. Canal par défaut (Paramètres 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
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
# one-time: create beta and enable metadata gating
# (production is set up in the complete workflow above)
npx @capgo/cli@latest channel add beta
npx @capgo/cli@latest channel set beta --disable-auto-update metadata
# Test on beta channel first
npx @capgo/cli@latest bundle upload \
--channel beta \
--auto-min-update-version
# Monitor for issues, then promote to production
npx @capgo/cli@latest bundle upload \
--channel production \
--auto-min-update-version

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éciation des anciens canaux ?

Pour les équipes en train de migrer depuis Ionic AppFlow, voici comment Capgo cible les versions :

CaractéristiqueIonic AppFlowCapgo
Versionnement basé sur la versionVersionnement automatique en fonction de la version nativeVersionnement automatique via defaultChannel + plusieurs stratégies
Gestion de version semantiqueSupport de baseAvancé avec --disable-auto-update (majeur/minor/patch)
Contraintes de version nativesConfiguration manuelle dans le tableau de bord d'AppFlowIntégré --min-update-version / --auto-min-update-version avec des canaux de métadonnées
Gestion de canauxInterface 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 descente automatiqueOuiOui via --no-downgrade
Maintenance multi-versionGestion de branche/chânnel manuelleAutomatisé avec priorité de chânnel
Hébergement autoNonOui (contrôle total)
Analytiques de versionBasiqueInformations détaillées par version

Utilisateurs qui ne reçoivent pas les mises à jour

Section intitulée « Utilisateurs qui ne reçoivent pas les mises à jour »

Vérifiez les éléments suivants :

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

    Copier dans le presse-papiers
    npx @capgo/cli channel list
  4. : Vérifiez si le dispositif a une surcharge manuelleTableau de bord → Dispositifs → Recherchez le dispositif → Vérifiez la chaîne/version

    • Le bundle a été livré à la mauvaise version

Section intitulée « Le bundle a été livré à la mauvaise version »

Dashboard → Bundles → Check “Native Version” column
  1. Réviser le canal par défaut: Assurez-vous que le canal est correct capacitor.config.ts
  2. Vérifier l'envoi de la mise à jour: Vérifiez que la mise à jour a été envoyée au canal prévu
  3. Inspecter la version minimale de mise à jour: Confirmez --min-update-version (ou --auto-min-update-version) a été défini et le canal utilise --disable-auto-update metadata

Changements de rupture affectant les anciennes versions

Section intitulée « Changements de rupture affectant les anciennes versions »
  1. Solution immédiate: Survoler les appareils affectés vers la mise à jour sécurisée
    • Tableau de bord → Appareils → Sélection multiple → Définir la version
  2. Réparation à long terme: Créer des canaux versionnés et maintenir des branches séparées
  3. Prévention: Tester toujours les mises à jour sur des appareils représentatifs avant le lancement

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

Concept AppFlowCapgo EquivalentNotes
Canal de déploiementCapgo CanalMême concept, plus puissant
Verrouillage de version native--min-update-version / --auto-min-update-versionPlus de contrôle granulaire
Priorité du canalPrééminence du canal (surcharge → cloud → par défaut)Prééminence plus transparente
Cible de déploiementContrôle de canal + semverPlusieurs stratégies disponibles
Canal de productionproduction canal (ou tout nom)Nom 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
  1. Plus de Contrôle: Capgo vous offre plusieurs stratégies (canaux, semver, version native) qui peuvent être combinées
  2. Une Visibilité Améliorée: Le tableau de bord montre la distribution des versions et les problèmes de compatibilité
  3. API Accès: Un contrôle programmatique complet sur la ciblage de version
  4. Auto-Hébergement: Option de lancer votre propre serveur d'actualisation avec la même logique de version
  1. Cartographiez vos canaux AppFlow vers les Capgo canaux (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 --min-update-version (le canal doit utiliser la stratégie de métadonnées)
  5. Surveiller la distribution des versions dans le Capgo tableau de bord
// 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 aux versions :

  1. Routage basé sur le canal: Séparation automatique de la version via defaultChannel
  2. Numérotation Sémantique: Empêcher les mises à jour en traversant les limites de version majeure/minor/patch
  3. Contraintes de version native: Exiger une version native minimale pour les ensembles
  4. Prévention de la dégradation automatique: Ne jamais livrer de vieilles versions à de nouvelles versions natives
  5. Survol de Dispositif: Contrôle manuel pour les tests et la ciblage

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 à l'écoulement de version et de déploiement de votre application.

Pour plus de détails sur les fonctionnalités spécifiques :

Si vous utilisez La ciblage de version connectez-l’avec Les canaux pour les détails d'implémentation dans Les canaux, Les canaux pour les détails d'implémentation dans Les canaux, Les canaux pour les détails d'implémentation dans Les canaux, La solution de test bêta pour le flux de travail du produit dans La solution de test bêta, et Solution de ciblage de version pour le flux de travail du produit dans la Solution de ciblage de version.