Langsung ke konten

Targeting Versi

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.

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 dengan

Ionic 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

Capgo menggunakan metode multi-layered untuk mencocokkan pengguna dengan pembaruan yang kompatibel:

  1. Keterbatasan Versi NativeMencegah bundle dari dikirimkan ke versi native yang tidak kompatibel
  2. Rute Berdasarkan SaluranMencegah Update:
  3. Mengatur Versi SemantikMencegah Update:
  4. Mengatur Versi SemantikMengatur Versi Semantik

Mengatur Versi Semantik

Mengatur Versi Semantik
graph 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 Semantik

Ini 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 production Aplikasi v2.x
  • (50.000 pengguna dengan perubahan yang mengganggu) → saluran v2 Aplikasi v3.x
  • (50.000 pengguna dengan perubahan yang mengganggu dan pembaruan versi utama) → (10.000 pengguna beta) → v3 saluran

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 builds
import { 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 builds
const 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 builds
const config: CapacitorConfig = {
appId: 'com.example.app',
appName: 'Example App',
plugins: {
CapacitorUpdater: {
autoUpdate: 'atBackground',
defaultChannel: 'v3', // Routes v3 users automatically
}
}
};
Jendela terminal
# Create channels for each major version
npx @capgo/cli channel create production
npx @capgo/cli channel create v2
npx @capgo/cli channel create v3
# Enable self-assignment so apps can switch channels
npx @capgo/cli channel set production --self-assign
npx @capgo/cli channel set v2 --self-assign
npx @capgo/cli channel set v3 --self-assign

Langkah 3: Unggah Paket Versi-Spesifik

Judul Bagian “Langkah 3: Unggah Paket Versi-Spesifik”
Jendela Terminal
# For v1.x users (from v1-maintenance branch)
git checkout v1-maintenance
npm run build
npx @capgo/cli bundle upload --channel production
# For v2.x users (from v2-maintenance or main branch)
git checkout main
npm run build
npx @capgo/cli bundle upload --channel v2
# For v3.x users (from beta/v3 branch)
git checkout beta
npm run build
npx @capgo/cli bundle upload --channel v3
  • 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

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
Jendela Terminal
# Create a channel that blocks major version updates
npx @capgo/cli channel create stable --disable-auto-update major

Konfigurasi 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
Jendela Terminal
# 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 updates
npx @capgo/cli channel set stable --disable-auto-update none

Tentukan persyaratan versi native minimum untuk bundle untuk mencegah pengiriman ke perangkat yang tidak kompatibel.

Ketika mengunggah bundle, Anda dapat menentukan versi native minimum:

Jendela terminal
# This bundle requires native version 2.0.0 or higher
npx @capgo/cli bundle upload \
--channel production \
--native-version "2.0.0"
  1. Plugin Native Baru Diperlukan

    Jendela Terminal
    # Bundle needs Camera plugin added in v2.0.0
    npx @capgo/cli bundle upload --native-version "2.0.0"
  2. Perubahan Native API yang Mengganggu

    Jendela Terminal
    # Bundle uses new Capacitor 6 APIs
    npx @capgo/cli bundle upload --native-version "3.0.0"
  3. Migrasi Berkelanjutan

    Jendela Terminal
    # Test bundle only on latest native version
    npx @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.

Pada dashboard Capgo:

  1. Pergi ke Saluran → Pilih saluran Anda
  2. Aktifkan “Nonaktifkan auto downgrade di native”
  3. Simpan perubahan

Atau melalui CLI:

Tampilan terminal
npx @capgo/cli channel set production --disable-downgrade
  • 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.

import { CapacitorUpdater } from '@capgo/capacitor-updater'
// Force beta testers to use v3 channel
async function assignBetaTesters() {
const deviceId = await CapacitorUpdater.getDeviceId()
// Check if user is beta tester
if (isBetaTester(userId)) {
await CapacitorUpdater.setChannel({ channel: 'v3' })
}
}

Di dashboard Capgo :

  1. Lihat Perangkat → Cari perangkat
  2. Klik Tetapkan Saluran atau Set Versi
  3. Override dengan saluran atau versi paket tertentu
  4. Peralatan akan menerima pembaruan dari sumber yang diubah

Contoh lengkap yang menggabungkan semua strategi:

Jendela terminal
# Create production channel with semver controls
npx @capgo/cli channel create production \
--disable-auto-update major \
--disable-downgrade
capacitor.config.ts
const config: CapacitorConfig = {
plugins: {
CapacitorUpdater: {
autoUpdate: 'atBackground',
defaultChannel: 'production',
}
}
};

2. Perubahan Pemutakhiran (Aplikasi v2.0.0)

Judul Bagian “2. Perubahan Pemutakhiran (Aplikasi v2.0.0)”
Jendela terminal
# Create v2 channel for new version
npx @capgo/cli channel create v2 \
--disable-auto-update major \
--disable-downgrade \
--self-assign
# Create git branch for v1 maintenance
git checkout -b v1-maintenance
git push origin v1-maintenance
// capacitor.config.ts for v2.0.0
const config: CapacitorConfig = {
plugins: {
CapacitorUpdater: {
autoUpdate: 'atBackground',
defaultChannel: 'v2', // New users get v2 channel
}
}
};
Jendela terminal
# Update v1.x users (bug fix)
git checkout v1-maintenance
# Make changes
npx @capgo/cli bundle upload \
--channel production \
--native-version "1.0.0"
# Update v2.x users (new feature)
git checkout main
# Make changes
npx @capgo/cli bundle upload \
--channel v2 \
--native-version "2.0.0"

Pakai dashboard Capgo untuk mengikuti:

  • Banyak pengguna yang menggunakan v1 vs v2
  • Rasio penggunaan bundel per versi
  • Kerusakan atau crash per versi

Setelah penggunaan v1 turun di bawah ambang batas:

Jendela terminal
# Stop uploading to production channel
# Optional: Delete v1 maintenance branch
git branch -d v1-maintenance
# Move all remaining users to default
# (They'll need to update via app store)

Ketika ada beberapa konfigurasi saluran yang ada, Capgo menggunakan urutan prioritas ini:

  1. Tetapkan Prioritas Perangkat (Dashboard atau API) - Prioritas tertinggi dan terlihat di UI Tetapkan Prioritas Perangkat
  2. Saluran Plugin Lokal via setChannel() - Tersimpan di perangkat hanya dan tidak ditampilkan di UI Tetapkan Prioritas Perangkat
  3. saluranDefault di capacitor.config.ts
  4. Saluran Default (Pengaturan Cloud) - Prioritas terendah

mengvalidasi saluran dengan backend, kemudian menyimpannya secara lokal di perangkat.

Praktik Terbaik

Bab 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 manually
Jendela Terminal
# ✅ Good
1.0.0 1.0.1 1.1.0 2.0.0
# ❌ Bad
1.0 1.1 2 2.5
Jendela Terminal
# ✅ Good: Separate branches per major version
main (v3.x)
v2-maintenance (v2.x)
v1-maintenance (v1.x)
# ❌ Bad: Single branch for all versions
Jendela Terminal
# Test on beta channel first
npx @capgo/cli bundle upload --channel beta
# Monitor for issues, then promote to production
npx @capgo/cli bundle upload --channel production

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?

Untuk tim yang beralih dari Ionic AppFlowini adalah bagaimana Capgo membandingkan target versi:

FiturAppFlow IonicCapgo
Pengaturan Routing Berdasarkan VersiOtomatis berdasarkan versi nativeOtomatis melalui defaultChannel + strategi multiple
Pengaturan Versi SemantikPengaturan DasarDengan kemajuan --disable-auto-update (versi mayor/minor/patch)
Pengaturan Batasan Versi NativeKonfigurasi manual di dashboard AppFlowTersedia secara bawaan --native-version flag di CLI
Pengelolaan saluranWeb UI + CLIWeb UI + CLI + API
Pengaturan perangkatKontrol perangkat yang terbatasKontrol penuh melalui Dashboard/API
Pencegahan penurunan otomatisYaYa melalui __CAPGO_KEEP_0__ --disable-downgrade
Pemeliharaan multi-versiPengelolaan cabang/tujuan manualDitangani secara otomatis dengan prioritas tujuan
Penghosan sendiriTidakYa (pengendalian penuh)
Analitik versiDasarMetrik per-versi yang rinci

Periksa hal-hal berikut:

  1. Penugasan Saluran: Pastikan perangkat berada pada saluran yang benar

    const channel = await CapacitorUpdater.getChannel()
    console.log('Current channel:', channel)
  2. Keterbatasan Versi: Periksa apakah paket memiliki persyaratan versi native

    • Dashboard → Paket → Periksa kolom
  3. Pengaturan Semver: Periksa saluran disable-auto-update Jendela Terminal

    Salin ke clipboard
    npx @capgo/cli channel list
  4. : Periksa apakah perangkat memiliki pengaturan manualDashboard → Perangkat → Cari perangkat → Periksa saluran/versi

    • Paket Dikirimkan ke Versi yang Salah

Bagian berjudul

Ulas defaultChannel
  1. Dashboard → Bundles → Periksa kolom “Versi Asli”Pastikan saluran yang benar capacitor.config.ts
  2. Pilih Upload BundlePastikan bundle telah diunggah ke saluran yang diinginkan
  3. Pilih Versi AsliKonfirmasi --native-version Flag digunakan dengan benar

Pembaharuan Mendasar yang Mengganggu Versi Lama

Bahwa Pembaharuan Mendasar yang Mengganggu Versi Lama
  1. Pemecahan Jangka PendekUbah perangkat yang terpengaruh ke bundle yang aman
    • Dashboard → Perangkat → Pilih banyak → Atur Versi
  2. Pemecahan Jangka PanjangBuat saluran yang versi dan menjaga cabang yang terpisah
  3. PencegahanSelalu tes pembaruan pada perangkat perwakilan sebelum peluncuran

Jika Anda bermigrasi dari Ionic AppFlow, target versi bekerja sangat mirip di Capgo, dengan fleksibilitas yang diperbaiki:

Konsep AppFlowCapgo EquivalentCatatan
Saluran DeployCapgo SaluranKonsep yang sama, lebih kuat
Versi Asli Lock--native-version flagKontrol yang lebih halus
Prioritas SaluranPrioritas Saluran (override → cloud → default)Prioritas yang lebih transparan
Tujuan PengirimanSaluran + kontrol semverStrategi yang tersedia secara beragam
Saluran Produksiproduction saluran (atau nama apa saja)Penamaan yang fleksibel
Pengembangan berbasis GitCLI unggah bundle dari cabangAlur kerja yang sama
Pembaruan otomatis yang sesuaidefaultChannel Konstrain versi yang lebih tinggiDiperkuat dengan strategi yang beragam
  1. Kontrol Lebih Baik: Capgo memberikan Anda beberapa strategi (saluran, semver, versi native) yang dapat digabungkan
  2. Kontrol Penuh: Dashboard menampilkan distribusi versi dan masalah kompatibilitas
  3. API Access: Kontrol penuh programatis atas target versi
  4. Penggunaan Sendiri: Opsi untuk menjalankan server pembaruan sendiri dengan logika versi yang sama
  1. Tetapkan Saluran AppFlow Anda ke Capgo saluran (biasanya 1:1)
  2. Set defaultChannel dalam capacitor.config.ts untuk setiap versi utama
  3. Konfigurasi aturan semver jika Anda ingin pemblokiran otomatis di batas versi
  4. Unggah bundle spesifik versi menggunakan --native-version flag
  5. Pantau distribusi versi dalam dashboard Capgo

Pengaktifan Berperingkat Berdasarkan Versi

Bab berjudul “Pengaktifan Berperingkat Berdasarkan Versi”
// Gradually migrate v1 users to v2
async 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 version
async 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()
}
}
// Run A/B tests within same native version
async 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 })
}
}

Capgo menyediakan beberapa strategi untuk pengiriman update spesifik versi:

  1. Routing Berdasarkan Saluran: Pemisahan versi otomatis via defaultChannel
  2. Pengaturan Versi Semantik: Mencegah update di antara batasan mayor/minor/patch
  3. Pengaturan Versi Nativ: Membutuhkan versi native minimum untuk bundle
  4. Pencegahan Turun Versi Otomatis: Tidak pernah mengirim bundle yang lebih tua ke versi native yang lebih baru
  5. 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:

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.