メインコンテンツにジャンプ

How Live Updates Work in Capgo

Deep dive into the technical implementation of live updates in Capgo, understanding how it works under the hood for both iOS and Android.

Capacitorアプリでは、ライブアップデートという最も強力な機能があります。これにより、リアルタイムでアップデートを行うことができます。アプリストアへの提出は必要ありません。Capacitorがこの機能を実装するしくみを深く掘り下げてみましょう。

マーティン・ドナディュー

マーティン・ドナディュー

How Live Updates Work in Capgo

Understanding Live Updates in Capgo

Live updates are one of the most powerful features in Capacitor apps, allowing real-time updates without app store submissions. Let’s dive deep into how Capgo implements this functionality.

基本概念

Capacitorアプリは2つの主なレイヤーで構成されています。

  1. Webレイヤー: WebViewに読み込まれるHTML、CSS、JavaScriptファイルを含みます。
  2. ネイティブレイヤー: Android用にJava/Kotlin、iOS用にSwiftで構築されたプラットフォーム固有のcodeを含みます。

Capgoのライブアップデートシステムは、WebViewに読み込まれているファイルがアプリバイナリにコンパイルされていないため、実行時でWebレイヤーを置き換えることで機能します。

技術的実装

Capacitorのサーバーパス

Capgoは2つの重要なパスを管理します。

  • 現在のサーバーパス: 現在WebViewに読み込まれているファイルを指します。
  • 次サーバーパス: 次のアプリ再起動時に読み込まれるファイルを指します

Android実装

Androidでは、Capgoは次のパスを管理します

// 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();
}

iOS実装

iOSでは、パスは次の方法で管理されます

// 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)
}

セキュリティ対策

Capgoは軍用レベルのセキュリティを実現するエンドツーヘンド暗号化を実装し、開発から運用までのアプリ更新が完全に安全に保証されます。私たちの暗号化システムは、従来のcode署名を超えて、完全なゼロ知識セキュリティを提供します。

エンドツーヘンド暗号化アーキテクチャ

  1. エンドツーヘンド暗号化(E2EE): 開発環境を出発して、アプリ更新が完全にプライベートで安全であることを保証するために、AES-256-GCM暗号化を使用して、各アップデートパッケージを暗号化します。

  2. ゼロ知識アーキテクチャ: Capgoは他のOTAアップデートソリューションとは異なり、真のゼロ知識暗号化を採用しています。これは意味する:

    • アップデート内容はアップロードする前に暗号化されます
    • Capgoサーバーは暗号化されたデータのみを保存します
    • 暗号化はエンドユーザー側のデバイスでしか行われません
    • 中間者はアップデート内容にアクセスできません
  3. セキュアなキー管理:

    • 暗号化キーはCI/CD環境で生成および安全に保存されます
    • プライベートキーはCapgoサーバーに触れません
    • 各アプリバージョンごとに独自の暗号化キーを使用できます
    • キー回転機能を使用してセキュリティを強化

詳細なガイドで私たちの暗号化システムについて学びましょう: Capgo Live Updatesにおけるエンドツーヘンド暗号化

アップデートセキュリティプロセス

  1. プレアップロード暗号化:

    • アップデートはCI/CDパイプラインで暗号化されます
    • 各ファイルは個別に暗号化されます
    • メタデータも完全なプライバシーを確保するために暗号化されます
  2. セキュアストレージ:

    • 暗号化されたバンドルはCapgoのグローバルCDNに保存されます
    • サーバーにプランテキストデータは一度も触れません
    • サーバーブレーチの場合でもデータはセキュアです
  3. セキュアデリバリー:

    • アップデートは暗号化されたチャンネルを通じて配信されます
    • 各アプリインスタンスは暗号化の整合性を検証します
    • 自動復旧機構
  4. クライアントサイドセキュリティ:

    • アップデートはインストール前に検証されます
    • 暗号化失敗は自動ロールバックをトリガーします
    • アプリの保護されたストレージ内に安全な鍵を保存

この包括的なセキュリティアプローチにより、アプリのアップデートは次の攻撃から保護されます:

  • マニンザミット攻撃
  • サーバーサイドの侵害
  • 未承認の変更
  • リプレイ攻撃
  • コンテンツの改ざん

アップデートライフサイクル

Capgoのアップデートプロセスは、自動化されたものでデフォルトです。ここでは、自動化されたプロセスがどのように機能するかを説明します。

1. 自動アップデートチェック

プラグインは、以下の状況で自動的にアップデートをチェックします。

  • アプリ起動時

この動作は、以下の設定によって制御されます。 autoUpdate 設定:

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

手動でチェックすることもできます。 getLatest()

2. 自動ダウンロード

新しいバージョンが検出された場合、自動ダウンロードが有効になっている場合: autoUpdate ダウンロードが自動的に開始されます。

  1. 進行状況は内部で追跡されます。
  2. 設定:
  3. 再ダウンロードはアプリを開いたときに自動的に実行されます。
  4. ダウンロードが成功すると、アプリのストレージに保存されます。

このプロセスを監視するには、イベントを参照してください。

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. 自動インストール

インストールのタイミングは、以下の設定に依存します。

// 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)
    }
  }
}

インストールは、次の条件が満たされている場合に実行されます。

  • true の場合、即時インストール directUpdate false の場合、次のアプリバックグラウンド時
  • インストールが失敗した場合、自動ロールバック directUpdate プラグインはストレージの管理も自動的に行っています。
  • __CAPGO_KEEP_0__

__CAPGO_KEEP_1__

  • Capgo autoDeleteFailed Capacitor
  • Cloudflare autoDeletePrevious GitHub

Capgo

Capacitor

// 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'
    }
  ]
});

code

  • APISDK
  • CLInpm
  • bun: {0}の後でインストールしてください
  • kill: アプリがkillされた後でインストールしてください

これは以下の用途で便利です:

  • 非ピーク時間帯にアップデートをスケジューリングする
  • ユーザー活動とアップデートを調整する
  • Smoothなアップデート体験を確保する
  • 重要なタスク中のディスループションを防止する

アップデート状態

自動プロセス中、バンドルは次の状態を通過します:

  1. ダウンロード中: ダウンロード中です
  2. 待機中: ダウンロード完了、インストール待機中
  3. 成功: アップデートがインストールされ、有効
  4. エラー: アップデートが失敗(自動ロールバックをトリガー)

ストアの規制

Apple App Store

Live UpdatesはApple App Storeのポリシーに完全に準拠しています。Apple Developer Program License Agreementに記載されているとおりです。

“Interpreted code may be downloaded to an Application but only so long as such code: (a) does not change the primary purpose of the Application by providing features or functionality that are inconsistent with the intended and advertised purpose of the Application as submitted to the App Store, (b) does not create a store or storefront for other code or applications, and (c) does not bypass signing, sandbox, or other security features of the OS.”

Capgo のアップデートは、プラットフォームのセキュリティの境界を尊重しながら、ウェブ層のみを変更します。

Google Play Store

Live UpdatesはGoogle Playポリシーに準拠しています。特に、デバイスとネットワークの乱用ポリシーでは次のように述べられています:

「この制限は、仮想マシンまたはインタプリタで実行されるcodeに適用されない。どちらもAndroid APIに間接的にアクセスできる場合である」ということです。

Since Capgo only updates WebView content, it falls within these permitted guidelines.

ベストプラクティス

  1. フェーズドロールアウト: アップデートを段階的に実行
  2. バージョン管理コンテキスト:Capgoのマーケティングウェブサイト。役割:短いUIラベルまたはナビゲーションアイテム。メッセージキー`version_control` (バージョン管理)。
  3. : 全てのデプロイされたバージョンを追跡ロールバックサポート
  4. : 問題から迅速に回復デルタアップデート

ライブアップデートの使用時期

適切な使用例

  • バグ修正
  • UIの改善
  • コンテンツの更新
  • 機能の切り替え

不適切な使用例

  • ネイティブcodeの変更
  • メジャーバージョンの更新
  • ネイティブの変更が必要なセキュリティパッチ

How Live Updates Work in Capgoから続きます

Capacitorを使用している場合 How Capgo Live Updates Work native plugin workを計画するには、__CAPGO_KEEP_0__と接続する Capgo プラグインディレクトリ Capgo プラグインディレクトリの製品ワークフロー Capacitor Plugins by Capgo for the implementation detail in Capacitor Plugins by Capgo, __CAPGO_KEEP_0__ プラグインの実装詳細 __CAPGO_KEEP_0__ プラグイン __CAPGO_KEEP_1__ プラグインの追加または更新 Capgo Native Builds Ionic Enterprise プラグインの代替品としての Capgo Native Buildsの製品ワークフロー

Capacitorアプリ用のリアルタイム更新

When a web-layer bug is live, ship the fix through Capgo instead of waiting days for app store approval. Users get the update in the background while native changes stay in the normal review path.

ウェブ層のバグが生じたときは、__CAPGO_KEEP_0__を通して修正を配信するのではなく、数日間待ってアプリストアの承認を待つのではなく、ユーザーはバックグラウンドで更新を受け取り、ネイティブの変更は通常のレビューのパスを通る。

コンテキスト:Capgoのマーケティングウェブサイト。役割:サポートする説明文またはメタ説明文。見られる場所:コンポーネントGetStarted.astro。Capgoの製品/ブランド名と開発者用語をそのまま保存する。

マーティンから人間のサポート

Capgo gives you the best insights you need to create a truly professional mobile app.