Targeting Versi
Salin prompt pengaturan dengan langkah instalasi dan panduan markdown lengkap untuk plugin ini.
Panduan ini menjelaskan cara mengirimkan bundle yang paling kompatibel ke pengguna berdasarkan versi aplikasi asli mereka, seperti pendekatan Ionic AppFlow.ini memastikan manajemen update yang lebih sederhana dan peluncuran yang lebih cepat sambil mencegah masalah kompatibilitas.
Pendahuluan
Bab yang berjudul “Pendahuluan”Sistem target versi Capgo memungkinkan Anda:
- Mengirimkan pembaruan yang kompatibel ke pengguna berdasarkan versi aplikasi native mereka
- Mencegah perubahan yang menghancurkan agar tidak mencapai versi aplikasi yang tidak kompatibel
- Mengelola versi aplikasi berbagai versi secara bersamaan tanpa logika yang kompleks
- Melakukan pembaruan secara lancar ke segmen pengguna tertentu Mengapa Targeting Versi Penting (Terutama bagi Pengguna AppFlow)
Bagian berjudul “Mengapa Targeting Versi Penting (Terutama bagi Pengguna AppFlow)”
Jika Anda familiar denganIonic AppFlow , Anda tahu betapa pentingnya memastikan pengguna hanya menerima pembaruan yang kompatibel. AppFlow secara otomatis memasangkan paket pembaruan live dengan versi aplikasi native, sehingga mencegah JavaScript yang tidak kompatibel disampaikan ke aplikasi native yang lebih tua __CAPGO_KEEP_0__.code menyediakan jaminan keamanan yang sama
Capgo provides the same safety guaranteesPengendalian yang lebih halus atas matching versi
- Strategi yang lebih dari satu (saluran, semver, konstrain native)
- Kemampuan penglihatan yang lebih baik atas distribusi versi
- Melakukan pembaruan secara lancar ke segmen pengguna tertentu
- API and CLI control alongside dashboard management
Metode ini sangat berguna ketika:
- Pengguna Anda berada di berbagai versi utama aplikasi (misalnya, v1.x, v2.x, v3.x)
- Pengguna memerlukan kompatibilitas mundur sambil mengeluarkan perubahan yang memecah
- Pengguna ingin mencegah bundle yang lebih baru memecahkan code yang lebih tua
- Pengguna sedang melakukan migrasi secara bertahap dari satu versi ke versi lain
- Pengguna sedang melakukan migrasi dari AppFlow dan ingin mempertahankan keamanan pembaruan yang sama
Bagaimana Cara Kerjanya
Judul bagian “Bagaimana Cara Kerjanya”Capgo menggunakan metode multi-layered untuk mencocokkan pengguna dengan pembaruan yang kompatibel:
- Keterbatasan Versi NativeMencegah bundle dari dikirimkan ke versi native yang tidak kompatibel
- Rute Berdasarkan SaluranMencegah Update:
- Mengatur Versi SemantikMencegah Update:
- Mengatur Versi SemantikMengatur Versi Semantik
Mengatur Versi Semantik
Mengatur Versi Semantikgraph TD A[User Opens App] --> B{Check Device Override} B -->|Override Set| C[Use Override Channel] B -->|No Override| D{Check local plugin channel} D -->|setChannel value| E[Use local setChannel channel] D -->|No local channel| F{Check defaultChannel in App} F -->|Has defaultChannel| G[Use App's defaultChannel] F -->|No defaultChannel| H[Use Cloud Default Channel] C --> I{Check Version Constraints} E --> I G --> I H --> I I -->|Compatible| J[Deliver Update] I -->|Incompatible| K[Skip Update]Mengatur Versi Semantik
Mengatur Versi SemantikIni adalah pendekatan yang direkomendasikan untuk mengelola perubahan yang mengganggu dan pembaruan versi utama. Ini mirip dengan model pengiriman AppFlow. Contoh Skenario
Judul bagian “Contoh Skenario”
Aplikasi v1.x- (100.000 pengguna) → saluran
productionAplikasi v2.x - (50.000 pengguna dengan perubahan yang mengganggu) → saluran
v2Aplikasi v3.x - (50.000 pengguna dengan perubahan yang mengganggu dan pembaruan versi utama) → (10.000 pengguna beta) →
v3saluran
Implementasi
Judul Bagian “Implementasi”Langkah 1: Konfigurasi Saluran untuk Setiap Versi Utama
Judul Bagian “Langkah 1: Konfigurasi Saluran untuk Setiap Versi Utama”// capacitor.config.ts for version 1.x buildsimport { CapacitorConfig } from '@capacitor/cli';
const config: CapacitorConfig = { appId: 'com.example.app', appName: 'Example App', plugins: { CapacitorUpdater: { autoUpdate: 'atBackground', defaultChannel: 'production', // or omit for default } }};
export default config;// capacitor.config.ts for version 2.x buildsconst config: CapacitorConfig = { appId: 'com.example.app', appName: 'Example App', plugins: { CapacitorUpdater: { autoUpdate: 'atBackground', defaultChannel: 'v2', // Routes v2 users automatically } }};// capacitor.config.ts for version 3.x buildsconst config: CapacitorConfig = { appId: 'com.example.app', appName: 'Example App', plugins: { CapacitorUpdater: { autoUpdate: 'atBackground', defaultChannel: 'v3', // Routes v3 users automatically } }};Langkah 2: Buat Saluran
Judul Bagian “Langkah 2: Buat Saluran”# Create channels for each major versionnpx @capgo/cli channel create productionnpx @capgo/cli channel create v2npx @capgo/cli channel create v3
# Enable self-assignment so apps can switch channelsnpx @capgo/cli channel set production --self-assignnpx @capgo/cli channel set v2 --self-assignnpx @capgo/cli channel set v3 --self-assignLangkah 3: Unggah Paket Versi-Spesifik
Judul Bagian “Langkah 3: Unggah Paket Versi-Spesifik”# For v1.x users (from v1-maintenance branch)git checkout v1-maintenancenpm run buildnpx @capgo/cli bundle upload --channel production
# For v2.x users (from v2-maintenance or main branch)git checkout mainnpm run buildnpx @capgo/cli bundle upload --channel v2
# For v3.x users (from beta/v3 branch)git checkout betanpm run buildnpx @capgo/cli bundle upload --channel v3Manfaat
Judul Bagian “Manfaat”- Tidak perlu mengubah code - Routing kanal terjadi secara otomatis
- Pemisahan yang jelas - Setiap versi memiliki jalur pembaruan sendiri
- Target yang fleksibel - Sampaikan pembaruan ke kelompok versi tertentu
- Rollout yang aman - Perubahan yang mengganggu tidak akan mencapai versi yang tidak kompatibel
Strategi 2: Kontrol Versi Semantik
Judul Bagian “Strategi 2: Kontrol Versi Semantik”Gunakan Capgo’s built-in kontrol versi semantik untuk mencegah pembaruan di batas versi.
Mengaktifkan Auto-Update di Versi Utama
Judul Bagian: Mengaktifkan Auto-Update di Versi Utama# Create a channel that blocks major version updatesnpx @capgo/cli channel create stable --disable-auto-update majorKonfigurasi ini berarti:
- Pengguna pada versi aplikasi 1.2.3 akan menerima pembaruan hingga 1.9.9
- Pengguna akan TIDAK menerima versi 2.0.0 otomatis
- Mencegah perubahan yang mengganggu mencapai versi native code
- Penggunaan perbandingan menggunakan basis native yang dikirim sebagai
version_build
Opsi Kontrol Granular
Judul bagian “Opsi Kontrol Granular”# Block target bundles outside the native major.minor line (1.2.x won't get 1.3.0)npx @capgo/cli channel set stable --disable-auto-update minor
# Block target bundles outside the exact native MAJOR.MINOR.PATCH core (1.2.3 won't get 1.2.4)npx @capgo/cli channel set stable --disable-auto-update patch
# Allow all updatesnpx @capgo/cli channel set stable --disable-auto-update noneStrategi 3: Konstrain Versi Native
Bagian berjudul “Strategi 3: Konfigurasi Versi Native”Tentukan persyaratan versi native minimum untuk bundle untuk mencegah pengiriman ke perangkat yang tidak kompatibel.
Menggunakan kondisi penundaan nativeVersion
Bagian berjudul “Menggunakan kondisi penundaan nativeVersion”Ketika mengunggah bundle, Anda dapat menentukan versi native minimum:
# This bundle requires native version 2.0.0 or highernpx @capgo/cli bundle upload \ --channel production \ --native-version "2.0.0"Penggunaan
Bagian berjudul “Penggunaan”-
Plugin Native Baru Diperlukan
Jendela Terminal # Bundle needs Camera plugin added in v2.0.0npx @capgo/cli bundle upload --native-version "2.0.0" -
Perubahan Native API yang Mengganggu
Jendela Terminal # Bundle uses new Capacitor 6 APIsnpx @capgo/cli bundle upload --native-version "3.0.0" -
Migrasi Berkelanjutan
Jendela Terminal # Test bundle only on latest native versionnpx @capgo/cli bundle upload \--channel beta \--native-version "2.5.0"
Mencegah Auto-Downgrade dengan Strategi 4
Judul Bagian “Mencegah Auto-Downgrade dengan Strategi 4”Mencegah pengguna menerima paket yang lebih tua dari versi native mereka saat ini.
aktifkan di Pengaturan Saluran
Judul bagian “Aktifkan di Pengaturan Saluran”Pada dashboard Capgo:
- Pergi ke Saluran → Pilih saluran Anda
- Aktifkan “Nonaktifkan auto downgrade di native”
- Simpan perubahan
Atau melalui CLI:
npx @capgo/cli channel set production --disable-downgradeContoh
Judul Bagian “Contoh”- Perangkat pengguna: Versi asli 1.2.5
- Bundel saluran: Versi 1.2.3
- Hasil: Perbaruan diblokir (akan menjadi penurunan versi)
Hal ini berguna ketika:
- Pengguna secara manual menginstal versi yang lebih baru dari toko aplikasi
- Anda perlu memastikan pengguna selalu memiliki patch keamanan terbaru
- Anda ingin mencegah bug regresi
Strategi 5: Targeting Tingkat Perangkat
Judul Bagian “Strategi 5: Targeting Tingkat Perangkat”Atur saluran pengganti untuk perangkat tertentu atau kelompok pengguna.
Forcing Specific Version for Testing
Judul Bagian “Forcing Specific Version for Testing”import { CapacitorUpdater } from '@capgo/capacitor-updater'
// Force beta testers to use v3 channelasync function assignBetaTesters() { const deviceId = await CapacitorUpdater.getDeviceId()
// Check if user is beta tester if (isBetaTester(userId)) { await CapacitorUpdater.setChannel({ channel: 'v3' }) }}Dashboard Pengganti Perangkat
Judul Bagian “Dashboard Pengganti Perangkat”Di dashboard Capgo :
- Lihat Perangkat → Cari perangkat
- Klik Tetapkan Saluran atau Set Versi
- Override dengan saluran atau versi paket tertentu
- Peralatan akan menerima pembaruan dari sumber yang diubah
Alur Kerja Lengkap AppFlow-Style
Bab berjudul “Alur Kerja Lengkap AppFlow-Style”Contoh lengkap yang menggabungkan semua strategi:
1. Pengaturan Awal (Aplikasi v1.0.0)
Bab berjudul “1. Pengaturan Awal (Aplikasi v1.0.0)”# Create production channel with semver controlsnpx @capgo/cli channel create production \ --disable-auto-update major \ --disable-downgradeconst config: CapacitorConfig = { plugins: { CapacitorUpdater: { autoUpdate: 'atBackground', defaultChannel: 'production', } }};2. Perubahan Pemutakhiran (Aplikasi v2.0.0)
Judul Bagian “2. Perubahan Pemutakhiran (Aplikasi v2.0.0)”# Create v2 channel for new versionnpx @capgo/cli channel create v2 \ --disable-auto-update major \ --disable-downgrade \ --self-assign
# Create git branch for v1 maintenancegit checkout -b v1-maintenancegit push origin v1-maintenance// capacitor.config.ts for v2.0.0const config: CapacitorConfig = { plugins: { CapacitorUpdater: { autoUpdate: 'atBackground', defaultChannel: 'v2', // New users get v2 channel } }};3. Kirim Pembaruan ke Versi Dua
Judul Bagian “3. Kirim Pembaruan ke Versi Dua”# Update v1.x users (bug fix)git checkout v1-maintenance# Make changesnpx @capgo/cli bundle upload \ --channel production \ --native-version "1.0.0"
# Update v2.x users (new feature)git checkout main# Make changesnpx @capgo/cli bundle upload \ --channel v2 \ --native-version "2.0.0"4. Perbarui Distribusi Versi
Bab berjudul “4. Perbarui Distribusi Versi”Pakai dashboard Capgo untuk mengikuti:
- Banyak pengguna yang menggunakan v1 vs v2
- Rasio penggunaan bundel per versi
- Kerusakan atau crash per versi
5. Deprecate Versi Lama
Bab berjudul “5. Deprecate Versi Lama”Setelah penggunaan v1 turun di bawah ambang batas:
# Stop uploading to production channel# Optional: Delete v1 maintenance branchgit branch -d v1-maintenance
# Move all remaining users to default# (They'll need to update via app store)Prioritas Saluran
Judul Bagian “Prioritas Saluran”Ketika ada beberapa konfigurasi saluran yang ada, Capgo menggunakan urutan prioritas ini:
- Tetapkan Prioritas Perangkat (Dashboard atau API) - Prioritas tertinggi dan terlihat di UI Tetapkan Prioritas Perangkat
- Saluran Plugin Lokal via
setChannel()- Tersimpan di perangkat hanya dan tidak ditampilkan di UI Tetapkan Prioritas Perangkat - saluranDefault di capacitor.config.ts
- Saluran Default (Pengaturan Cloud) - Prioritas terendah
mengvalidasi saluran dengan backend, kemudian menyimpannya secara lokal di perangkat.
Praktik TerbaikBab berjudul “Praktik Terbaik”
1. Selalu Tetapkan defaultChannel untuk Versi Utama// ✅ Good: Each major version has explicit channel// v1.x → production// v2.x → v2// v3.x → v3
// ❌ Bad: Relying on dynamic channel switching// All versions → production, switch manually2. Gunakan Versi Semantik
Judul Bagian “2. Gunakan Versi Semantik”# ✅ Good1.0.0 → 1.0.1 → 1.1.0 → 2.0.0
# ❌ Bad1.0 → 1.1 → 2 → 2.53. Jaga Cabang Terpisah
Judul Bagian “3. Jaga Cabang Terpisah”# ✅ Good: Separate branches per major versionmain (v3.x)v2-maintenance (v2.x)v1-maintenance (v1.x)
# ❌ Bad: Single branch for all versions4. Uji Sebelum Diluncurkan
Judul Bagian “4. Uji Sebelum Diluncurkan”# Test on beta channel firstnpx @capgo/cli bundle upload --channel beta
# Monitor for issues, then promote to productionnpx @capgo/cli bundle upload --channel production5. Distribusi Versi
Judul Bagian “5. Distribusi Versi”Periksa dashboard Anda secara teratur:
- Apakah pengguna mengupgrade ke versi native yang lebih baru?
- Apakah versi lama masih mendapatkan lalu lintas yang tinggi?
- Apakah Anda harus menghentikan penggunaan saluran lama?
Perbandingan dengan Ionic AppFlow
Bagian Judul “Perbandingan dengan Ionic AppFlow”Untuk tim yang beralih dari Ionic AppFlowini adalah bagaimana Capgo membandingkan target versi:
| Fitur | AppFlow Ionic | Capgo |
|---|---|---|
| Pengaturan Routing Berdasarkan Versi | Otomatis berdasarkan versi native | Otomatis melalui defaultChannel + strategi multiple |
| Pengaturan Versi Semantik | Pengaturan Dasar | Dengan kemajuan --disable-auto-update (versi mayor/minor/patch) |
| Pengaturan Batasan Versi Native | Konfigurasi manual di dashboard AppFlow | Tersedia secara bawaan --native-version flag di CLI |
| Pengelolaan saluran | Web UI + CLI | Web UI + CLI + API |
| Pengaturan perangkat | Kontrol perangkat yang terbatas | Kontrol penuh melalui Dashboard/API |
| Pencegahan penurunan otomatis | Ya | Ya melalui __CAPGO_KEEP_0__ --disable-downgrade |
| Pemeliharaan multi-versi | Pengelolaan cabang/tujuan manual | Ditangani secara otomatis dengan prioritas tujuan |
| Penghosan sendiri | Tidak | Ya (pengendalian penuh) |
| Analitik versi | Dasar | Metrik per-versi yang rinci |
Pengaturan Masalah
Judul Bagian “Pengaturan Masalah”Pengguna Tidak Menerima Perbaruan
Judul Bagian “Pengguna Tidak Menerima Perbaruan”Periksa hal-hal berikut:
-
Penugasan Saluran: Pastikan perangkat berada pada saluran yang benar
const channel = await CapacitorUpdater.getChannel()console.log('Current channel:', channel) -
Keterbatasan Versi: Periksa apakah paket memiliki persyaratan versi native
- Dashboard → Paket → Periksa kolom
-
Pengaturan Semver: Periksa saluran
disable-auto-updateJendela TerminalSalin ke clipboard npx @capgo/cli channel list -
: Periksa apakah perangkat memiliki pengaturan manualDashboard → Perangkat → Cari perangkat → Periksa saluran/versi
- Paket Dikirimkan ke Versi yang Salah
Bagian berjudul
Ulas defaultChannel- Dashboard → Bundles → Periksa kolom “Versi Asli”Pastikan saluran yang benar
capacitor.config.ts - Pilih Upload BundlePastikan bundle telah diunggah ke saluran yang diinginkan
- Pilih Versi AsliKonfirmasi
--native-versionFlag digunakan dengan benar
Pembaharuan Mendasar yang Mengganggu Versi Lama
Bahwa Pembaharuan Mendasar yang Mengganggu Versi Lama- Pemecahan Jangka PendekUbah perangkat yang terpengaruh ke bundle yang aman
- Dashboard → Perangkat → Pilih banyak → Atur Versi
- Pemecahan Jangka PanjangBuat saluran yang versi dan menjaga cabang yang terpisah
- PencegahanSelalu tes pembaruan pada perangkat perwakilan sebelum peluncuran
Migrasi dari Ionic AppFlow
Bagian berjudul “Migrasi dari Ionic AppFlow”Jika Anda bermigrasi dari Ionic AppFlow, target versi bekerja sangat mirip di Capgo, dengan fleksibilitas yang diperbaiki:
Peta Konsep
Bagian berjudul “Peta Konsep”| Konsep AppFlow | Capgo Equivalent | Catatan |
|---|---|---|
| Saluran Deploy | Capgo Saluran | Konsep yang sama, lebih kuat |
| Versi Asli Lock | --native-version flag | Kontrol yang lebih halus |
| Prioritas Saluran | Prioritas Saluran (override → cloud → default) | Prioritas yang lebih transparan |
| Tujuan Pengiriman | Saluran + kontrol semver | Strategi yang tersedia secara beragam |
| Saluran Produksi | production saluran (atau nama apa saja) | Penamaan yang fleksibel |
| Pengembangan berbasis Git | CLI unggah bundle dari cabang | Alur kerja yang sama |
| Pembaruan otomatis yang sesuai | defaultChannel Konstrain versi yang lebih tinggi | Diperkuat dengan strategi yang beragam |
Perbedaan Utama bagi Pengguna AppFlow
Judul Bagian “Perbedaan Utama bagi Pengguna AppFlow”- Kontrol Lebih Baik: Capgo memberikan Anda beberapa strategi (saluran, semver, versi native) yang dapat digabungkan
- Kontrol Penuh: Dashboard menampilkan distribusi versi dan masalah kompatibilitas
- API Access: Kontrol penuh programatis atas target versi
- Penggunaan Sendiri: Opsi untuk menjalankan server pembaruan sendiri dengan logika versi yang sama
Langkah-Langkah Pemindahan
Bagian berjudul “Langkah-Langkah Pemindahan”- Tetapkan Saluran AppFlow Anda ke Capgo saluran (biasanya 1:1)
- Set
defaultChanneldalamcapacitor.config.tsuntuk setiap versi utama - Konfigurasi aturan semver jika Anda ingin pemblokiran otomatis di batas versi
- Unggah bundle spesifik versi menggunakan
--native-versionflag - Pantau distribusi versi dalam dashboard Capgo
Polanya Lanjutan
Bab berjudul “Polanya Lanjutan”Pengaktifan Berperingkat Berdasarkan Versi
Bab berjudul “Pengaktifan Berperingkat Berdasarkan Versi”// Gradually migrate v1 users to v2async function migrateUsers() { const deviceId = await CapacitorUpdater.getDeviceId() const rolloutPercentage = 10 // Start with 10%
// Hash device ID to get deterministic percentage const hash = hashCode(deviceId) % 100
if (hash < rolloutPercentage) { // User is in rollout group - migrate to v2 await CapacitorUpdater.setChannel({ channel: 'v2' }) }}Pengaturan Flag Fitur Berdasarkan Versi
Bab berjudul “Pengaturan Flag Fitur Berdasarkan Versi”// Enable features based on native versionasync function checkFeatureAvailability() { const info = await CapacitorUpdater.getDeviceId() const nativeVersion = info.nativeVersion
if (compareVersions(nativeVersion, '2.0.0') >= 0) { // Enable features requiring v2.0.0+ enableNewCameraFeature() }}Pengujian A/B di Antara Versi
Bab berjudul “Pengujian A/B di Antara Versi”// Run A/B tests within same native versionasync function assignABTest() { const nativeVersion = await getNativeVersion()
if (nativeVersion.startsWith('2.')) { // Only A/B test on v2 users const variant = Math.random() < 0.5 ? 'v2-test-a' : 'v2-test-b' await CapacitorUpdater.setChannel({ channel: variant }) }}Ringkasan
Bab berjudul “Ringkasan”Capgo menyediakan beberapa strategi untuk pengiriman update spesifik versi:
- Routing Berdasarkan Saluran: Pemisahan versi otomatis via
defaultChannel - Pengaturan Versi Semantik: Mencegah update di antara batasan mayor/minor/patch
- Pengaturan Versi Nativ: Membutuhkan versi native minimum untuk bundle
- Pencegahan Turun Versi Otomatis: Tidak pernah mengirim bundle yang lebih tua ke versi native yang lebih baru
- Pengaturan Perangkat: Pengaturan manual untuk pengujian dan targeting
Dengan menggabungkan strategi-strategi ini, Anda dapat mencapai pengiriman pembaruan otomatis AppFlow dengan fleksibilitas dan kontrol yang lebih banyak. Pilih strategi yang paling sesuai dengan alur versi dan pengiriman aplikasi Anda.
Untuk informasi lebih lanjut tentang fitur-fitur tertentu:
- Panduan Perubahan Mendasar - Strategi versi saluran yang rinci
- Pengelolaan Saluran - Referensi konfigurasi saluran yang lengkap
- Pengaturan Pembaruan - Penundaan dan kondisi versi native
Lanjutkan dari Targeting Versi
Bagian berjudul “Lanjutkan dari Targeting Versi”Jika Anda menggunakan Target Versi untuk merencanakan routing saluran dan peluncuran rolut, hubungkannya dengan Saluran untuk detail implementasi di Saluran, Saluran untuk detail implementasi di Saluran, Saluran untuk detail implementasi di Saluran, Solusi Pengujian Beta untuk alur produk di Solusi Pengujian Beta, dan Solusi Target Versi untuk alur produk dalam Solusi Targeting Versi.