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

Capgoのライブアップデートのしくみ

Capgoのライブアップデートのしくみの深いところにダイブし、iOSとAndroidの両方でどのように動作するかを理解する

著者名

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

ライター

Valeria

レビュアー

ジョーダン

エディター

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 Layer: HTML、CSS、JavaScriptファイルをWebViewで読み込む
  2. ネイティブレイヤー:Android、iOS用のプラットフォーム固有のcode (Java/Kotlin for Android, Swift for iOS)

Capgoのlive updateシステムは、実行時でWeb層を置き換えることで機能し、これらのファイルはアプリバイナリにコンパイルされていないためです。

技術実装

Server Paths in Capacitor

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

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

:次のアプリ再起動時に読み込まれるファイルへの参照

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

Androidでは、__CAPGO_KEEP_0__は以下のパスを管理します。

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. ゼロ知識アーキテクチャ:他のOTAアップデートソリューションは、更新を署名するだけなので、Capgoは真のゼロ知識暗号化を採用しています。これは次のことを意味します:

    • アップデート内容はアップロード前に暗号化されます
    • Capgoサーバーは暗号化されたデータのみを保存します
    • エンドユーザー機器でのみ暗号化が解除されます
    • 中間者はアップデートコンテンツにアクセスできません
  3. セキュアなキー管理:

    • CI/CD環境で暗号化キーが生成され、安全に保存されます
    • プライベートキーはCapgoのサーバーに触れません
    • 各アプリバージョンは一意の暗号化キーを使用できます
    • キー回転のサポートにより、セキュリティが強化されます

詳細なガイドで、__CAPGO_KEEP_0__のLive Updateの暗号化システムについて学びます End-to-End Encryption in Capgo Live Updates

アップロード前の暗号化

  1. CI/CDパイプラインでファイルごとに暗号化:

    • 各ファイルは個別に暗号化されます
    • メタデータも完全なプライバシーを確保するために暗号化されます
    • __CAPGO_KEEP_0__ Live Updatesのエンドツーヘンド暗号化について学びましょう
  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. このプロセスを監視するにはイベントを参照してください。

3. 自動インストール

CapacitorUpdater.addListener('download', (info: DownloadEvent) => {
  console.log('Auto-download progress:', info.percent);
});

CapacitorUpdater.addListener('downloadComplete', (info: DownloadCompleteEvent) => {
  console.log('Auto-download complete:', info.bundle);
});

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

__CAPGO_KEEP_0__

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

CapgoのLive Updateの機能について

  • CapacitorのLive Updateの機能について directUpdate 真実です。
  • CapacitorのLive Updateの機能について directUpdate is false
  • CapacitorのLive Updateの機能について

CapacitorのLive Updateの機能について

  • CapacitorのLive Updateの機能について autoDeleteFailed 真実です。
  • CapacitorのLive Updateの機能について autoDeletePrevious 真実です。

CapacitorのLive Updateの機能について

__CAPGO_KEEP_0__

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

__CAPGO_KEEP_1__

  • __CAPGO_KEEP_2____CAPGO_KEEP_3__
  • date__CAPGO_KEEP_5__
  • __CAPGO_KEEP_6____CAPGO_KEEP_7__
  • kill__CAPGO_KEEP_9__

__CAPGO_KEEP_10__

  • __CAPGO_KEEP_11__
  • Capgoの更新とユーザー活動の調整
  • Capacitorの更新体験の滑らかさの確保
  • 重要なタスク中の混乱の防止

更新状態

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

  1. ダウンロード中:ダウンロード中
  2. pending:更新インストール完了、有効
  3. :エラー__CAPGO_KEEP_0__
  4. error: Live Update 失敗(自動ロールバックをトリガー)

ストアの準拠

Apple App Store

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

“解釈可能な code は、アプリケーションにダウンロードされることができますが、そのような code: (a) アプリケーションの主な目的を変更する機能または機能を提供しない限り、(b) 他の code またはアプリケーションを販売するためのストアまたはショップを生成しない限り、(c) OSの署名、サンドボックス、またはセキュリティ機能をバイパスしない限り、”

Capgo の更新は、Web層のみを変更し、すべてのプラットフォームのセキュリティ境界を尊重します。

Google Play Store

CapacitorのLive Updatesは、Google Playポリシーに準拠しています。デバイスとネットワークの乱用ポリシーによれば、

“この制限は、code が仮想マシンまたはインタプリタで実行されている場合、またはそれらがAndroid APIに間接的なアクセスを提供している場合にのみ適用されます。”

Capgo は、Webビューまたはブラウザで実行されるJavaScriptのみを更新するため、これらの許可されたガイドラインに準拠しています。

ベストプラクティス

  1. フェーズドロールアウト: スロールール方式でアップデートを展開
  2. バージョン管理: 全てのデプロイされたバージョンを追跡
  3. : Rollbackサポート: 急速な問題の回復
  4. Δアップデート: 変更されたファイルのみダウンロード

: Live Updateの使用時期

: Live Updateの適切な使用

  • : バグ修正
  • : UIの改善
  • : コンテンツの更新
  • 機能スイッチ

不適切なもの

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

Capgo の「Live Updates for Capacitor」について

__CAPGO_KEEP_0__ を使用している場合 Capgo の「Live Updates for Capacitor」 __CAPGO_KEEP_0__ プラグインディレクトリ Capgo プラグインディレクトリの製品ワークフロー Capgo プラグイン Capgo による Capacitor プラグイン CapacitorのLive Updateの実装詳細については、Capacitor プラグインによってCapgoで実装されています。 プラグインの追加または更新 CapacitorのLive Updateの実装詳細については、プラグインの追加または更新で実装されています。 Ionic Enterprise Pluginの代替 Ionic Enterprise Pluginの代替の製品ワークフローについては、 Capgo Native Buildsの製品ワークフローについては Capacitorの製品ワークフローにおけるCapgoネイティブビルドのために。

Capacitorのライブアップデート

Capgoのライブアップデートは、ウェブ層のバグがライブの場合、 daysの待機時間を避けて、アプリストアの承認を待たずに修正を配信することを可能にします。

マーティンによる人工知能のサポート

スタートする

最新のブログ記事

Capgoは、プロフェッショナルなモバイルアプリを作成するために必要な最良の洞察を提供します。