Lompat ke Konten

Saluran

Saluran adalah mekanisme inti untuk mengelola pembaruan aplikasi di Capgo. Mereka memungkinkan Anda untuk mengontrol bagaimana dan kapan pengguna Anda menerima pembaruan, memungkinkan fitur seperti pengujian A/B, peluncuran berjenjang, dan pembaruan spesifik platform.

Saluran mewakili jalur distribusi untuk pembaruan aplikasi Anda. Setiap saluran dapat dikonfigurasi dengan aturan dan keterbatasan tertentu:

  • Kontrol Paket (versi): Tentukan paket (versi) yang diterima pengguna
  • Target Platform: Target spesifik platform (iOS/Android/Electron)
  • Kebijakan Perbarui: Kendalikan bagaimana perbarui disampaikan
  • Keterbatasan Perangkat: Kelola perangkat mana yang dapat mengakses perbarui
  • publik: Tetapkan sebagai saluran default untuk perangkat baru.
  • matiKanAutoPerbaruiDiBawahNative: Mencegah perbarui ketika perangkat aplikasi asli lebih baru dari bundle stabil saluran.
  • Menghapus Auto Update: Mengontrol perilaku pembaruan (major, minor, metadata, patch, atau none).
  • Mengupdate Paket: Mengontrol apakah perangkat mengunduh zip, delta, atau keduanya (all, zip, delta, zip_from_builtin, atau delta_from_builtin). Lihat Paket Pembaruan.
  • ios/android/electron: Aktifkan atau nonaktifkan pengiriman berdasarkan platform.
  • Mengizinkan perangkat menetapkan saluran sendiri__CAPGO_KEEP_0__
  • izin emulator, izin perangkat, izin dev, izin prod: Mengontrol perangkat dan jenis build mana yang menerima pembaruan.
  • Rollout Progressif: Simpan bundle stabil sementara menampilkan bundle target ke kohort yang menempel. Lihat Rollout Progressif.
  1. Saluran Pengujian: Tahan saluran pengujian untuk validasi internal
  2. Rollout Perencanaan: Gunakan beberapa saluran untuk peluncuran pembaruan secara bertahap
  3. Pemisahan Platform: Buat saluran terpisah untuk iOS, Android, dan Electron jika diperlukan
  4. Pengendalian Paket (versi): Gunakan penomoran versi semantik untuk jalur pembaruan yang jelas

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

Membuat atau memperbarui konfigurasi saluran.

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
}

Untuk bidang peluncuran dan penghentian otomatis, API juga menerima bentuk yang setara snake_case atau rollout_version atau auto_pause_enabled. updatePackage juga menerima update_packageatau rollback atau

atau version atau rollback dan promoteToStable tindakan terminal; jangan kombinasikan mereka dengan satu sama lain.

Konfigurasi 5% untuk saluran yang sudah ada: production Jendela Terminal

Salin ke Papan Klip
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/

Bab berjudul “Respons Sukses”

Salin ke Papan Klip
{
"status": "ok"
}

Saluran yang sudah ada:

Untuk preview PR dengan hak akses minimal, autentikasi endpoint ini dengan authorization: $CAPGO_API_KEY atau capgkey: $CAPGO_API_KEYUntuk preview PR dengan hak akses minimal, autentikasi endpoint ini dengan x-api-key header is not accepted by the Channels API.

Untuk preview PR dengan hak akses minimal, autentikasi endpoint ini dengan app_preview atau channel.update_settingsUntuk preview PR dengan hak akses minimal, autentikasi endpoint ini dengan

atau public Kunci tidak dapat diterima oleh header Channel __CAPGO_KEEP_0__. falseSebuah kunci dapat membuat saluran preview non-umum baru. Pembuatan secara otomatis memberikan kunci tersebut ikatan kehidupan siklus saluran untuk saluran tersebut hanya. Peran tidak termasuk, sehingga tidak dapat menggunakan POST untuk memperbarui saluran yang sudah ada, termasuk saluran default atau utama yang sudah ada. bundle upload --channel untuk aliran pembuatan dan unggah sebaliknya dari menganggap POST sebagai tampilan umum-channel upsert.

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

Mengambil informasi saluran. Mengembalikan 50 saluran per halaman. Tanpa channel, tanggapan adalah array. Dengan channel, tanggapan adalah objek saluran tunggal.

  • app_id: Wajib. ID aplikasi Anda
  • page: Opsional. Nomor halaman untuk pengaturan halaman
  • channel: Opsional. Nama saluran spesifik untuk diambil
Jendela Terminal
# 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 Ini adalah singkatan masukan saja dan tidak dikembalikan. Rilis yang tertunda diwakili oleh nilai tidak 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/

Hapus saluran. Perlu diingat bahwa ini akan mempengaruhi semua perangkat yang menggunakan saluran ini.

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

Pembersihan Pratinjau Aplikasi

Penghapusan Pratinjau Aplikasi

Dengan delete_bundle: true, sebuah app_preview Kunci dapat membersihkan atomik hanya sebuah saluran yang dibuat dan bundel terkait, tidak dibagikan. Kunci tidak menerima izin umum. bundle.delete Tampilan Terminal

Salin ke clipboard
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/

Penghapusan Pratinjau Aplikasi

Skenario kesalahan umum dan responsnya:

Salin ke clipboard

// 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. Pengujian Beta
{
"app_id": "com.example.app",
"channel": "beta",
"version": "1.2.0-beta",
"public": false,
"allow_emulator": true,
"allow_dev": true
}
  1. Salin ke clipboard
{
"app_id": "com.example.app",
"channel": "production",
"version": "1.2.0",
"public": true,
"disableAutoUpdate": "minor"
}
  1. Salin ke clipboard
{
"app_id": "com.example.app",
"channel": "ios-hotfix",
"version": "1.2.1",
"ios": true,
"android": false
}

Salin ke clipboard

Teruskan dari Channel

Judul Bagian: Teruskan dari Channel Jika Anda menggunakan Channel-nya untuk merencanakan routing saluran dan peluncuran tahap demi tahap, hubungkannya dengan Saluran untuk detail implementasi di Saluran, Saluran untuk detail implementasi di Saluran, Pengujian Beta Solusi untuk alur kerja produk di Pengujian Beta Solusi, Sasaran Versi Solusi untuk alur kerja produk di Sasaran Versi Solusi, dan Capgo Praktik Terbaik Lingkungan: Staging dengan Satu ID Aplikasi Mobile untuk konteks praktis di Capgo Praktik Terbaik Lingkungan: Staging dengan Satu ID Aplikasi Mobile.