Targeting Versi
Copas 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.
Ringkasan
Bab berjudul “Ringkasan”Sistem target versi Capgo memungkinkan Anda:
- Mengirimkan update yang kompatibel secara otomatis ke pengguna berdasarkan versi aplikasi native mereka
- Mencegah perubahan yang memecah dari mencapai versi aplikasi yang tidak kompatibel
- Kelola versi aplikasi yang berbeda secara bersamaan tanpa logika kompleks
- Dapatkan pembaruan yang halus ke segmen pengguna tertentu
Mengapa Targeting Versi Penting (Terutama untuk Pengguna AppFlow)
Judul bagian “Mengapa Targeting Versi Penting (Terutama untuk Pengguna AppFlow)”Jika Anda familiar dengan Ionic AppFlow, Anda tahu betapa pentingnya untuk memastikan pengguna hanya menerima pembaruan yang kompatibel. AppFlow secara otomatis memasangkan paket pembaruan hidup ke versi aplikasi native, mencegah JavaScript yang tidak kompatibel dari disampaikan ke aplikasi native yang lebih tua code.
Capgo menyediakan jaminan keamanan yang samabersama fitur tambahan:
- Pengendalian yang lebih halus atas matching versi
- Strategi yang lebih dari satu (saluran, semver, konstrain native)
- Keterlihatan yang lebih baik atas distribusi versi
- API dan CLI pengendalian bersama dengan manajemen dashboard
Metode ini sangat berguna ketika:
- Anda memiliki pengguna pada versi mayor yang berbeda dari aplikasi Anda (misalnya, v1.x, v2.x, v3.x)
- Anda perlu mempertahankan konsistensi ke belakang sambil mengeluarkan perubahan yang memecah
- Anda ingin mencegah bundle yang lebih baru memecahkan native code yang lebih tua
- Anda sedang melakukan migrasi pengguna secara bertahap dari satu versi ke versi lain
- Anda sedang melakukan migrasi dari AppFlow dan ingin mempertahankan keamanan update yang sama
How It Works
Bagaimana Cara KerjanyaCapgo menggunakan pendekatan multi-layered untuk memasangkan pengguna dengan pembaruan yang kompatibel:
- Keterbatasan Versi Asli: Mencegah bundle dari dikirimkan ke versi native yang tidak kompatibel
- Pengaturan Rute Berdasarkan Saluran: Mengarahkan versi aplikasi yang berbeda ke saluran pembaruan yang berbeda
- Pengendalian Kontrol Versi Semantik: Otomatis mengblokir pembaruan di batas major/minor/patch
- Penyesuaian Tingkat Perangkat: Mengarahkan perangkat atau kelompok pengguna tertentu
Alur Pembaruan yang Sesuai
Alur Pemadanan Versigraph 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]Strategi 1: Rute Versi Berdasarkan Saluran
Bagian berjudul “Strategi 1: Rute Versi Berdasarkan Saluran”Ini adalah pendekatan yang dianjurkan
untuk mengelola perubahan yang memecah dan pembaruan versi utama. Ini mirip dengan model pengiriman AppFlow.
Skenario Contoh- Bagian berjudul “Skenario Contoh” Aplikasi v1.x
production(100.000 pengguna) → - Aplikasi v2.x (50.000 pengguna dengan perubahan besar) →
v2saluran - Aplikasi v3.x (10.000 pengguna beta) →
v3saluran
Bab 1: Konfigurasi Saluran untuk Setiap Versi Utama
Salin ke clipboard// 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 v3Kelebihan
Judul bagian “Kelebihan”- Nol code perubahan - Routing kanal terjadi secara otomatis
- Pemisahan yang jelas - Setiap versi memiliki jalur update sendiri
- Target yang fleksibel - Push update ke kelompok versi tertentu
- Rollout yang aman - Perubahan yang memecah tidak mencapai versi yang tidak kompatibel
Strategi 2: Pengendalian Versi Semantik
Bagian berjudul “Strategi 2: Pengendalian Versi Semantis”Gunakan Capgo’s built-in pengendalian versi semantis untuk mencegah pembaruan di batas versi.
Matikan Pembaruan Otomatis di Versi Utama
Bagian berjudul “Matikan Pembaruan Otomatis di Versi Utama”# Create a channel that blocks major version updatesnpx @capgo/cli channel create stable --disable-auto-update majorKonfigurasi ini berarti:
- Pengguna di 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 dari mencapai native code yang lebih tua
- Perbandingan menggunakan basis native yang dikirim sebagai
version_build
Opsi Kontrol yang Granular
Judul bagian “Opsi Kontrol yang 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 Asli
Judul Bagian “Strategi 3: Konstrain Versi Asli”Spesifikkan persyaratan versi asli minimum untuk bundle untuk mencegah pengiriman ke perangkat yang tidak kompatibel.
Menggunakan kondisi delay nativeVersion
Judul Bagian “Menggunakan kondisi delay nativeVersion”Saat mengunggah bundle, Anda dapat spesifikkan versi asli 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”-
Diperlukan Plugin Native Baru
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 Berangsur-angsurnya
Jendela terminal # Test bundle only on latest native versionnpx @capgo/cli bundle upload \--channel beta \--native-version "2.5.0"
Strategi 4: Pencegahan Downgrade Otomatis
Judul Bagian “Strategi 4: Pencegahan Downgrade Otomatis”Hindari pengguna menerima bundle yang lebih tua dari versi native mereka saat ini.
Aktifkan di Pengaturan Saluran
Judul Bagian “Aktifkan di Pengaturan Saluran”Di dashboard Capgo :
- Pergi ke Saluran → Pilih saluran Anda
- Aktifkan “Nonaktifkan downgrade otomatis di native”
- Simpan perubahan
Atau melalui CLI:
npx @capgo/cli channel set production --disable-downgradeContoh
Bab berjudul “Contoh”- Peralatan pengguna: Versi asli 1.2.5
- Saluran bundle: Versi 1.2.3
- Hasil: Perbaruan diblokir (akan menjadi penurunan versi)
Hal ini berguna ketika:
- Pengguna menginstal versi yang lebih baru secara manual dari toko aplikasi
- Anda harus memastikan pengguna selalu memiliki patch keamanan terbaru
- Anda ingin mencegah bug regresi
Strategi 5: Targeting Level Perangkat
Judul Bagian “Strategi 5: Targeting Level Perangkat”Tetapkan pengaturan saluran untuk perangkat atau kelompok pengguna tertentu.
Tetapkan Versi Spesifik untuk Pengujian
Judul Bagian “Tetapkan Versi Spesifik untuk Pengujian”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 Pengaturan Perangkat
Judul Bagian “Dashboard Pengaturan Perangkat”Di dashboard Capgo :
- Pergi ke Perangkat → Cari perangkat
- Klik Tetapkan Saluran atau Tetapkan Versi
- Tetapkan saluran atau versi paket tertentu
- Perangkat akan menerima pembaruan dari sumber yang diubah
Selesai AppFlow-Style Workflow
Bagian berjudul “Alur Kerja AppFlow-Style yang Lengkap”Contoh lengkap yang menggabungkan semua strategi ini:
1. Pengaturan Awal (App v1.0.0)
Bagian berjudul “1. Pengaturan Awal (App 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. Rilis Perubahan Break (App v2.0.0)
Bagian berjudul “2. Rilis Perubahan Break (App 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. Pushkan Perbaruan ke Versi Kedua
Bab berjudul “3. Pushkan Perbaruan ke Versi Kedua”# 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. Pantau Distribusi Versi
Bab berjudul “4. Pantau Distribusi Versi”Gunakan dashboard Capgo untuk melacak:
- Banyaknya pengguna pada v1 vs v2
- Rasio penggunaan bundle per versi
- Kerusakan atau crash per versi
5. Deprecate Versi Lama
Bagian berjudul “5. Menghentikan 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
Bagian berjudul “Prioritas Saluran”Jika ada beberapa konfigurasi saluran yang ada, Capgo menggunakan urutan prioritas berikut:
- Override Perangkat (Dashboard atau API) - Prioritas tertinggi dan terlihat di UI Override Perangkat
- Saluran Plugin Lokal via
setChannel()- Disimpan di perangkat hanya dan tidak ditampilkan di UI Override Perangkat - Saluran Default di capacitor.config.ts
- Saluran Default (Pengaturan Cloud) - Prioritas Terendah
Praktik Terbaik
Judul Bagian “Praktik Terbaik”1. Selalu Tetapkan defaultChannel untuk Versi Utama
Judul Bagian “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. Tes Sebelum Rilis
Judul Bagian “4. Tes Sebelum Rilis”# Test on beta channel firstnpx @capgo/cli bundle upload --channel beta
# Monitor for issues, then promote to productionnpx @capgo/cli bundle upload --channel production5. Pantau Distribusi Versi
Judul Bagian “5. Pantau 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 berjudul “Perbandingan dengan Ionic AppFlow”Untuk tim yang bermigrasi dari Ionic AppFlow, berikut ini adalah cara Capgo’s versi target membandingkan:
| Fitur | Ionic AppFlow | Capgo |
|---|---|---|
| Pengaturan routing berdasarkan versi | Otomi berdasarkan versi native | Otomi melalui defaultChannel + beberapa strategi |
| Pengaturan versi semantik | Dukungan dasar | Maju dengan --disable-auto-update (major/minor/patch) |
| Keterbatasan versi native | Konfigurasi manual di dashboard AppFlow | Dibangun secara internal --native-version flag di CLI |
| Pengelolaan saluran | UI Web + CLI | UI Web + CLI + API |
| Pengaturan perangkat | Kontrol perangkat yang terbatas | Kontrol penuh melalui Dashboard/API |
| Pencegahan downgrade otomatis | Ya | Ya melalui --disable-downgrade |
| Pemeliharaan multi-versi | Pengelolaan cabang/tujuan manual | Otomatis dengan keutamaan saluran |
| Penghosan sendiri | Tidak | Ya (kontrol penuh) |
| Analitik versi | Dasar | Metrik-metrik per-versi yang rinci |
Pengaturan
Bagian berjudul “Pengaturan”Pengguna Tidak Menerima Perbaruan
Bagian berjudul “Pengguna Tidak Menerima Perbaruan”Periksa hal-hal berikut:
-
Penugasan Saluran: Periksa apakah perangkat berada di 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 “Versi Native”
-
Pengaturan Semver: Periksa pengaturan
disable-auto-updatesaluranJendela terminal npx @capgo/cli channel list -
Override Perangkat: Periksa apakah perangkat memiliki override manual
- Dashboard → Perangkat → Cari perangkat → Periksa saluran/versi
Bundle Diterima ke Versi yang Salah
Bagian berjudul “Bundle Diterima ke Versi yang Salah”- Review defaultChannelPastikan saluran yang benar di
capacitor.config.ts - Periksa Unggah Bundle: Verifikasi apakah bundle telah diunggah ke saluran yang dimaksud
- Periksa Versi Asli: Konfirmasi
--native-versionflag yang digunakan dengan benar
Perubahan yang Mengganggu Versi Lama
Bagian berjudul “Perubahan yang Mengganggu Versi Lama”- Pembaruan Langsung: Mengatur ulang perangkat yang terkena dampak ke bundle aman
- Dashboard → Perangkat → Pilih perangkat secara massal → Atur Versi
- Pembaruan Jangka Panjang: Membuat saluran versi dan menjaga cabang yang terpisah
- Pencegahan: Selalu tes pembaruan pada perangkat perwakilan sebelum peluncuran
Migrasi dari Ionic AppFlow
Jika Anda bermigrasi dariIonic AppFlow , target versi bekerja sangat mirip di __CAPGO_KEEP_0__, dengan fleksibilitas yang ditingkatkan: , version targeting works very similarly in Capgo, with improved flexibility:
Peta Konsep
Peta Konsep yang Berjudul “Peta Konsep”| Alur Aplikasi Konsep | Sama dengan Capgo | Catatan |
|---|---|---|
| Saluran Deploy | Saluran Capgo | Konsep yang sama, lebih kuat |
| Mengunci Versi Asli | --native-version Bendera | Kontrol yang lebih rinci |
| Prioritas Saluran | Prioritas saluran (override → cloud → default) | Prioritas lebih transparan |
| Target Pengiriman | Saluran + semver mengontrol | Banyak strategi tersedia |
| Saluran Produksi | production saluran (atau nama apa saja) | Penamaan fleksibel |
| Pengiriman berbasis Git | CLI unggah bundle dari cabang | Alur kerja yang sama |
| Pencocokan versi otomatis | defaultChannel + batasan versi | Diperkuat dengan strategi yang berbeda-beda |
Perbedaan Utama untuk Pengguna AppFlow
Bagian berjudul “Perbedaan Utama untuk Pengguna AppFlow”- Kontrol yang Lebih Baik: Capgo memberikan Anda strategi yang berbeda-beda (saluran, semver, versi native) yang dapat digabungkan
- Keterlihatan yang Lebih Baik: Dashboard menampilkan distribusi versi dan masalah kompatibilitas
- API Akses: Kontrol penuh programatis atas target versi
- Self-Hosting: Option untuk menjalankan server pembaruan sendiri dengan logika versi yang sama
Langkah Migrasi
Judul Bagian “Langkah Migrasi”- Peta saluran AppFlow Anda ke Capgo saluran (biasanya 1:1)
- Set
defaultChanneldalamcapacitor.config.tsuntuk setiap versi utama - Konfigurasi aturan semver jika Anda ingin blokir otomatis di batas versi
- Unggah bundle khusus versi menggunakan
--native-versionflag - Peta Distribusi Versi dalam Capgo dashboard
Polanya Lanjutan
Bab berjudul “Polanya Lanjutan”Pengeluaran Perlahan oleh Versi
Bab berjudul “Pengeluaran Perlahan oleh 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' }) }}Bendera Fitur oleh Versi
Pengaturan Flag Fitur oleh 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
Pengaturan Titled “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
Pengaturan Titled “Ringkasan”Capgo menyediakan beberapa strategi untuk pengiriman pembaruan versi spesifik:
- Rute Berdasarkan Saluran: Pemisahan versi otomatis via
defaultChannel - : Mencegah pembaruan di batas major/minor/patchChannel-Based Routing: Automatic version separation via Channel-Based Routing, Semantic Versioning: Prevent updates across major/minor/patch boundaries
- Konfigurasi Versi Asli: Memerlukan versi native minimum untuk bundle
- Pencegahan Penurunan Otomatis: Tidak pernah mengirim bundle yang lebih tua ke versi native yang lebih baru
- Pengaturan Perangkat: Kontrol manual untuk pengujian dan targeting
Dengan menggabungkan strategi-strategi ini, Anda dapat mencapai pengiriman update otomatis AppFlow-style dengan fleksibilitas dan kontrol yang lebih banyak. Pilihlah pendekatan yang paling sesuai dengan alur versi dan pengiriman aplikasi Anda.
Untuk informasi lebih lanjut tentang fitur-fitur tertentu:
- Petunjuk Perubahan Kritis - Strategi versi saluran rinci
- Pengelolaan Saluran - Referensi konfigurasi saluran lengkap
- Perbarui Sifat - Versi asli menunda dan kondisi
Teruskan dari Targeting Versi
Judul Bagian “Teruskan dari Targeting Versi”Jika Anda menggunakan Targeting Versi untuk merencanakan routing saluran dan peluncuran tahap demi tahap, hubungkannya dengan Saluran untuk detail implementasi di Saluran, Saluran untuk detail implementasi di Saluran, Saluran untuk detail implementasi di Channels, Solusi Pengujian Beta untuk alur kerja produk di Solusi Pengujian Beta, dan Solusi Target Versi untuk alur kerja produk di Solusi Target Versi.