Pernahkah Anda ingin mengirimkan perubahan langsung ke pengguna tertentu agar segera mereka tinjau dan beri feedback—tanpa meminta mereka download dan install build baru dari TestFlight atau Google Play?
Saya pernah menerima permintaan perbaikan dari customer yang bisa saya implementasikan dengan cepat, tetapi agar hasilnya bisa mereka validasi, saya harus mengirim update ke semua user (berisiko untuk perubahan eksperimental) atau membuat build khusus untuk customer tersebut (merepotkan bagi kami berdua).
Yang kurang saat itu adalah fleksibilitas. Developer ingin bisa mengirim update berbeda ke grup user yang berbeda, seperti stakeholder non-teknis, QA, atau seluruh user base bila perlu.
Tidak ada cara bagi production build untuk beralih ke versi work-in-progress, mengumpulkan feedback, lalu kembali lagi ke production.
Itulah yang menjelajahi channel diaktifkan. Aplikasi yang terinstal di perangkat pengguna dapat mengganti channel update saat runtime, mengubah aplikasi produksi menjadi ruang fleksibel untuk review dan iterasi, bukan sekadar endpoint tetap. Ini sangat berguna bagi pemangku kepentingan non-teknis yang bekerja dengan aplikasi produksi, memungkinkan mereka menguji perubahan dan memberikan umpan balik langsung di aplikasi yang sudah mereka instal.
Memahami Channel Update
Channel update adalah cara Capgo menargetkan update ke build tertentu. Setiap build dikaitkan dengan sebuah channel, dan channel tersebut menentukan update apa yang akan diterimanya.
Misalnya, Anda bisa memublikasikan update ke preview channel tanpa memengaruhi pengguna di production. Di masa lalu, beralih channel memerlukan menginstal native build yang berbeda atau mengubah penugasan perangkat secara manual melalui dashboard.
Channel di Capgo memungkinkan Anda:
- Targetkan grup pengguna tertentu dengan fitur berbeda
- Jalankan A/B test dengan menetapkan user ke channel berbeda
- Rilis fitur baru secara bertahap
- Buat program beta testing
- Debug masalah produksi dengan pengguna individu
Jika Anda belum mengenal channel update, dokumentasi channel Capgo membahasnya lebih detail.
Apa itu Channel Surfing?
Channel surfing memungkinkan aplikasi yang sudah terpasang mengambil update dari stream yang berbeda tanpa perlu install ulang. Aplikasi yang terpasang bisa berpindah channel update saat runtime, dan akan terus menerima update dari channel yang baru dipilih sampai aplikasi di-uninstall atau dipindah ke channel lain.
Dalam praktiknya, ini berarti product owner atau QA bisa memindahkan production build ke, misalnya, channel preview channel, coba perubahan terbaru. Setelah selesai testing, mereka kembali ke production lagi. Tidak perlu install ulang atau build preview terpisah.
Di balik layar, channel surfing bekerja dengan memungkinkan aplikasi memberi tahu client update channel mana yang harus dipakai. Pilihan itu bisa diubah saat runtime dan tetap berlaku sampai dihapus atau diganti.
Cara Implementasi Channel Surfing
Sebelum mencoba channel surfing, proyek Anda harus dikonfigurasi dengan Capgo Live Updates. Untuk mengaturnya, ikuti panduan quickstart Capgo.
Satu-satunya setup yang diperlukan untuk channel surfing adalah mengaktifkan “Allow devices to self associate” pada setiap channel yang ingin Anda tuju di dashboard Capgo. Tidak ada perubahan code atau modifikasi config yang diperlukan selain itu.
Pada intinya, channel surfing didorong oleh satu panggilan API:
import { CapacitorUpdater } from '@capgo/capacitor-updater';
await CapacitorUpdater.setChannel({ channel: 'your-channel' });
Ini mengatur channel yang digunakan saat menanyakan Capgo untuk update. Pelajari lebih lanjut tentang setChannel API.
Pergantian Channel Instan (v5.34.0+)
Mulai dari versi plugin 5.34.0, 6.34.0, 7.34.0, atau 8.0.0 (tergantung pada major version Anda), setChannel() berjalan berbeda dan jauh lebih cepat:
- Validasi backend (read-only): Permintaan dikirim ke backend Capgo untuk memvalidasi apakah channel diizinkan
- Update local storage: Jika validasi lolos, channel disimpan ke local storage perangkat
- Efek instan: Pengecekan update berikutnya langsung menggunakan channel baru
Sebelumnya, setChannel() menyimpan override channel ke database backend (seperti perubahan Dashboard atau API). Perangkat harus menunggu replikasi backend (hingga 2 menit) sebelum channel baru dikenali. Perilaku baru hanya membaca dari backend (untuk validasi) dan menyimpan secara lokal, sehingga perpindahan channel menjadi instan.
Alur Perpindahan Channel Lengkap
Untuk pengalaman pengguna yang lebih baik, biasanya Anda ingin melakukan lebih dari sekadar mengganti channel dan menunggu restart aplikasi berikutnya. Pendekatan umum adalah langsung mengecek update, mengunduhnya jika tersedia, dan memuat ulang aplikasi agar pengguna langsung berada di update channel yang dipilih.
Alur tipikalnya seperti ini:
- Ganti channel (
setChannel) - Periksa pembaruan (
getLatest) - Ambil dan terapkan update (
download,setataunext) - Muat ulang aplikasi jika perlu (
reload)
Berikut adalah contoh lengkapnya:
import { CapacitorUpdater } from '@capgo/capacitor-updater';
async function switchChannel(selectedChannel: string) {
try {
// 1. Set the updates channel (with optional auto-update trigger)
await CapacitorUpdater.setChannel({
channel: selectedChannel,
triggerAutoUpdate: true // Immediately check for updates
});
console.log(`Switched to channel: ${selectedChannel}`);
// If you want more control, handle the update manually:
// const latest = await CapacitorUpdater.getLatest();
// if (latest.url) {
// const bundle = await CapacitorUpdater.download({
// url: latest.url,
// version: latest.version
// });
// await CapacitorUpdater.set({ id: bundle.id });
// }
} catch (error) {
console.error('Failed to switch channel:', error);
}
}
// Switch to the beta channel
switchChannel('beta');
Cara Anda menyusun alur ini sepenuhnya terserah Anda. Anda bisa memecah langkah-langkah ini ke dalam beberapa interaksi atau menjalankannya sekaligus. Terlepas dari bagaimana Anda menyusun alurnya, pastikan untuk memperhitungkan kegagalan. Masalah jaringan atau channel yang tidak valid dapat mencegah update diterapkan.
Satu-satunya Syarat: Aktifkan Self-Assignment
Ini satu-satunya hal yang perlu Anda lakukan untuk mengaktifkan channel surfing. Sebelum aplikasi Anda dapat beralih ke channel menggunakan setChannel(), Anda harus mengaktifkan self-assignment untuk channel tersebut di dashboard Capgo:
- Buka halaman Channel bagian di dashboard Capgo Anda
- Klik nama channel yang ingin dikelola
- Aktifkan “Izinkan perangkat untuk self associate”
- Simpan perubahan

Selesai. Tidak perlu mengubah config di aplikasi Anda. Tidak ada defaultChannel setting yang diperlukan. Cukup aktifkan self-assignment pada channel yang ingin Anda izinkan untuk dipilih pengguna.
Jika pengaturan ini dinonaktifkan, setiap upaya untuk memanggil setChannel() dengan channel ini akan gagal dan channelPrivate event akan dipicu.
Daftar Channel yang Tersedia
Anda dapat mengambil daftar channel yang tersedia untuk self-assignment:
const { channels } = await CapacitorUpdater.listChannels();
console.log('Available channels:', channels.map(c => c.name));
// Use this to build a channel selector UI
Ini hanya mengembalikan channel di mana self-assignment diaktifkan.
Mendapatkan Channel Saat Ini
Periksa channel mana yang saat ini ditugaskan ke perangkat:
const { channel } = await CapacitorUpdater.getChannel();
console.log('Current channel:', channel);
Kembali ke Channel Default
Untuk menghapus override channel dan kembali ke default:
await CapacitorUpdater.unsetChannel({});
Ini akan unlink perangkat dari channel yang ditugaskan secara spesifik, sehingga kembali ke defaultChannel di config Anda atau default cloud.
Cara Menguji Channel Surfing
Untuk melihat channel surfing dalam aksi, Anda membutuhkan release build - @capgo/capacitor-updater API dirancang untuk release build. Pada debug build, aplikasi biasanya memuat JavaScript dari development server, yang melewati alur update normal.
Prerequisites
Satu-satunya persyaratan untuk channel surfing adalah mengaktifkan “Izinkan perangkat untuk self associate” pada setiap channel yang ingin Anda izinkan untuk switching. Tidak perlu perubahan config di aplikasi Anda.
Membuat Test Build
Build aplikasi Anda seperti biasa:
bun run build && npx cap sync
Lalu buat native build Anda menggunakan Xcode atau Android Studio, atau gunakan pipeline CI/CD Anda. Aplikasi akan dimulai pada channel yang diset sebagai default cloud di dashboard Capgo Anda.
Menerbitkan Update ke Channel Berbeda
Setelah aplikasi terinstal, terbitkan update ke channel yang berbeda:
# Publish to preview channel
npx @capgo/cli@latest bundle upload --channel preview
# Publish to production channel
npx @capgo/cli@latest bundle upload --channel production
Dari sana, navigasikan ke UI channel surfing di aplikasi Anda dan pemicu peralihan channel. Aplikasi harus mengambil update dari channel yang dipilih dan memuat ulang ke update baru.
Membangun UI Channel Switcher
Channel surfing biasanya adalah sesuatu yang ingin Anda tampilkan hanya untuk sekelompok pengguna terbatas, bukan untuk semua orang yang menggunakan aplikasi Anda. Misalnya, Anda mungkin memiliki tombol yang hanya tersedia untuk karyawan yang terautentikasi untuk mengalihkan aplikasi ke channel preview.
Berikut adalah contoh komponen React untuk channel switcher:
import { useState, useEffect } from 'react';
import { CapacitorUpdater } from '@capgo/capacitor-updater';
export function ChannelSwitcher() {
const [currentChannel, setCurrentChannel] = useState<string>('');
const [availableChannels, setAvailableChannels] = useState<string[]>([]);
const [isLoading, setIsLoading] = useState(false);
useEffect(() => {
loadChannelInfo();
}, []);
async function loadChannelInfo() {
const { channel } = await CapacitorUpdater.getChannel();
setCurrentChannel(channel || 'default');
const { channels } = await CapacitorUpdater.listChannels();
setAvailableChannels(channels.map(c => c.name));
}
async function handleChannelSwitch(channel: string) {
setIsLoading(true);
try {
await CapacitorUpdater.setChannel({
channel,
triggerAutoUpdate: true
});
setCurrentChannel(channel);
// App will update in background or on next restart
} catch (error) {
console.error('Failed to switch channel:', error);
} finally {
setIsLoading(false);
}
}
return (
<div>
<p>Current channel: {currentChannel}</p>
<div>
{availableChannels.map(channel => (
<button
key={channel}
onClick={() => handleChannelSwitch(channel)}
disabled={isLoading || channel === currentChannel}
>
Switch to {channel}
</button>
))}
</div>
</div>
);
}
Jebakan OTA update
Semua poin ini tidak spesifik untuk channel surfing, tapi biasanya cepat terlihat begitu Anda mulai berpindah channel saat runtime.
Ketidakcocokan versi runtime
Update di Capgo terikat dengan versi native app. Jika versi native sebuah update tidak cocok dengan versi native app yang terinstal, update tidak akan diunduh atau diterapkan. Saat channel surfing, ini biasanya terlihat sebagai app yang berpindah channel tapi tidak ada update yang diterapkan, padahal update tersebut ada di channel itu.
Ini biasanya berarti update dipublikasikan dari versi native app yang berbeda. Pastikan bundle channel Anda kompatibel dengan versi native yang terinstal di perangkat.
Menghapus atau membatalkan update
Jika app sudah mengunduh update untuk sebuah channel, menghapus update tersebut dari dashboard Capgo tidak menghapusnya dari perangkat yang sudah memilikinya. Penghapusan hanya menghentikan unduhan di masa mendatang.
Cara paling andal untuk membatalkan update yang bermasalah adalah memublikasikan update known-good ke channel yang sama. Ini membuat update baru di urutan teratas riwayat channel, yang akan dianggap client sebagai versi terbaru dan diterapkan.
Capgo juga menyediakan mekanisme rollback yang bisa menginstruksikan client untuk menerapkan kembali update stabil sebelumnya atau kembali ke update yang tertanam di dalam build.
Pertimbangan migrasi data
Berpindah channel akan mengubah JavaScript bundle yang dijalankan aplikasi. Jika aplikasi Anda bergantung pada migrasi atau struktur data yang tidak kompatibel antar channel, berpindah-pindah channel dapat menyebabkan masalah.
Sebagai contoh, jika update beta menerapkan migrasi database, versi production mungkin tidak mengenali skema baru tersebut. Developer harus memastikan update mereka aman untuk berpindah antar channel atau membatasi perpindahan ke satu arah jika diperlukan.
Mengapa Channel Surfing Mempercepat Iterasi Mobile
Channel surfing sangat berguna saat Anda perlu meninjau perubahan dengan cepat di lingkungan production.
Validasi Cepat
Bayangkan ada bug fix mendesak yang perlu divalidasi sebelum dirilis secara luas. Dengan channel surfing, perubahan tersebut dapat diisolasi ke sekelompok kecil user tertentu untuk ditinjau sebelum mencapai production.
Review Stakeholder
Product owner atau QA dapat mengalihkan production build yang terinstal ke channel update lain, memverifikasi fix atau fitur tersebut, lalu beralih kembali setelah selesai.
Testing yang Efisien
Ini memudahkan stakeholder non-teknis untuk terlibat dalam proses review dan pengambilan keputusan tanpa mengganggu workflow. Satu production build pun menjadi alat yang fleksibel untuk testing, feedback, dan validasi.
Kasus Penggunaan
- Pengujian QA: Tim QA beralih antar feature branch
- Program Beta: Pengguna memilih beta channel untuk akses awal
- Review Stakeholder: Product owner pratinjau perubahan sebelum rilis
- A/B Testing: Alokasikan pengguna ke channel berbeda untuk eksperimen
- Debugging: Pindahkan pengguna tertentu ke channel debug untuk mendiagnosis masalah
Perbandingan: Metode Perubahan Channel
| Metode | Waktu Efektif | Disimpan di | Kasus Penggunaan |
|---|---|---|---|
setChannel() dari plugin |
Instan | Hanya perangkat (lokal) | Pergantian channel in-app oleh user |
| Override perangkat via dashboard | Hingga 2 menit | Database backend | Perubahan oleh admin untuk perangkat tertentu |
| Penetapan channel API | Hingga 2 menit | Database backend | Integrasi backend otomatis |
Untuk pengalaman pengguna terbaik saat membangun UI channel-switching, selalu gunakan plugin’s setChannel() metode.
Praktik Terbaik
- Batasi Akses: Channel surfing biasanya untuk penggunaan internal - jangan tampilkan ke semua pengguna
- Tangani Error: Selalu tangani error dengan baik saat beralih channel
- Validasi Kompatibilitas: Pastikan update di channel yang berbeda kompatibel dengan versi native yang terpasang
- Dokumentasikan Channel: Simpan dokumentasi yang jelas tentang tujuan masing-masing channel
- Pantau Penggunaan: Lacak perangkat mana yang berada di channel mana untuk debugging
Sumber Daya
Kesimpulan
Channel surfing mengubah cara Anda beriterasi pada aplikasi Capacitor. Alih-alih menganggap build produksi sebagai titik akhir yang tetap, channel surfing menjadikannya alat fleksibel untuk pengujian, validasi, dan iterasi cepat.
Dengan fitur channel switching instan yang diperkenalkan dalam versi plugin terbaru, pengalamannya kini mulus — pengguna dapat beralih channel dan langsung menerima update dari channel baru tanpa waktu tunggu.
Apakah Anda memvalidasi perbaikan bug dengan pemangku kepentingan, menjalankan program beta, atau men-debug masalah dengan pengguna tertentu, channel surfing memberi Anda fleksibilitas untuk mengirim update yang tepat ke pengguna yang tepat pada waktu yang tepat.
Lanjut ke Channel Surfing untuk Capgo: Cara Mengganti Channel Update saat Runtime
Jika Anda menggunakan Channel Surfing untuk Capgo: Cara Mengganti Channel Update saat Runtime untuk merencanakan routing channel dan staged rollout, hubungkan dengan Channel untuk detail implementasi di Channels, Channel untuk detail implementasi di Channels, Channel untuk detail implementasi di Channels, Solusi Beta Testing untuk workflow produk di Solusi Beta Testing, dan Solusi Version Targeting untuk workflow produk di Version Targeting Solution.