メインコンテンツにスキップ

Capgoのリアルタイム更新機能のしくみ

Capgoのリアルタイム更新機能のしくみを深く掘り下げてみましょう。iOSとAndroid両方のバックエンドでどのように動作するかを理解しましょう。

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

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

コンテンツマーケター

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.

Core Concepts

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

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

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

Technical Implementation

Capacitorのサーバーパス

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

  • Current Server Path: 現在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 implements military-grade security through end-to-end encryption, ensuring your app updates remain completely secure from development to deployment. Our encryption system goes beyond traditional code signing to provide true zero-knowledge security.

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

  1. エンドツーヘンド暗号化 (E2EE): 開発環境を出発してから配信プロセス全体を通じて、アプリ更新が完全にプライベートでセキュアであることを保証するために、AES-256-GCM暗号化を使用して、各更新パッケージが暗号化されます。

  2. ゼロノーベルデザイン: Capgoは他のOTAアップデートソリューションとは異なり、真のゼロ知識暗号化を採用しています。これは次の意味です:

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

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

詳細なガイドで、__CAPGO_KEEP_0__ Live Updatesの暗号化システムについて学習してください: Capgo Live Updatesにおけるエンドツーヘンド暗号化

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

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

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

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

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

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

この包括的なセキュリティアプローチにより、以下の攻撃からアプリのアップデートを保護します。

  • 中間者攻撃
  • サーバーサイドの侵害
  • 未承認の変更
  • リプレイ攻撃
  • コンテンツの改ざん

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

Capgoの自動更新プロセスは、デフォルトで自動化されています。自動更新プロセスはどのように動作するかを以下に示します。

1. 自動更新確認

プラグインは、以下の状況で自動的に更新を確認します。

  • アプリ起動時

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

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

手動で確認することもできます。 getLatest()

2. 自動ダウンロード

新しいバージョンが検出された場合、以下の設定が有効の場合にダウンロードが自動的に開始されます。 autoUpdate ダウンロードの進行状況は内部で追跡されます。

  1. 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)
    }
  }
}

インストールは次のようになります:

  • すぐに実行される場合 directUpdate はtrueの場合
  • アプリのバックグラウンド化次に実行される場合 directUpdate はfalseの場合
  • インストールが失敗した場合のロールバックも自動的に行われます

プラグインはストレージの管理も自動的に行います:

  • Removes failed updates if autoDeleteFailed is true
  • Cleans up old versions if autoDeletePrevious is true

Delaying Updates

You can control when updates are installed using delay conditions:

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

Available delay conditions:

  • background: Install when app goes to background
  • date: Install after specific date/time
  • nativeVersion:本当に安笢だ
  • 歌歏:安笢に安笢だ

トントは会です:

  • 安笢、時間に待い日朝に安笢しています
  • 用、アシアコントに安笢しています
  • 安笢に安笢だできるたぷしています
  • 安笢に安笢だできるたぷしています

安笢に安笢だできるたぷしています

安笢に安笢だできるたぷしています

  1. 安笢、アシアコントに安笢しています安笢に安笢だできるたぷしています
  2. Japanese:_ダウンロード完了、インストール待機_
  3. success:_インストール済み、有効_
  4. error:_インストール失敗(自動ロールバック)_

Store Compliance

Apple App Store

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

“_解釈可能なcodeは、アプリケーションにダウンロードできるが、そのようなcodeは、次の条件を満たさなければならない。(a) アプリケーションの主な目的を変更してはならない。提供される機能や機能性が、アプリケーションがApp Storeに提出された目的と広告された目的と一致しない場合、(b) 他のcodeやアプリケーションを販売するためのストアやショップフロアを作成してはならない、(c) OSの署名、サンドボックス、またはセキュリティ機能を回避してはならない。”

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

Google Play Store

Google Play ポリシーに準拠したリアルタイム更新

「この制限は、仮想マシンまたはインタプリタで実行される code に適用されない。仮想マシンまたはインタプリタが Android API に間接的にアクセスできる場合に限る (例: JavaScript を使用したウェブビューまたはブラウザ)」

Capgo はウェブビューのコンテンツのみを更新するため、これらの許可されたガイドラインに該当する。

ベスト プラクティス

  1. フェーズド ロールアウト: 画面に表示される更新を段階的に実施
  2. バージョン管理: 運用中のすべてのバージョンを追跡
  3. ロールバック: 問題が発生した場合の迅速な復旧
  4. デルタ更新: 変更されたファイルのみをダウンロード

ライブ更新を使用するタイミング

使用するには:

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

使用しない場合は:

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

How Live Updates Work in Capgo から続けてください

ライブ更新を使用している場合 Capgoのリアルタイム更新はどのように機能するか __CAPGO_KEEP_0__と接続して Capgo プラグイン ディレクトリ Capgo プラグイン ディレクトリ内での製品ワークフロー Capacitor Plugins by Capgo Capacitor プラグインのCapgo __CAPGO_KEEP_0__ プラグインの__CAPGO_KEEP_1__の実装詳細 プラグインの追加または更新 プラグインの追加または更新の実装詳細 Ionic Enterprise プラグインの代替 Capgo Native Builds Capgoネイティブビルドの製品ワークフロー

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

アプリ内でウェブ層のバグが生じた場合、Capgoを通じて修正を配信するのではなく、アプリストアの承認待ちの日数を待たずに修正を配信する。ユーザーはバックグラウンドで更新を受け取り、ネイティブの変更は通常のレビュー経路で残る。

スタートする

ブログの最新記事

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