Lompat ke konten utama

Cara Kerja Live Updates di Capgo

Bedah tuntas implementasi teknis live updates di Capgo, serta cara kerjanya di balik layar untuk iOS dan Android.

Cara Kerja Live Updates di Capgo

Memahami Live Updates di Capgo

live updates Capacitor (OTA) mengganti web bundle di dalam aplikasi Anda sehingga Anda bisa mengirim perubahan JavaScript, HTML, dan CSS tanpa perlu binary store baru. Live Update adalah salah satu fitur paling powerful di aplikasi Capacitor, memungkinkan update real-time tanpa submit ke app store. Mari kita bedah bagaimana Capgo mengimplementasikan fungsionalitas ini.

Konsep Utama

Aplikasi Capacitor terdiri dari dua layer utama:

  1. Lapisan Web: Berisi file HTML, CSS, dan JavaScript yang dimuat di WebView
  2. Lapisan Native: Berisi code spesifik platform (Java/Kotlin untuk Android, Swift untuk iOS)

Sistem live update milik Capgo bekerja dengan mengganti web layer saat runtime, karena file-file ini tidak dikompilasi ke dalam binary aplikasi.

Implementasi Teknis

Server Path di Capacitor

Capgo mengelola dua path kritikal:

  • Path Server Saat Ini: Merujuk ke file yang sedang dimuat di WebView
  • Path Server Berikutnya: Merujuk ke file yang akan dimuat saat restart aplikasi berikutnya

Implementasi Android

Di Android, Capgo mengelola path 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

Di iOS, path dikelola 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 Keamanan

Capgo menerapkan keamanan standar militer melalui end-to-end encryption, memastikan update aplikasi Anda tetap aman sepenuhnya dari tahap development hingga deployment. Sistem enkripsi kami melampaui code signing tradisional untuk memberikan keamanan zero-knowledge yang sesungguhnya.

Arsitektur End-to-End Encryption

  1. Enkripsi End-to-End (E2EE): Setiap update bundle dienkripsi menggunakan enkripsi AES-256-GCM sebelum keluar dari environment development Anda. Enkripsi standar militer ini memastikan update aplikasi Anda tetap privat dan aman selama seluruh proses pengiriman.

  2. Arsitektur Zero-Knowledge: Berbeda dengan solusi OTA update lain yang hanya menandatangani update, Capgo menggunakan enkripsi zero-knowledge sejati. Ini berarti:

    • Konten update dienkripsi sebelum upload
    • Server Capgo hanya menyimpan data terenkripsi
    • Dekripsi hanya terjadi di perangkat end-user
    • Tidak ada perantara yang bisa mengakses konten update Anda
  3. Manajemen Key yang Aman:

    • Encryption key dibuat dan disimpan dengan aman di lingkungan CI/CD Anda
    • Private key tidak pernah menyentuh server Capgo
    • Setiap versi app dapat menggunakan encryption key yang unik
    • Dukungan key rotation untuk keamanan ekstra

Pelajari lebih lanjut tentang sistem enkripsi kami di panduan lengkap kami: End-to-End Encryption pada Capgo Live Updates

Proses Keamanan Update

  1. Enkripsi Pre-Upload:

    • Update dienkripsi di dalam pipeline CI/CD Anda
    • Setiap file dienkripsi secara individual
    • Metadata juga dienkripsi demi privasi total
  2. Penyimpanan Aman:

    • Bundle terenkripsi disimpan di CDN global Capgo
    • Tidak ada data plain text yang menyentuh server kami
    • Data tetap aman meski terjadi server breach
  3. Pengiriman Aman:

    • Update dikirim melalui channel terenkripsi
    • Setiap instance aplikasi memvalidasi integritas enkripsi
    • Mekanisme retry otomatis jika dekripsi gagal
  4. Keamanan Sisi Client:

    • Update diverifikasi sebelum instalasi
    • Dekripsi gagal memicu rollback otomatis
    • Penyimpanan key yang aman di storage terproteksi aplikasi

Pendekatan keamanan menyeluruh ini memastikan update aplikasi Anda tetap terlindungi dari:

  • Serangan man-in-the-middle
  • Pelanggaran sisi server
  • Modifikasi tidak sah
  • Serangan replay
  • Manipulasi konten

Siklus Hidup Update

Proses update Capgo dirancang otomatis secara default. Berikut cara kerja proses otomatisnya:

1. Pengecekan Update Otomatis

Plugin akan mengecek update secara otomatis dalam situasi berikut:

  • Saat aplikasi dimulai

Perilaku ini dikontrol oleh autoUpdate pengaturan:

// capacitor.config.json
{
  "plugins": {
    "CapacitorUpdater": {
      "autoUpdate": true // Enable automatic updates
    }
  }
}

Anda juga bisa mengecek secara manual dengan getLatest()

2. Download Otomatis

Saat versi baru terdeteksi, jika autoUpdate diaktifkan:

  1. Download dimulai secara otomatis
  2. Progres dilacak secara internal
  3. Download gagal akan otomatis diulang saat app dibuka
  4. Download berhasil disimpan di storage app

Anda bisa 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 app di-background berikutnya jika directUpdate bernilai false
  • Auto-rollback jika instalasi gagal

Plugin ini juga mengelola storage secara otomatis:

  • Hapus update yang gagal jika autoDeleteFailed bernilai true
  • Bersihkan versi lama jika autoDeletePrevious bernilai true

Delay Update

Anda bisa mengatur kapan update diinstal menggunakan kondisi delay:

// 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 delay yang tersedia:

  • background: Instal saat aplikasi masuk ke background
  • date: Instal setelah tanggal/waktu tertentu
  • nativeVersion: Instal setelah update native berikutnya
  • kill: Instal setelah aplikasi di-kill

Ini berguna untuk:

  • Menjadwalkan update di jam tidak sibuk
  • Koordinasi update dengan aktivitas user
  • Memastikan pengalaman update yang lancar
  • Mencegah gangguan saat tugas kritis

Status Update

Selama proses otomatis, bundle akan melewati status berikut:

  1. downloading: Download sedang berjalan
  2. pending: Download selesai, menunggu instalasi
  3. berhasil: Update terinstal dan aktif
  4. error: Update gagal (memicu auto-rollback)

Kepatuhan Store

Apple App Store ✅

Live Updates sepenuhnya patuh dengan kebijakan Apple App Store. Sebagaimana dinyatakan dalam Apple Developer Program License Agreement:

“code yang diinterpretasikan dapat diunduh ke sebuah Aplikasi, namun hanya selama code tersebut: (a) tidak mengubah tujuan utama Aplikasi dengan menyediakan fitur atau fungsionalitas yang tidak sesuai dengan tujuan yang dimaksudkan dan diiklankan dari Aplikasi saat dikirim ke App Store, (b) tidak membuat toko atau storefront untuk code atau aplikasi lain, dan (c) tidak melewati proses signing, sandbox, atau fitur keamanan OS lainnya.”

Update Capgo hanya memodifikasi web layer dengan tetap menghormati semua batasan keamanan platform.

Google Play Store ✅

Live Updates mematuhi Kebijakan Google Play. Kebijakan Penyalahgunaan Perangkat dan Jaringan secara spesifik menyatakan:

“Pembatasan ini tidak berlaku untuk code yang berjalan di virtual machine atau interpreter, di mana salah satunya memberikan akses tidak langsung ke Android API (seperti JavaScript di webview atau browser).”

Karena Capgo hanya memperbarui konten WebView, hal ini termasuk dalam panduan yang diizinkan.

Praktik Terbaik

  1. Rollout Bertahap: Deploy update secara bertahap
  2. Kontrol Versi: Pantau semua versi yang di-deploy
  3. Dukungan Rollback: Pemulihan cepat dari masalah
  4. Delta Update: Hanya download file yang berubah

Kapan Harus Menggunakan Live Updates

Sangat cocok untuk:

  • Perbaikan bug
  • Peningkatan UI
  • Update konten
  • Feature toggles

Tidak cocok untuk:

  • Perubahan Native code
  • Update versi mayor
  • Security patch yang butuh perubahan native

Lanjut ke Cara Kerja Live Updates di Capgo

Jika Anda menggunakan Cara Kerja Live Update di Capgo untuk merencanakan pekerjaan plugin native, hubungkan dengan Direktori Plugin Capgo untuk alur kerja produk di Direktori Plugin Capgo, Plugin Capacitor oleh Capgo untuk detail implementasi di Capacitor Plugins oleh Capgo, Menambahkan atau Memperbarui Plugin untuk detail implementasi saat Menambah atau Memperbarui Plugin, Alternatif Plugin Ionic Enterprise untuk alur kerja produk di alternatif Ionic Enterprise Plugin, dan Capgo Native Build untuk workflow produk di Capgo Native Builds.

Live update untuk aplikasi Capacitor

Saat bug di web layer sudah live, kirim perbaikannya lewat Capgo alih-alih menunggu berhari-hari untuk persetujuan app store. Pengguna menerima update di background, sementara perubahan native tetap di jalur review normal.

Terbaru dari Blog kami

Capgo memberikan insight terbaik yang Anda butuhkan untuk membuat aplikasi mobile yang benar-benar profesional.