컨텐츠로 건너뛰기

채널

Capgo의 핵심 업데이트 관리 메커니즘인 채널입니다. 사용자가 업데이트를 받는 방법과 시간을 제어할 수 있으며, A/B 테스트, 단계별 출시, 플랫폼별 업데이트와 같은 기능을 활성화할 수 있습니다.

채널은 앱 업데이트의 배포 트랙을 나타냅니다. 각 채널은 특정 규칙과 제약과 함께 구성될 수 있습니다:

  • 버nd (버전) 제어: 사용자가 받는 버nd (버전) 지정
  • 플랫폼 대상 설정: iOS/Android/Electron 플랫폼을 대상으로 하세요.
  • 업데이트 정책: 업데이트 전달 방법을 제어하세요.
  • 장치 제한: 업데이트 접근을 관리하는 장치.

채널 구성 옵션

채널 구성 옵션
  • 공개: 새로운 장치에 기본 채널로 설정하세요.
  • disableAutoUpdateUnderNative네이티브 앱 버전보다 최신인 경우 자동 업데이트 방지
  • 자동 업데이트 방지: 업데이트 동작을 제어합니다 (major, minor, metadata, patch, 또는 none).
  • updatePackage: 장치가 zip, delta 또는 둘 다 다운로드할지 여부를 제어합니다 (all, zip, delta, zip_from_builtin, 또는 delta_from_builtin). 자세히 보기 다운로드 형식.
  • iOS/Android/Electron: 플랫폼별로 전달을 허용하거나 차단합니다.
  • 장치 자체 설정 허용: 장치가 채널을 선택할 수 있도록 허용합니다.
  • 에뮬레이터 허용, 장치 허용, 개발 허용, 제품 허용: 장치 및 빌드 유형이 업데이트를 받는 것을 제어합니다.
  • 진보적 배포: 안정적인 번들을 유지하면서 특정 그룹에 대상 번들을 노출합니다. 자세히 보기 진보적 배포.

context: Capgo 솔루션 마케팅 페이지. 역할: 짧은 UI 레이블 또는 네비게이션 아이템. 페이지 solutions/cordova-to-capacitor.astro에서 볼 수 있습니다. 메시지 키 `solutions_cordova_to_capacitor_link_rollouts` (Solutions Cordova To Capacitor Link Rollouts).

최선의 방법
  1. 제목 ‘최선의 방법’테스트 채널
  2. : 내부 검증을 위해 테스트 채널을 유지합니다.: 여러 채널을 사용하여 점진적인 업데이트 배포
  3. 플랫폼 분리: iOS, Android 및 Electron에 필요한 경우 별도의 채널을 생성하세요
  4. 버전드 (버전) 관리: Use 세미나 버전 을 사용하세요

엔드포인트

엔드포인트

POST

POST

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

채널 구성 설정을 생성하거나 업데이트 하세요

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
}

롤아웃 및 자동 중단 field 에서 API 는 해당하는 snake_case 형식, 예를 들어 rollout_version 또는 auto_pause_enabled. updatePackage 또한 수락합니다. update_package형식이 둘 다 제공되는 경우 camelCase 값이 우선합니다. rollback camelCase 형식만 허용합니다.

롤아웃 대상은 기존 채널이 필요합니다. 안정적인 번들을 할당하거나 POST 요청을 통해 할당받아야 합니다. version 그리고 rollback 또한 promoteToStable terminal 액션입니다. 서로 다른 액션을 혼합하지 마세요.

기존에 이미 안정 버전이 설정된 채널에 대해 5%의 롤아웃을 구성하세요: production 터미널 창

클립보드 복사
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"
}

앱 미리보기 키 경계

__CAPGO_KEEP_0__

App Preview key boundary

최소 권한의 PR 미리보기에 대해 이 엔드포인트를 인증하세요. authorization: $CAPGO_API_KEY 또는 capgkey: $CAPGO_API_KEY. The x-api-key Channels API는 채널을 수락하지 않습니다.

An app_preview 미리보기 채널을 만들 때 channel.update_settings미리보기 채널을 만들 때

미리보기 채널을 만들 때 public 미리보기 채널을 만들 때 false미리보기 채널을 만들 때 bundle upload --channel 미리보기 채널을 만들 때

GET

GET

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

GET channelGET channelGET

GET

GET
  • app_idGET
  • pageGET
  • channelGET

GET

GET
터미널 창
# 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 입력 전용 단축키이며 반환되지 않습니다. 중단된 롤아웃은 null이 아닌 값을 나타냅니다. 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"
}
]

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

채널 삭제. 이 채널을 사용하는 모든 기기를 영향받습니다.

interface Channel {
channel: string
app_id: string
delete_bundle?: boolean // also delete the linked bundle
}
터미널 창
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"
}

앱 미리보기 정리

앱 미리보기 정리 섹션

채널 delete_bundle: true, app_preview 키 bundle.delete permission.

권한을 받지 않습니다.
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/

클립보드 복사

오류 처리

제목: 오류 처리

// 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. 베타 테스트
{
"app_id": "com.example.app",
"channel": "beta",
"version": "1.2.0-beta",
"public": false,
"allow_emulator": true,
"allow_dev": true
}
  1. 운영 출시
{
"app_id": "com.example.app",
"channel": "production",
"version": "1.2.0",
"public": true,
"disableAutoUpdate": "minor"
}
  1. 플랫폼별 업데이트
{
"app_id": "com.example.app",
"channel": "ios-hotfix",
"version": "1.2.1",
"ios": true,
"android": false
}

채널에서 계속

채널에서 계속

채널을 사용 중이라면 채널 채널을 계획한 후 채널 라우팅과 단계별 출시를 위해 연결하세요 채널 Channels 채널 Channels 베타 테스트 솔루션 Channels 버전 대상 솔루션 Channels Capgo 환경 최적화: 단일 모바일 앱 ID 실제 환경에서 Capgo 환경의 최적화 방법: 단일 모바일 앱 ID를 사용한 스테이징.