Memahami Live Updates di Capgo
Live updates adalah salah satu fitur paling kuat dalam aplikasi Capacitor, memungkinkan pembaruan real-time tanpa perlu submit ke app store. Mari kita dalami bagaimana Capgo mengimplementasikan fungsionalitas ini.
Konsep Dasar
Aplikasi Capacitor terdiri dari dua lapisan utama:
- Lapisan Web: Berisi file HTML, CSS, dan JavaScript yang dimuat dalam WebView
- Lapisan Native: Berisi kode platform-spesifik (Java/Kotlin untuk Android, Swift untuk iOS)
Sistem live update Capgo bekerja dengan mengganti lapisan web saat runtime, karena file-file ini tidak dikompilasi ke dalam binary aplikasi.
Implementasi Teknis
Path Server di Capacitor
Capgo mengelola dua path penting:
- Path Server Saat Ini: Menunjuk ke file yang sedang dimuat di WebView
- Path Server Berikutnya: Menunjuk ke file yang akan dimuat saat aplikasi di-restart
Implementasi Android
Pada Android, Capgo mengelola path 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
Pada iOS, path 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 mengimplementasikan 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 zero-knowledge yang sesungguhnya.
Arsitektur Enkripsi End-to-End
-
Enkripsi End-to-End (E2EE): Setiap bundel pembaruan dienkripsi menggunakan enkripsi AES-256-GCM sebelum meninggalkan lingkungan pengembangan Anda. Enkripsi tingkat militer ini memastikan pembaruan aplikasi Anda tetap sepenuhnya privat dan aman selama proses pengiriman.
-
Arsitektur Zero-Knowledge: Berbeda dengan solusi OTA update lainnya yang hanya menandatangani pembaruan, Capgo menggunakan enkripsi zero-knowledge yang sesungguhnya. Ini berarti:
- Konten pembaruan dienkripsi sebelum diunggah
- Server Capgo hanya menyimpan data terenkripsi
- Dekripsi hanya terjadi pada perangkat pengguna akhir
- Tidak ada perantara yang dapat mengakses konten pembaruan Anda
-
Manajemen Kunci Aman:
- Kunci enkripsi dibuat dan disimpan dengan aman di lingkungan CI/CD Anda
- Kunci privat tidak pernah menyentuh server Capgo
- Setiap versi aplikasi dapat menggunakan kunci enkripsi unik
- Dukungan rotasi kunci untuk keamanan yang lebih baik
Pelajari lebih lanjut tentang sistem enkripsi kami dalam panduan detail: End-to-End Encryption in Capgo Live Updates
Proses Keamanan Pembaruan
-
Enkripsi Pra-Unggah:
- Pembaruan dienkripsi dalam pipeline CI/CD Anda
- Setiap file dienkripsi secara individual
- Metadata juga dienkripsi untuk privasi lengkap
-
Penyimpanan Aman:
- Bundle terenkripsi disimpan di CDN global Capgo
- Tidak ada data teks biasa yang menyentuh server kami
- Bahkan dalam kasus pelanggaran server, data tetap aman
-
Pengiriman Aman:
- Pembaruan dikirim melalui saluran terenkripsi
- Setiap instansi aplikasi memvalidasi integritas enkripsi
- Mekanisme retry otomatis untuk dekripsi yang gagal
-
Keamanan Sisi Klien:
- Pembaruan diverifikasi sebelum instalasi
- Dekripsi yang gagal memicu rollback otomatis
- Penyimpanan kunci aman di penyimpanan terproteksi aplikasi
Pendekatan keamanan komprehensif ini memastikan pembaruan aplikasi Anda tetap terlindungi dari:
- Serangan man-in-the-middle
- Pelanggaran sisi server
- Modifikasi tidak sah
- Serangan replay
- Perusakan konten
Siklus Hidup Pembaruan
Proses pembaruan Capgo dirancang otomatis secara default. Berikut cara kerja proses otomatis:
1. Pemeriksaan Pembaruan Otomatis
Plugin secara otomatis memeriksa pembaruan dalam situasi berikut:
- Saat 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:
- Unduhan dimulai secara otomatis
- Kemajuan dilacak secara internal
- Unduhan yang gagal akan mencoba ulang secara otomatis setiap kali aplikasi dibuka 4.Download yang berhasil disimpan dalam 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:
- Segera jika
directUpdate
bernilai true - Saat aplikasi berjalan di background jika
directUpdate
bernilai false - Rollback otomatis jika instalasi gagal
Plugin juga mengelola penyimpanan secara otomatis:
- Menghapus update yang gagal jika
autoDeleteFailed
bernilai true - Membersihkan versi lama jika
autoDeletePrevious
bernilai true
Menunda Update
Anda dapat mengontrol kapan update 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: Install saat aplikasi masuk ke background
- date: Install setelah tanggal/waktu tertentu
- nativeVersion: Install setelah update native berikutnya
- kill: Install setelah aplikasi dimatikan
Ini berguna untuk:
- Menjadwalkan update selama jam tidak sibuk
- Mengkoordinasikan update dengan aktivitas pengguna
- Memastikan pengalaman update yang lancar
- Mencegah gangguan selama tugas penting
Status Update
Selama proses otomatis, bundle melewati status-status berikut:
- downloading: Unduhan sedang berlangsung
- pending: Unduhan selesai, menunggu instalasi
- success: Update terinstal dan aktif
- error: Update gagal (memicu rollback otomatis)
Kepatuhan Toko
Apple App Store ✅
Live Updates sepenuhnya mematuhi kebijakan Apple App Store Seperti yang tercantum dalam Perjanjian Lisensi Program Apple Developer:
“Kode yang diinterpretasikan dapat diunduh ke Aplikasi tetapi hanya selama kode tersebut: (a) tidak mengubah tujuan utama Aplikasi dengan menyediakan fitur atau fungsionalitas yang tidak konsisten dengan tujuan yang dimaksud dan diiklankan dari Aplikasi sebagaimana diajukan ke App Store, (b) tidak membuat toko atau storefront untuk kode atau aplikasi lain, dan (c) tidak memotong signing, sandbox, atau fitur keamanan lain dari OS”
Update Capgo hanya memodifikasi lapisan web sambil menghormati semua batasan keamanan platform
Google Play Store ✅
Live Updates 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 menyediakan akses tidak langsung ke API Android (seperti JavaScript di webview atau browser)”
Karena Capgo hanya memperbarui konten WebView, ini termasuk dalam pedoman yang diizinkan
Praktik Terbaik
- Rollout Bertahap: Terapkan update secara bertahap
- Kontrol Versi: Lacak semua versi yang diterapkan
- Dukungan Rollback: Pemulihan cepat dari masalah
- Update Delta: Hanya unduh file yang berubah
Kapan Menggunakan Live Updates
Sempurna untuk:
- Perbaikan bug
- Perbaikan UI
- Update konten
- Toggle fitur
Tidak cocok untuk:
- Perubahan kode native
- Update versi major
- Patch keamanan yang membutuhkan perubahan native