Memahami Pembaruan Langsung di Capgo
Pembaruan langsung adalah salah satu fitur paling kuat dalam aplikasi Capacitor, memungkinkan pembaruan real-time tanpa pengiriman ke toko aplikasi. Mari kita selami lebih dalam bagaimana Capgo mengimplementasikan fungsionalitas ini.
Konsep Inti
Aplikasi Capacitor terdiri dari dua lapisan utama:
- Lapisan Web: Berisi file HTML, CSS, dan JavaScript yang dimuat di WebView
- Lapisan Native: Berisi kode spesifik platform (Java/Kotlin untuk Android, Swift untuk iOS)
Sistem pembaruan langsung Capgo bekerja dengan mengganti lapisan web pada saat runtime, karena file-file ini tidak dikompilasi ke dalam biner aplikasi.
Implementasi Teknis
Jalur Server di Capacitor
Capgo mengelola dua jalur penting:
- Jalur Server Saat Ini: Mengarah ke file yang saat ini dimuat di WebView
- Jalur Server Selanjutnya: Mengarah ke file yang akan dimuat pada saat aplikasi di-restart
Implementasi Android
Di Android, Capgo mengelola jalur melalui:
// Store next server pathprivate 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 reloadprivate void setCurrentCapacitorServerPath(String path) { bridge.setServerBasePath(path); bridge.reload();}
Implementasi iOS
Di iOS, jalur dikelola melalui:
// Store next server pathprivate func setNextCapacitorServerPath(path: String) { KeyValueStore.standard["serverBasePath"] = path}
// Update current pathprivate func setCurrentCapacitorServerPath(path: String) { bridge.viewController.setServerBasePath(path: path)}
Langkah-langkah Keamanan
Capgo menerapkan keamanan tingkat militer melalui enkripsi end-to-end, memastikan pembaruan aplikasi Anda tetap sepenuhnya aman dari pengembangan hingga penerapan. Sistem enkripsi kami melampaui penandatanganan kode tradisional untuk memberikan keamanan nol-pengetahuan yang sebenarnya.
Arsitektur Enkripsi End-to-End
-
Enkripsi End-to-End (E2EE): Setiap paket pembaruan dienkripsi menggunakan enkripsi AES-256-GCM sebelum meninggalkan lingkungan pengembangan Anda. Enkripsi tingkat militer ini memastikan bahwa pembaruan aplikasi Anda tetap sepenuhnya pribadi dan aman sepanjang proses pengiriman.
-
Arsitektur Nol-Pengetahuan: Tidak seperti solusi pembaruan OTA lainnya yang hanya menandatangani pembaruan, Capgo menerapkan enkripsi nol-pengetahuan yang sebenarnya. Ini berarti:
- Konten pembaruan dienkripsi sebelum diunggah
- Server Capgo hanya menyimpan data terenkripsi
- Dekripsi hanya terjadi di perangkat pengguna akhir
- Tidak ada perantara yang dapat mengakses konten pembaruan Anda
-
Manajemen Kunci yang Aman:
- Kunci enkripsi dihasilkan dan disimpan secara aman di lingkungan CI/CD Anda
- Kunci privat tidak pernah menyentuh server Capgo
- Setiap versi aplikasi dapat menggunakan kunci enkripsi yang unik
- Dukungan rotasi kunci untuk keamanan yang lebih baik
Pelajari lebih lanjut tentang sistem enkripsi kami dalam panduan terperinci kami: Enkripsi End-to-End di Pembaruan Langsung Capgo
Proses Keamanan Pembaruan
-
Enkripsi Pra-Unggah:
- Pembaruan dienkripsi di jalur CI/CD Anda
- Setiap file dienkripsi secara individu
- Metadata juga dienkripsi untuk menjaga privasi penuh
-
Penyimpanan Aman:
- Paket terenkripsi disimpan di CDN global Capgo
- Tidak ada data teks biasa yang pernah menyentuh server kami
- Bahkan dalam kasus pelanggaran server, data tetap aman
-
Pengiriman Aman:
- Pembaruan dikirimkan melalui saluran terenkripsi
- Setiap instansi aplikasi memvalidasi integritas enkripsi
- Mekanisme otomatis untuk percobaan dekripsi yang gagal
-
Keamanan Sisi Klien:
- Pembaruan diverifikasi sebelum instalasi
- Dekripsi yang gagal memicu pengembalian otomatis
- Penyimpanan kunci yang aman di penyimpanan terlindungi aplikasi
Pendekatan keamanan komprehensif ini memastikan bahwa pembaruan aplikasi Anda tetap terlindungi dari:
- Serangan Man-in-the-middle
- Pelanggaran sisi server
- Modifikasi yang tidak sah
- Serangan replay
- Pemalsuan konten
Siklus Hidup Pembaruan
Proses pembaruan Capgo dirancang untuk otomatis secara default. Berikut cara kerja proses otomatis tersebut:
1. Pemeriksaan Pembaruan Otomatis
Plugin secara otomatis memeriksa pembaruan dalam situasi berikut:
- Ketika aplikasi dimulai
Perilaku ini dikendalikan oleh pengaturan autoUpdate
:
// capacitor.config.json{ "plugins": { "CapacitorUpdater": { "autoUpdate": true // Enable automatic updates } }}
Anda juga dapat memeriksa secara manual dengan getLatest()
2. Pengunduhan Otomatis
Ketika versi baru terdeteksi, jika autoUpdate
diaktifkan:
- Pengunduhan dimulai otomatis
- Progres dilacak secara internal
- Pengunduhan yang gagal mencoba ulang secara otomatis setiap kali aplikasi dibuka
- Pengunduhan yang berhasil disimpan di penyimpanan aplikasi
Anda dapat memantau proses ini melalui peristiwa:
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:
- Segera jika
directUpdate
benar - Pada arka aplikasi berikutnya jika
directUpdate
salah - Pengembalian otomatis jika instalasi gagal
Plugin juga secara otomatis mengelola penyimpanan:
- Menghapus pembaruan yang gagal jika
autoDeleteFailed
benar - Membersihkan versi lama jika
autoDeletePrevious
benar
Menunda Pembaruan
Anda dapat mengontrol kapan pembaruan diinstal menggunakan kondisi penundaan:
// Delay until app goes to backgroundawait CapacitorUpdater.setDelay({ kind: 'background'});
// Delay until specific dateawait CapacitorUpdater.setDelay({ kind: 'date', value: '2024-03-20T10:00:00.000Z'});
// Delay until next native versionawait CapacitorUpdater.setDelay({ kind: 'nativeVersion'});
// Multiple conditionsawait CapacitorUpdater.setMultiDelay({ delayConditions: [ { kind: 'background' }, { kind: 'date', value: '2024-03-20T10:00:00.000Z' } ]});
Kondisi penundaan yang tersedia:
- background: Instal ketika aplikasi masuk ke latar belakang
- date: Instal setelah tanggal/waktu tertentu
- nativeVersion: Instal setelah pembaruan native berikutnya
- kill: Instal setelah aplikasi dihentikan
Ini berguna untuk:
- Menjadwalkan pembaruan selama jam sepi
- Mengkoordinasikan pembaruan dengan aktivitas pengguna
- Memastikan pengalaman pembaruan yang lancar
- Mencegah gangguan selama tugas kritis
Status Pembaruan
Selama proses otomatis, paket beralih melalui status-status ini:
- downloading: Pengunduhan sedang berlangsung
- pending: Pengunduhan selesai, menunggu instalasi
- success: Pembaruan terinstal dan aktif
- error: Pembaruan gagal (memicu pengembalian otomatis)
Kepatuhan Toko
Apple App Store ✅
Pembaruan Langsung sepenuhnya mematuhi kebijakan Apple App Store. Seperti yang dinyatakan dalam Perjanjian Lisensi Program Pengembang Apple:
“Kode yang diinterpretasikan dapat diunduh ke Aplikasi tetapi hanya selama kode tersebut: (a) tidak mengubah tujuan utama Aplikasi dengan memberikan fitur atau fungsionalitas yang tidak konsisten dengan tujuan yang dimaksudkan dan diiklankan dari Aplikasi yang diajukan ke App Store, (b) tidak menciptakan toko atau etalase untuk kode atau aplikasi lain, dan (c) tidak melewati penandatanganan, sandbox, atau fitur keamanan lain dari OS.”
Capgo hanya memodifikasi lapisan web sambil menghormati semua batasan keamanan platform.
Google Play Store ✅
Pembaruan Langsung mematuhi Kebijakan Google Play. Kebijakan Penyalahgunaan Perangkat dan Jaringan secara khusus menyatakan:
“Pembatasan ini tidak berlaku untuk kode yang berjalan di mesin virtual atau interpreter di mana keduanya memberikan akses tidak langsung ke API Android (seperti JavaScript dalam webview atau browser).”
Karena Capgo hanya memperbarui konten WebView, maka hal ini termasuk dalam pedoman yang diizinkan.
Praktik Terbaik
- Peluncuran Bertahap: Terapkan pembaruan secara bertahap
- Pengendalian Versi: Lacak semua versi yang diterapkan
- Dukungan Pengembalian: Pemulihan cepat dari masalah
- Pembaruan Delta: Hanya unduh file yang berubah
Kapan Menggunakan Pembaruan Langsung
Sangat cocok untuk:
- Memperbaiki bug
- Peningkatan UI
- Pembaruan konten
- Pengalihan fitur
Tidak cocok untuk:
- Perubahan kode native
- Pembaruan versi besar
- Tambalan keamanan yang memerlukan perubahan native