Mengerti Pembaruan Langsung di Capgo
Pembaruan langsung adalah salah satu fitur paling kuat di aplikasi Capacitor, memungkinkan pembaruan waktu nyata tanpa pengajuan ke toko aplikasi. Mari kita telusuri mendalam bagaimana Capgo menerapkan fungsi ini.
Konsep Dasar
Aplikasi Capacitor terdiri dari dua lapisan utama:
- Layer Web: Mengandung file HTML, CSS, dan JavaScript yang dimuat dalam WebView
- Layer Native: Mengandung kode code yang spesifik platform (Java/Kotlin untuk Android, Swift untuk iOS)
Capgo’s sistem pembaruan waktu nyata bekerja dengan mengganti layer web pada waktu runtime, karena file-file ini tidak dikompilasi ke dalam file biner aplikasi.
Implementasi Teknis
Jalur Server di Capacitor
Capgo mengelola dua jalur kritis:
- Jalur Server Saat Ini: Menunjuk ke file yang saat ini dimuat dalam WebView
- Jalur Server Berikutnya: Menunjuk ke file yang akan dimuat pada restart aplikasi berikutnya
Implementasi Android
Pada Android, Capgo mengelola jalur melalui:
// Store next server path
private void setNextCapacitorServerPath(String path) {
SharedPreferences prefs = context.getSharedPreferences("CapWebViewSettings", Activity.MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();
editor.putString("serverBasePath", path);
editor.apply();
}
// Update current path and reload
private void setCurrentCapacitorServerPath(String path) {
bridge.setServerBasePath(path);
bridge.reload();
}
Implementasi iOS
Pada iOS, jalur dielola melalui:
// Store next server path
private func setNextCapacitorServerPath(path: String) {
KeyValueStore.standard["serverBasePath"] = path
}
// Update current path
private func setCurrentCapacitorServerPath(path: String) {
bridge.viewController.setServerBasePath(path: path)
}
Langkah-Langkah Keamanan
Capgo menerapkan keamanan militer melalui enkripsi end-to-end, memastikan pembaruan aplikasi tetap sepenuhnya aman dari pengembangan hingga pengembangan. Sistem enkripsi kami melampaui tanda tangan tradisional code untuk menyediakan keamanan nol pengetahuan yang benar.
Arsitektur Enkripsi End-to-End
-
Enkripsi End-to-End (E2EE): Setiap paket pembaruan dienkripsi menggunakan enkripsi AES-256-GCM sebelum meninggalkan lingkungan pengembangan. Enkripsi militer ini memastikan bahwa pembaruan aplikasi tetap sepenuhnya pribadi dan aman selama proses pengiriman.
-
Arsitektur Nol Pengetahuan: Seperti solusi pembaruan OTA lainnya yang hanya menandatangani pembaruan, Capgo menggunakan enkripsi zero-knowledge yang sebenarnya. Ini berarti:
- Isi pembaruan dienkripsi sebelum diunggah
- Capgo server hanya menyimpan data yang dienkripsi
- Penguraian hanya terjadi pada perangkat pengguna akhir
- Tidak ada perantara yang dapat mengakses konten pembaruan Anda
-
Manajemen Kunci Pribadi:
- Kunci enkripsi dihasilkan dan disimpan dengan aman di lingkungan CI/CD Anda
- Kunci pribadi tidak pernah menyentuh server Capgo
- Setiap versi aplikasi dapat menggunakan kunci enkripsi unik
- Dukungan rotasi kunci untuk meningkatkan keamanan
Pelajari lebih lanjut tentang sistem enkripsi kami di panduan rinci kami: Enkripsi End-to-End di Capgo Live Updates
Proses Keamanan Update
-
Enkripsi Sebelum Mengunggah:
- Update dienkripsi dalam pipeline CI/CD Anda
- Setiap file dienkripsi secara individu
- Metadata juga dienkripsi untuk privasi yang lengkap
-
Penyimpanan Aman:
- Bundel yang dienkripsi disimpan di CDN global Capgo
- Tidak ada data teks biasa yang pernah menyentuh server kami
- Bahkan dalam kasus serangan server, data tetap aman
-
Pengiriman Aman:
- Update dikirim melalui saluran yang dienkripsi
- Setiap instance aplikasi memvalidasi integritas enkripsi
- Mekanisme ulang coba otomatis untuk dekripsi gagal
-
Keamanan Sisi Klien:
- Perbaruan diverifikasi sebelum instalasi
- Dekripsi gagal mengaktifkan ulang balik otomatis
- Penyimpanan kunci yang aman di penyimpanan terlindungi aplikasi
Pendekatan keamanan ini menyeluruh memastikan bahwa perbaruan aplikasi Anda tetap dilindungi dari:
- Serangan orang di tengah
- Bocoran sisi server
- Modifikasi tidak berwenang
- Serangan ulang
- Pengacakan konten
Lifecyle Perbaruan
Capgo’s proses pembaruan dirancang untuk otomatis secara default. Berikut cara kerja proses otomatis:
1. Periksa Update Otomatis
Plugin ini secara otomatis memeriksa pembaruan dalam situasi-situasi berikut:
- Ketika aplikasi dimulai
Sikap ini dikendalikan oleh pengaturan: autoUpdate Anda juga dapat memeriksa secara manual dengan menggunakan
// capacitor.config.json
{
"plugins": {
"CapacitorUpdater": {
"autoUpdate": true // Enable automatic updates
}
}
}
2. Download Otomatis getLatest()
Ketika versi baru terdeteksi, jika
dihubungkan: autoUpdate Download dimulai secara otomatis
- Progress diikuti secara internal
- Download dimulai secara otomatis
- Pengunduhan otomatis ulang setiap aplikasi dibuka
- Pengunduhan sukses disimpan di penyimpanan aplikasi
Anda dapat memantau proses ini melalui event:
CapacitorUpdater.addListener('download', (info: DownloadEvent) => {
console.log('Auto-download progress:', info.percent);
});
CapacitorUpdater.addListener('downloadComplete', (info: DownloadCompleteEvent) => {
console.log('Auto-download complete:', info.bundle);
});
3. Instalasi Otomatis
Waktu instalasi tergantung pada konfigurasi Anda:
// capacitor.config.json
{
"plugins": {
"CapacitorUpdater": {
"autoUpdate": true,
"directUpdate": false // install update on app backgrounding
"resetWhenUpdate": true, // reset live updates on native update (true by default)
"autoDeleteFailed": true, // Auto cleanup failed updates (true by default)
"autoDeletePrevious": true // Auto cleanup old versions (true by default)
}
}
}
Instalasi terjadi:
- Sekarang jika
directUpdateis true - Pada latar belakang aplikasi berikutnya jika
directUpdateis false - Rollback otomatis jika instalasi gagal
Plugin ini juga secara otomatis mengelola penyimpanan:
- Menghapus update gagal jika
autoDeleteFailedbenar - Membersihkan versi lama jika
autoDeletePreviousbenar
Mengundurkan Update
Anda dapat mengontrol kapan update diinstal menggunakan kondisi penundaan:
// Delay until app goes to background
await CapacitorUpdater.setDelay({
kind: 'background'
});
// Delay until specific date
await CapacitorUpdater.setDelay({
kind: 'date',
value: '2024-03-20T10:00:00.000Z'
});
// Delay until next native version
await CapacitorUpdater.setDelay({
kind: 'nativeVersion'
});
// Multiple conditions
await CapacitorUpdater.setMultiDelay({
delayConditions: [
{
kind: 'background'
},
{
kind: 'date',
value: '2024-03-20T10:00:00.000Z'
}
]
});
Kondisi penundaan yang tersedia:
- latar belakang: Instal ketika aplikasi pergi ke latar belakang
- tanggal: Instal setelah tanggal/tangga spesifik
- versi native: Instal setelah pembaruan asli berikutnya
- kill: Instal setelah aplikasi dibunuh
Ini berguna untuk:
- Mengatur pembaruan selama jam-jam sibuk
- Mengkoordinasikan pembaruan dengan aktivitas pengguna
- Menjamin pengalaman pembaruan yang lancar
- Mencegah gangguan selama tugas kritis
Status Pembaruan
Selama proses otomatis, bundle bertransisi melalui status-status berikut:
- mengunduh: Mengunduh dalam proses
- menunggu: Download selesai, menunggu instalasi
- sukses: Update terinstal dan aktif
- error: Update gagal (mengaktifkan auto-rollback)
Pengawasan Toko
Apple App Store ✅
Pembaruan Hidup sepenuhnya kompatibel dengan kebijakan Apple App Store. Seperti yang dijelaskan dalam Perjanjian Lisensi Program Pengembang Apple:
“Interpretasi code dapat diunduh ke Aplikasi tetapi hanya selama code: (a) tidak mengubah tujuan utama Aplikasi dengan menyediakan fitur atau fungsi yang tidak konsisten dengan tujuan dan iklan yang dimaksudkan Aplikasi yang disampaikan ke App Store, (b) tidak menciptakan toko atau tempat jual untuk code atau aplikasi lain, dan (c) tidak menghindari tanda tangan, sandbox, atau fitur keamanan lainnya dari OS.”
Pembaruan Capgo hanya memodifikasi layer web sementara menghormati semua batasan keamanan platform.
Google Play Store ✅
Update Hidup mematuhi Kebijakan Google Play. Kebijakan Penyalahgunaan Perangkat dan Jaringan secara spesifik menyatakan:
“Keterbatasan ini tidak berlaku untuk code yang menjalankan di mesin virtual atau interpreter di mana salah satunya memberikan akses tidak langsung ke API Android (seperti JavaScript di webview atau browser).”
Karena Capgo hanya memperbarui konten WebView, maka hal ini jatuh dalam pedoman yang diizinkan.
Praktik Terbaik
- Pengembangan Perilisan Berperingkat: Rilis update secara bertahap
- Pengendalian Versi: Ikuti semua versi yang di-deploy
- Bantuan Rollback: Pulihkan cepat dari masalah
- Update Delta: Unduh hanya file yang berubah
Kapan Menggunakan Live Updates
Sangat cocok untuk:
- Perbaikan bug
- Perbaikan UI
- Perbarui konten
- Tombol fitur
Tidak cocok untuk:
- Perubahan native code
- Perbarui versi utama
- Patch keamanan yang memerlukan perubahan native