Canaux
Prêt à copier
Les canaux sont le mécanisme de base pour gérer les mises à jour de l'application dans Capgo. Ils vous permettent de contrôler comment et quand vos utilisateurs reçoivent les mises à jour, ce qui permet des fonctionnalités comme les tests A/B, les lancements étalés et les mises à jour spécifiques au plateau.
Comprendre les canaux
Sous-titre « Comprendre les canaux »Un canal représente une piste de distribution pour les mises à jour de votre application. Chaque canal peut être configuré avec des règles et des contraintes spécifiques :
- Contrôle du paquet (version) : Spécifiez le paquet (version) que les utilisateurs reçoivent
- Ciblage de la Plateforme: Ciblez des plateformes spécifiques (iOS/Android/Electron)
- Politiques de Mise à Jour: Contrôlez comment les mises à jour sont livrées
- Restrictions de Dispositif: Gérez lesquels dispositifs peuvent accéder aux mises à jour
Options de Configuration de Canal
: Section intitulée « Options de Configuration de Canal »- public: Définir comme canal par défaut pour les nouveaux appareils.
- disableAutoUpdateUnderNative: Empêcher les mises à jour lorsque la version native de l'appareil est supérieure à la version stable du bundle du canal.
- désactiverMiseÀJourAutomatique: Contrôlez le comportement de mise à jour (
major,minor,metadata,patch, ounone). - mettreÀJourPackage: Contrôlez si les appareils téléchargent un zip, une différence, ou les deux (
all,zip,delta,zip_from_builtin, oudelta_from_builtin). Voir Package de mise à jour. - ios/android/electron: Activer ou désactiver la livraison par plateforme.
- autoriserLAppareilChoisirSonChaîne: Laissez aux appareils choisir leur chaîne.
- autoriser_l_emulateur, autoriser_l_appareil, autoriser_le_dev, autoriser_la_prod: Contrôlez les appareils et les types de build qui reçoivent des mises à jour.
- Rollout progressif: Gardez un bundle stable tout en exposant un bundle cible à un groupe adhérent. Voir Rollouts progressifs.
Meilleures Pratiques
Section intitulée « Meilleures Pratiques »- Canal de test: Maintenez un canal de test pour la validation interne
- Déploiement en phase de test: Utilisez plusieurs canaux pour un déploiement d'actualisation progressive
- Séparation de plateforme: Créez des canaux séparés pour iOS, Android et Electron lorsque nécessaire
- Contrôle de l'ensemble (version): Utilisez : La versionnement semantique : Pour des chemins d'actualisation clairs
Points de terminaison
Section intitulée « Points de terminaison »https://api.capgo.app/channel/
Créez ou mettez à jour une configuration de canal.
Corps de la demande
Section intitulée « Corps de la demande »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}Pour les champs de lancement et de l'arrêt automatique, API accepte également l'équivalent snake_case forme, comme rollout_version ou auto_pause_enabled. updatePackage accepte également update_packageSi les deux formes sont fournies, la valeur camelCase l'emporte. rollback est en camelCase uniquement.
Un objectif de lancement nécessite un canal existant. Il doit avoir un bundle stable déjà affecté ou en recevoir un à travers version dans la même requête POST. rollback et promoteToStable sont des actions de terminal ; ne les combinez pas les unes avec les autres.
Exemple de requête
Exemple de requêteConfigurez un déploiement de 5 % pour un canal existant dont le bundle stable est déjà configuré : production Fenêtre de terminal
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/Exemple de réponse de succès
Copier dans le presse-papier{ "status": "ok"}Exemple de réponse de succès
App Preview clé limite
Section intitulée “App Preview clé limite”Pour une preview PR avec les privilèges les moins élevés, authentifier cet endpoint avec authorization: $CAPGO_API_KEY ou capgkey: $CAPGO_API_KEYou x-api-key header is not accepted by the Channels API.
ou app_preview La channel.update_settingsclé peut créer un nouveau canal de preview non public. La création donne automatiquement à cette clé une liaison de cycle de vie définie sur le canal pour ce canal seulement. Le rôle ne comprend
donc il ne peut pas utiliser POST pour mettre à jour un canal existant, y compris un canal par défaut ou principal. public Laissé falseindéfini (ou défini sur bundle upload --channel Pour la création et l'upload en flux au lieu de traiter POST comme une mise en avant de canal de prévisualisation général.
https://api.capgo.app/channel/
Récupérer les informations de canal. Retourne 50 canaux par page. Sans channel, la réponse est un tableau. Avec channel, la réponse est un objet de canal unique.
Paramètres de requête
Section intitulée “Paramètres de requête”app_id: Obligatoire. L'ID de votre applicationpage: Facultatif. Numéro de page pour la paginationchannel: Facultatif. Nom de canal spécifique à récupérer
Exemples de requêtes
Section intitulée « Exemples de requêtes »# Get all channelscurl -H "authorization: your-api-key" \ "https://api.capgo.app/channel/?app_id=com.example.app"
# Get a specific channelcurl -H "authorization: your-api-key" \ "https://api.capgo.app/channel/?app_id=com.example.app&channel=production"
# Get the next pagecurl -H "authorization: your-api-key" \ "https://api.capgo.app/channel/?app_id=com.example.app&page=1"Type de réponse
Section intitulée « Type de réponse »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 Il s'agit d'un raccourci d'entrée uniquement et n'est pas retourné. Une mise en pause de lancement est représentée par une valeur non nulle rolloutPausedAt.
Exemple de réponse
Section intitulée « Exemple de réponse »[ { "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" }]SUPPRIMER
DELETEhttps://api.capgo.app/channel/
Supprimer un canal. Notez que cela affectera tous les appareils utilisant ce canal.
Corps de la demande
Section intitulée « Corps de la demande »interface Channel { channel: string app_id: string delete_bundle?: boolean // also delete the linked bundle}Exemple de demande
Section intitulée « Exemple de demande »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/Réponse de succès
Section intitulée « Réponse de succès »{ "status": "ok"}Nettoyage de la prévisualisation de l'application
Section intitulée « Suppression de la prévisualisation de l'application »Avec delete_bundle: true, un app_preview clé peut nettoyer atomiquement uniquement un canal qu'elle a créé et son paquet lié non partagé. La clé n'obtient pas la permission générale. bundle.delete Fenêtre de terminal
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/Section intitulée « Gestion des erreurs »
Scénarios d'erreurs courants et leurs réponses :Copier dans le presse-papier
// 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"}Utilisations courantes
Titre de la section « Utilisations courantes »- Test de version bêta
{ "app_id": "com.example.app", "channel": "beta", "version": "1.2.0-beta", "public": false, "allow_emulator": true, "allow_dev": true}- Lancement en production
{ "app_id": "com.example.app", "channel": "production", "version": "1.2.0", "public": true, "disableAutoUpdate": "minor"}- Mises à jour spécifiques au plateforme
{ "app_id": "com.example.app", "channel": "ios-hotfix", "version": "1.2.1", "ios": true, "android": false}Continuer depuis les canaux
Si vous utilisezCanaux pour planifier la routage des canaux et le lancement en étapes, connectez-l’avec __CAPGO_KEEP_0__ Canaux pour les détails d'implémentation dans Canaux, Canaux pour les détails d'implémentation dans Canaux, Solution de test bêta pour le flux de travail du produit dans Solution de test bêta, Solution de ciblage de version pour le flux de travail du produit dans Solution de ciblage de version, et Capgo Pratiques de l'environnement : Étapes avec un seul ID d'application mobile pour le contexte pratique dans Capgo Pratiques de l'environnement : Étapes avec un seul ID d'application mobile.