Zum Inhalt springen

Kanäle

Kanäle sind die zentrale Mechanism für die Verwaltung von App-Updates in Capgo. Sie ermöglichen Ihnen, die Art und Weise und das Zeitpunkt zu steuern, zu dem Ihre Benutzer Updates erhalten, was Funktionen wie A/B-Test, geplante Rollouts und Plattform-spezifische Updates ermöglicht.

Ein Kanal stellt eine Verteilungsstrecke für Ihre App-Updates dar. Jeder Kanal kann mit spezifischen Regeln und Einschränkungen konfiguriert werden:

  • Bündel (Version) Kontrolle: Angeben, welches Bündel (Version) die Benutzer erhalten
  • Plattform-Zielsetzung: Ziele bestimmte Plattformen (iOS/Android/Electron)
  • Aktualisierungsrichtlinien: Kontrolle, wie Updates geliefert werden
  • Gerätebeschränkungen: Verwalten Sie, welche Geräte Zugriff auf Updates haben
  • öffentlich: Als Standardkanal für neue Geräte festlegen.
  • disableAutoUpdateUnderNative: Verhindern Sie Updates, wenn die Geräte-App-Version neuere ist als die stabile Kanal-Bundle.
  • disableAutoUpdate: Steuere die Aktualisierungsverhalten (major, minor, metadata, patch, oder none).
  • updatePackage: Steuere, ob Geräte ein Zip, ein Delta oder beide herunterladen sollen (all, zip, delta, zip_from_builtin, oder delta_from_builtin). Siehe Aktualisierungs-Paket.
  • ios/android/electron: Aktiviere oder deaktiviere die Lieferung nach Plattform.
  • allow_device_self_set: Lasse Geräte ihre Kanalwahl selbst treffen.
  • zulassen_Emulator, zulassen_Gerät, zulassen_Dev, zulassen_Prod: Steuern Sie, welche Geräte und Build-Typen Updates erhalten.
  • Progressive rollout: Halten Sie eine stabile Bundle-Version, während Sie eine Ziel-Bundle-Version einer festen Kohorte zugänglich machen. Siehe Progressive rollouts.
  1. Testkanal: Halten Sie einen Testkanal für interne Validierung bereit
  2. Staged Rollout: Verwenden Sie mehrere Kanäle für eine schrittweise Bereitstellung von Updates
  3. Plattformtrennung: Erstellen Sie getrennte Kanäle für iOS, Android und Electron, wenn erforderlich
  4. Bündel (Version) Kontrolle: Verwenden Sie semantische Versionsnummerierung für klare Updatepfade

https://api.capgo.app/channel/

Eine Kanal-Konfiguration erstellen oder aktualisieren.

type DisableAutoUpdate = "major" | "minor" | "metadata" | "patch" | "none"
type AutoPauseAction = "pause" | "rollback" | "notify"
interface ChannelSet {
app_id: string
channel: string
version?: string | null // stable bundle name
public?: boolean
disableAutoUpdateUnderNative?: boolean
disableAutoUpdate?: DisableAutoUpdate
updatePackage?: "all" | "zip" | "delta" | "zip_from_builtin" | "delta_from_builtin"
ios?: boolean
android?: boolean
electron?: boolean
allow_device_self_set?: boolean
allow_emulator?: boolean
allow_device?: boolean
allow_dev?: boolean
allow_prod?: boolean
// Progressive rollout (camelCase is preferred)
rolloutVersion?: string | number | null // target bundle name or ID
rolloutPercentage?: number // 0–100
rolloutPercentageBps?: number // 0–10000; takes precedence when both are set
rolloutEnabled?: boolean
rolloutPaused?: boolean // input-only convenience flag
rolloutPausedAt?: string | null // ISO timestamp or null
rolloutPauseReason?: string | null
rolloutCacheTtlSeconds?: number // 60–31536000
rollback?: boolean
promoteToStable?: boolean
// Rollout auto-pause policy
autoPauseEnabled?: boolean
autoPauseWindowMinutes?: number
autoPauseFailureRateBps?: number | null
autoPauseConfidence?: number
autoPauseMinAttempts?: number | null
autoPauseMinFailures?: number | null
autoPauseAction?: AutoPauseAction
autoPauseCooldownMinutes?: number
}

Für die Ausroll- und Auto-Pause-Felder akzeptiert API auch die entsprechende snake_case Form, wie z.B. rollout_version oder auto_pause_enabled. updatePackage Für Ausroll- und Auto-Pause-Felder akzeptiert __CAPGO_KEEP_0__ auch die entsprechende Form, wie z.B. update_packageoder rollback akzeptiert auch

. Wenn beide Formen bereitgestellt werden, gewinnt der Wert in camelCase. version ist nur in camelCase. rollback und promoteToStable sind Terminalaktionen; kombinieren Sie sie nicht miteinander.

Beispielanfrage

Beispielanfrage

Ein bestehendes Kanal konfigurieren, dessen stabiles Bundle bereits festgelegt ist: production Terminalfenster

Auf die Zwischenablage kopieren
curl -X POST \
-H "authorization: your-api-key" \
-H "Content-Type: application/json" \
-d '{
"app_id": "com.example.app",
"channel": "production",
"rolloutVersion": "1.3.0",
"rolloutPercentage": 5,
"rolloutEnabled": true,
"rolloutCacheTtlSeconds": 2592000,
"autoPauseEnabled": true,
"autoPauseFailureRateBps": 500,
"autoPauseMinAttempts": 100,
"autoPauseAction": "pause"
}' \
https://api.capgo.app/channel/
{
"status": "ok"
}

Kanal

Für eine Berechtigungsverwaltung von PR-Vorschauen authentifizieren Sie diesen Endpunkt mit authorization: $CAPGO_API_KEY oder capgkey: $CAPGO_API_KEYLassen Sie es (oder setzen Sie es auf) x-api-key Der Header wird nicht von den Channels API angenommen.

Ein Schlüssel kann einen neuen nicht öffentlichen Vorschaukanal erstellen. Die Erstellung gibt dem Schlüssel automatisch eine kanal-spezifische Lebenszyklusbindung für diesen Kanal nur. Die Rolle umfasst nicht app_preview so kann sie nicht POST verwenden, um einen bestehenden Kanal, einschließlich eines bestehenden Standard- oder Hauptkanals, zu aktualisieren. channel.update_settingsLassen Sie es ungesetzt (oder setzen Sie es auf)

Setzen Sie es auf public unset (or set it to false) for PR preview channels. Use bundle upload --channel für die Erstellung und Hochladen-Fluss anstatt als POST als allgemeiner Vorschau-Kanal upsert zu behandeln.

https://api.capgo.app/channel/

Kanalinformationen abrufen. Gibt 50 Kanäle pro Seite zurück. Ohne channel, die Antwort ist ein Array. Mit channel, ist die Antwort ein Kanal-Objekt.

  • app_id: Erforderlich. Die ID Ihres Apps
  • page: Optional. Seitennummer für die Paginierung
  • channel: Optional. Spezifischer Kanalname zum Abrufen
Terminalfenster
# Get all channels
curl -H "authorization: your-api-key" \
"https://api.capgo.app/channel/?app_id=com.example.app"
# Get a specific channel
curl -H "authorization: your-api-key" \
"https://api.capgo.app/channel/?app_id=com.example.app&channel=production"
# Get the next page
curl -H "authorization: your-api-key" \
"https://api.capgo.app/channel/?app_id=com.example.app&page=1"
interface Channel {
id: number
created_at: string
updated_at: string
name: string
app_id: string
created_by: string
public: boolean
disableAutoUpdateUnderNative: boolean
disableAutoUpdate: DisableAutoUpdate
updatePackage: "all" | "zip" | "delta" | "zip_from_builtin" | "delta_from_builtin"
allow_device_self_set: boolean
allow_emulator: boolean
allow_device: boolean
allow_dev: boolean
allow_prod: boolean
version: { id: number, name: string } | null // stable bundle
// These three response identifiers intentionally use snake_case.
rollout_version: number | null
rollout_id: string
rollout_version_info: { id: number, name: string } | null
rolloutPercentageBps: number
rolloutEnabled: boolean
rolloutPausedAt: string | null
rolloutPauseReason: string | null
rolloutCacheTtlSeconds: number
autoPauseEnabled: boolean
autoPauseWindowMinutes: number
autoPauseFailureRateBps: number | null
autoPauseConfidence: number
autoPauseMinAttempts: number | null
autoPauseMinFailures: number | null
autoPauseAction: AutoPauseAction
autoPauseCooldownMinutes: number
autoPauseLastTriggeredAt: string | null
autoPauseLastCheckedAt: string | null
}

rolloutPaused ist ein Eingabe-only-Shortcut und wird nicht zurückgegeben. Ein pausierter Rollout wird durch einen nicht-null-wertigen rolloutPausedAt.

[
{
"id": 1,
"name": "production",
"app_id": "com.example.app",
"updatePackage": "all",
"version": { "id": 1, "name": "1.2.0" },
"rollout_version": 2,
"rollout_id": "e60c19c9-2e65-4e0d-bc06-d1f5b4f96276",
"rollout_version_info": { "id": 2, "name": "1.3.0" },
"rolloutPercentageBps": 500,
"rolloutEnabled": true,
"rolloutPausedAt": null,
"rolloutCacheTtlSeconds": 2592000,
"autoPauseEnabled": true,
"autoPauseFailureRateBps": 500,
"autoPauseAction": "pause"
}
]

LÖSCHEN

DELETE

https://api.capgo.app/channel/

Ein Kanal löschen. Beachten Sie, dass dies alle Geräte, die diesen Kanal verwenden, beeinflusen wird.

interface Channel {
channel: string
app_id: string
delete_bundle?: boolean // also delete the linked bundle
}
Terminalfenster
curl -X DELETE \
-H "authorization: your-api-key" \
-H "Content-Type: application/json" \
-d '{
"app_id": "com.example.app",
"channel": "beta"
}' \
https://api.capgo.app/channel/
{
"status": "ok"
}

Mit delete_bundle: true, einem app_preview Schlüssel kann nur ein von ihm erstellter Kanal und dessen verbundener, nicht geteilter Bundle atomisch bereinigt werden. Der Schlüssel erhält keine allgemeine bundle.delete Erlaubnis.

Terminalfenster
curl -X DELETE \
-H "capgkey: $CAPGO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"app_id": "com.example.app",
"channel": "pr-123",
"delete_bundle": true
}' \
https://api.capgo.app/channel/

Häufige Fehlerfälle und ihre Antworten:

// Channel not found
{
"error": "Channel not found",
"status": "KO"
}
// Invalid bundle (version) format
{
"error": "Invalid version format. Use semantic versioning",
"status": "KO"
}
// Invalid update policy
{
"error": "Invalid disableAutoUpdate value",
"status": "KO"
}
// Permission denied
{
"error": "Insufficient permissions to manage channels",
"status": "KO"
}
  1. Beta-Testung
{
"app_id": "com.example.app",
"channel": "beta",
"version": "1.2.0-beta",
"public": false,
"allow_emulator": true,
"allow_dev": true
}
  1. Produktionsstart
{
"app_id": "com.example.app",
"channel": "production",
"version": "1.2.0",
"public": true,
"disableAutoUpdate": "minor"
}
  1. Plattformspezifische Updates
{
"app_id": "com.example.app",
"channel": "ios-hotfix",
"version": "1.2.1",
"ios": true,
"android": false
}

Wenn Sie Kanäle verwenden Kanäle um das Routing von Kanälen und die schrittweise Veröffentlichung zu planen, verbinden Sie es mit Kanäle zur Implementierungsdetail in Kanäle, Kanäle zur Implementierungsdetail in Kanäle, Testversion-Lösung zur Produktworkflow in Testversion-Lösung, Zielversion-Lösung zur Produktworkflow in Zielversion-Lösung, und Capgo Umgebungsbest Practices: Staging mit einem Mobile App ID zur praktischen Kontext in Capgo Umgebungsbest Practices: Staging mit einem Mobile App ID.