Zum Inhalt springen

Zielversion

Diese Anleitung erklärt, wie man automatisch den neuesten kompatiblen Bundle an Benutzer liefert, basierend auf ihrer native App-Version, ähnlich wie Ionic AppFlow’s Ansatz. Dies stellt eine vereinfachte Update-Verwaltung und schnellere Bereitstellungen sicher, während gleichzeitig Kompatibilitätsprobleme verhindert werden.

Capgo's Versionsziel-System ermöglicht Ihnen:

  • Automatisches Liefern von kompatiblen Updates an Benutzer auf der Grundlage ihrer native App-Version
  • Verhindern von Bruchänderungen von inkompatiblen App-Versionen
  • Mehrere App-Versionen verwalten gleichzeitig ohne komplexes Logik
  • Aktualisierungen ohne Komplikationen bereitstellen spezifischen Benutzergruppen

Warum Version-Zielgruppierung wichtig ist (Besonders für AppFlow-Nutzer)

Abschnitt mit dem Titel “Warum Version-Zielgruppierung wichtig ist (Besonders für AppFlow-Nutzer)”

Wenn Sie mit Ionic AppFlowbekannt sind, wissen Sie, wie wichtig es ist, sicherzustellen, dass Benutzer nur kompatible Updates erhalten. AppFlow matchte automatisch Live-Update-Bundles mit nativen App-Versionen, um inkompatibles JavaScript von älteren nativen code zu verhindern.

Capgo bietet die gleichen Sicherheitsgarantienmit zusätzlichen Funktionen:

  • Mehr granulare Kontrolle über Versionsabgleich
  • Mehrere Strategien (Kanäle, semver, native Einschränkungen)
  • Bessere Sichtbarkeit in die Versionsverteilung
  • API und CLI Kontrolle neben Dashboard-Verwaltung

Diese Vorgehensweise ist insbesondere nützlich, wenn:

  • Sie haben Benutzer auf verschiedenen Hauptversionen Ihrer App (z.B. v1.x, v2.x, v3.x)
  • Sie müssen die rückwärtskompatible Weiterentwicklung aufrechterhalten, während Sie wichtige Änderungen durchführen
  • Sie möchten verhindern, dass neuerere Pakete ältere native code beschädigen
  • Sie migrieren Benutzer allmählich von einer Version zur anderen
  • Sie migrieren von AppFlow und möchten die gleiche Sicherheit bei Updates aufrechterhalten und möchten die gleiche Sicherheit bei Updates aufrechterhalten

Capgo verwendet einen mehrschichtigen Ansatz, um Benutzer mit kompatiblen Updates zu verbinden:

  1. Native Version Einschränkungen: Verhindern Sie, dass Bundles an inkompatiblen native Versionen geliefert werden
  2. Kanalbasierte Routing: Leiten Sie verschiedene App-Versionen an verschiedene Update-Kanäle weiter
  3. Semantische Versionskontrolle: Blockieren Sie automatisch Updates über Major/Major/Minor-Grenzen
  4. Geräteebene-Überschreibungen: Ziel spezifische Geräte oder Benutzergruppen
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]

Dies ist der __CAPGO_KEEP_0__ empfohlene Ansatz

für die Verwaltung von Änderungen und großen Versionsupdates. Er ähnelt dem Liefermodell von AppFlow.

Beispiel-Szenario
  • Abschnitt mit dem Titel „Beispiel-Szenario” App v1.x production (100.000 Benutzer) →
  • Kanal (50.000 Benutzer mit Änderungen, die das Produkt beeinträchtigen) → v2 Kanal
  • App v3.x (10.000 Beta-Testern) → v3 Kanal

Kopieren Sie auf die Zwischenablage

Kopieren Sie auf die Zwischenablage
// 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
}
}
};
Terminalfenster
# 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
Terminalfenster
# 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
  • Null code Änderungen - Der Kanalrouting erfolgt automatisch
  • Klare Trennung - Jede Version hat ihren eigenen Update-Pfad
  • Flexible Zielgruppen - Push-Updates für bestimmte Versionen
  • Sichere Rollouts - Bruchstellen werden nie in inkompatible Versionen geliefert

Verwenden Sie Capgo’s integrierte semantische Versionskontrolle, um Updates über Versionsgrenzen hinweg zu verhindern.

Terminalfenster
# Create a channel that blocks major version updates
npx @capgo/cli channel create stable --disable-auto-update major

Diese Konfiguration bedeutet:

  • Benutzer mit der App-Version 1.2.3 werden Updates bis zur 1.9.9
  • Benutzer werden NICHT Updates der Version 2.0.0 automatisch erhalten
  • Verhindert Änderungen, die ältere native code beschädigen
Terminalfenster
# 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

Copy to clipboard

Mit nativeVersion Delay Bedingung verwenden

Abschnitt: "Mit nativeVersion Delay Bedingung verwenden"

Wenn Sie ein Bundle hochladen, können Sie eine Mindestversion für native Version angeben:

Terminal-Fenster
# This bundle requires native version 2.0.0 or higher
npx @capgo/cli bundle upload \
--channel production \
--native-version "2.0.0"
  1. Neuer Native-Plugin erforderlich

    Terminal-Fenster
    # Bundle needs Camera plugin added in v2.0.0
    npx @capgo/cli bundle upload --native-version "2.0.0"
  2. Native API-Änderungen

    Terminalfenster
    # Bundle uses new Capacitor 6 APIs
    npx @capgo/cli bundle upload --native-version "3.0.0"
  3. Schrittweise Migration

    Terminalfenster
    # Test bundle only on latest native version
    npx @capgo/cli bundle upload \
    --channel beta \
    --native-version "2.5.0"

Strategie 4: Vermeidung von automatischen Downgrades

Abschnitt: Strategie 4: Vermeidung von automatischen Downgrades

Verhindere, dass Benutzer Pakete erhalten, die älter sind als ihre aktuelle native Version.

Aktivieren Sie in den Kanal-Einstellungen

Abschnitt: Aktivieren Sie in den Kanal-Einstellungen

In der Capgo-Oberfläche:

  1. Gehe zu Kanäle → Wähle deinen Kanal
  2. Aktivieren „Deaktivieren Sie die automatische Downgrade unter native“
  3. Speichern Sie Änderungen

Oder über CLI:

Terminal-Fenster
npx @capgo/cli channel set production --disable-downgrade
  • Geräte des Benutzers: Native Version 1.2.5
  • Kanalbundle: Version 1.2.3
  • Ergbnis: Aktualisierung ist blockiert (würde eine Downgrade bedeuten)

Dies ist nützlich, wenn:

  • Benutzer haben manuell eine neuere Version aus dem App-Store installiert
  • Sie benötigen sicherzustellen, dass Benutzer immer die neuesten Sicherheitspatches haben
  • Sie möchten Regressionsfehler verhindern

Überschreiben der Kanalzuweisung für bestimmte Geräte oder Benutzergruppen

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' })
}
}

Gehen Sie in der Capgo-Übersicht:

  1. Zu Geräte → Gerät finden
  2. Klicken Kanal festlegen oder Version festlegen
  3. Mit einer spezifischen Kanal- oder Paketversion überschreiben
  4. Das Gerät erhält Updates von der überschriebenen Quelle

1. Initialisierung (App v1.0.0)

__CAPGO_KEEP_0__
# 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',
}
}
};
Terminal-Fenster
# 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
}
}
};
Terminal-Fenster
# 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"

Verwende das Capgo-Dashboard, um zu überwachen:

  • Wie viele Benutzer sind auf v1 gegenüber v2
  • Zuordnungen von Bundeln pro Version
  • Fehler oder Abstürze pro Version

Sobald die v1-Nutzung unter der Schwellenwert liegt:

Terminal-Fenster
# 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)

Wenn mehrere Kanal-Konfigurationen existieren, verwendet Capgo diese Vorrangfolge:

  1. Geräte-Übernahme (Dashboard oder API) - Höchste Priorität
  2. Cloud-Übernahme über setChannel() Anruf
  3. defaultChannel in capacitor.config.ts
  4. Standard-Kanal (Cloud-Einstellung) - Niedrigste Priorität
// ✅ 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
Terminalfenster
# ✅ Good
1.0.0 1.0.1 1.1.0 2.0.0
# ❌ Bad
1.0 1.1 2 2.5
Terminalfenster
# ✅ Good: Separate branches per major version
main (v3.x)
v2-maintenance (v2.x)
v1-maintenance (v1.x)
# ❌ Bad: Single branch for all versions
Terminalfenster
# 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

Regelmäßig überprüfen Sie Ihren Dashboard:

  • Stellen sich die Benutzer auf neueren nativen Versionen um?
  • Bekommen alte Versionen noch viel Traffic?
  • Sollten Sie alte Kanäle deprecieren?

Für Teams, die von Ionic AppFlowhier ist, wie Capgo’s Versionszielvergleich funktioniert:

FunktionIonic AppFlowCapgo
Versionsbasierte RoutingAutomatisch basierend auf der native VersionAutomatisch über defaultChannel + mehrere Strategien
Semantische VersionsnummerGrundlegende UnterstützungErweitert mit --disable-auto-update (Major/Minor/Patch)
Native VersionenbeschränkungenManuelle Konfiguration im AppFlow-DashboardEingebaut --native-version Flag in CLI
KanalverwaltungWeb UI + CLIWeb UI + CLI + API
GeräteüberschreibungenEingeschränkte GeräteeinstellungenVollständige Kontrolle über das Dashboard/API
Verhinderung von automatischen DowngradesJaJa über --disable-downgrade
Wartung mehrerer VersionenManuelle Verwaltung von Branchen und KanälenAutomatisiert mit Vorrang des Kanals
SelbsthostingNeinJa (vollständige Kontrolle)
Version-AnalytikGrundlegendDetaillierte pro-Version-Metriken

Benutzer erhalten keine Updates

Abschnitt: "Benutzer erhalten keine Updates"

Überprüfen Sie Folgendes:

  1. Kanalzuweisung: Überprüfen Sie, ob das Gerät auf dem richtigen Kanal ist

    const channel = await CapacitorUpdater.getChannel()
    console.log('Current channel:', channel)
  2. Versionseinschränkungen: Überprüfen Sie, ob das Bundle native Versionen anfordert

    • Dashboard → Pakete → Überprüfen Sie die Spalte "Native Version"
  3. Semver-Einstellungen: Überprüfen Sie die Einstellung des Kanals disable-auto-update setting

    Terminalfenster
    npx @capgo/cli channel list
  4. Geräteumstellung: Überprüfen Sie, ob das Gerät eine manuelle Umstellung hat

    • Zentraleinstieg → Geräte → Gerät suchen → Kanal-Version überprüfen
  1. Standardkanal überprüfen: Stellen Sie sicher, dass der richtige Kanal in capacitor.config.ts
  2. Bundle hochladen überprüfen: Überprüfen Sie, ob das Bundle an den richtigen Kanal hochgeladen wurde
  3. Native Version überprüfen: Bestätigen --native-version Die Flagge wurde korrekt verwendet
  1. Eilmaßnahme: Übernehmen Sie auf betroffene Geräte eine sichere Bundle
    • Zentrale Oberfläche → Geräte → Masseauswahl → Version festlegen
  2. Langfristige Lösung: Erstellen Sie kanalisierte Versionen und halten Sie separate Branches
  3. Vorbeugung: Testen Sie Updates immer auf repräsentativen Geräten vor der Rollout

Wenn Sie von Ionic AppFlow, funktioniert die Version-Zielsetzung in Capgo sehr ähnlich, mit verbessertem Flexibilität:

AppFlow-KonzeptCapgo ÄquivalentHinweise
Veröffentlichungs-KanalCapgo KanalDas gleiche Konzept, aber mit mehr Macht
Native Version Lock--native-version FlagMehr Kontrolle auf granularer Ebene
KanalprioritätKanalvorrang (Überschreiben → Cloud → Standard)Mehr transparenter Vorrang
Zielsystem für die BereitstellungKanal + semver-KontrollenMehrere Strategien verfügbar
Produktionskanalproduction Kanal (oder beliebiger Name)Flexible Namensgebung
gitbasierte BereitstellungCLI-Paket-Upload aus der BranchSelbe Workflow
Automatische VersionsübereinstimmungdefaultChannel + VersionsbeschränkungenVerbessert mit mehreren Strategien
  1. Mehr Kontrolle: Capgo bietet Ihnen mehrere Strategien (Kanäle, semver, native Version), die kombiniert werden können
  2. Bessere Sichtbarkeit: Das Dashboard zeigt die Versionsverteilung und Kompatibilitätsprobleme an
  3. API Zugriff: Vollständige programmatische Kontrolle über die Versionsziele
  4. Selbst-Hosting: Option, eigene Update-Server mit gleicher Versionslogik zu betreiben
  1. Mappen Sie Ihre AppFlow-Kanäle zu Capgo Kanälen (üblicherweise 1:1)
  2. Setzen Sie defaultChannel in capacitor.config.ts für jede Hauptversion
  3. Konfigurieren Sie semver-Regeln Wenn Sie automatische Blockierung an Versionsgrenzen wünschen
  4. Versionsspezifische Bundles hochladen mit --native-version Flagge
  5. Versionen verteilen in Capgo-Dashboard
// 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 bietet mehrere Strategien für die versionsspezifische Lieferung von Updates:

  1. Kanalbasierte Routing: Automatische Versionsabtrennung über defaultChannel
  2. Semantische Versionsnummer: Verhindere Updates über Haupt-/Mittel-/Patcheschwellen
  3. Native Versionsbeschränkungen: Erforderliche Mindestnative Version für Bundles
  4. Verhindere automatische Downgrade: Liefern Sie niemals ältere Bundles an neue native Versionen
  5. Geräteüberschreibungen: Manuelle Kontrolle für Tests und Zielsetzung

Indem Sie diese Strategien kombinieren, können Sie AppFlow-Style-Updates mit noch mehr Flexibilität und Kontrolle erreichen. Wählen Sie die Ansätze, die am besten zu Ihrer App-Versionierung und -Veröffentlichungsworkflow passen.

Für weitere Details zu spezifischen Funktionen: