Capgoでリアルタイム更新を理解する
Capacitorアプリのリアルタイム更新は、実行時アプリストアへのアップロードなしでリアルタイム更新が可能な最も強力な機能の1つです。 Capgoがこの機能を実装する方法について、深く掘り下げてみましょう。
基本概念
Capacitorアプリは、2つの主なレイヤーで構成されています。
- Web Layer: WebViewで読み込まれるHTML、CSS、JavaScriptファイルを含みます。
- Native Layer: Android用のJava/Kotlin、iOS用のSwiftなどのプラットフォーム固有のcodeを含みます。
Capgoのリアルタイム更新システムは、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署名よりも高度なゼロ知識セキュリティを提供するエンコードシステムを使用しています。
エンドツーヘンド暗号化アーキテクチャ
-
エンドツーヘンド暗号化(E2EE): 開発環境を出発するたびに、すべてのアップデートバンドルはAES-256-GCM暗号化を使用して暗号化されます。この軍用級の暗号化により、すべてのアップデートが完全にプライベートで安全な状態で、すべての配信プロセスを通じて保持されます。
-
ゼロノーベル知識アーキテクチャ: 他のOTAアップデートソリューションがアップデートのみ署名するのと異なり、Capgoは真のゼロノーベル暗号化を採用しています。これは次の意味を持ちます:
- アップデート内容はアップロードする前に暗号化されます
- Capgoサーバーは暗号化されたデータのみを保存します
- デコードはエンドユーザー側のデバイスで実行されます
- 中間者はアップデートコンテンツにアクセスできません
-
セキュアなキー管理:
- 暗号化キーはCI/CD環境で安全に生成され、保存されます
- プライベートキーはCapgoサーバーに触れません
- 各アプリバージョンごとに独自の暗号化キーを使用できます
- セキュリティの向上のためにキー ローテーションをサポートしています
詳細なガイドで、__CAPGO_KEEP_0__のライブアップデートにおけるエンドツーワンエンド暗号化について学習してください エンドツーワンエンド暗号化 in Capgo ライブアップデート
アップデートのセキュリティプロセス
-
プレアップロード暗号化:
- __CAPGO_KEEP_0__のCI/CD Pipelinesでアップデートが暗号化されます
- 各ファイルは個別に暗号化されます
- メタデータも完全なプライバシーを確保するために暗号化されます
-
セキュア ストレージ:
- Capgoのグローバル CDNで暗号化されたバンドルが保存されます
- サーバーに触れることなくプレインテキスト データが存在しません
- サーバーブレーチの場合でも、データは安全に保持される
-
保護された配信:
- アップデートは暗号化されたチャンネルを通じて配信される
- 各アプリインスタンスは暗号化の整合性を検証する
- 暗号化の失敗による自動リトライ機構
-
クライアントサイドセキュリティ:
- アップデートはインストール前に検証される
- 暗号化の失敗による自動ロールバック
- アプリの保護されたストレージ内に安全に鍵を保存する
この包括的なセキュリティアプローチにより、アプリのアップデートは次の攻撃から保護される
- 中間者攻撃
- サーバーサイドの侵害
- 未承認の変更
- リプレイ攻撃
- コンテンツの改ざん
アップデートライフサイクル
Capgoのアップデートプロセスは、デフォルトでは自動化されています。自動化されたプロセスは次のとおりです。
1. 自動アップデートチェック
プラグインは、次の状況で自動的にアップデートをチェックします。
- アプリ起動時
この動作は、次の設定によって制御されます。 autoUpdate 設定:
// capacitor.config.json
{
"plugins": {
"CapacitorUpdater": {
"autoUpdate": true // Enable automatic updates
}
}
}
手動で確認することもできます。 getLatest()
2. 自動ダウンロード
新バージョンが検出された場合、もし autoUpdate が有効になっている場合:
- ダウンロードは自動的に開始されます
- 進行状況は内部で追跡されます
- 失敗したダウンロードはアプリを開いたときに自動的にリトライされます
- 成功したダウンロードはアプリストレージに保存されます
このプロセスを監視するにはイベントを参照してください:
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__CAPGO_KEEP_0__がfalseの場合 - インストールが失敗した場合に自動ロールバック
プラグインは自動的にストレージを管理します:
- 失敗した更新を削除する場合に
autoDeleteFailed__CAPGO_KEEP_0__がtrueの場合 - 古いバージョンを削除する場合に
autoDeletePrevious__CAPGO_KEEP_0__がtrueの場合
更新の遅延
更新のインストールを制御するために、遅延条件を使用できます:
// 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_0__: 指定された日時以降にインストール
- __CAPGO_KEEP_0__: 次のネイティブアップデート以降にインストール
- __CAPGO_KEEP_0__: アプリが終了された後インストール
__CAPGO_KEEP_0__
- これは便利な機能です:
- オフピーク時間帯にアップデートをスケジュールする
- ユーザー活動とアップデートを調整する
- スムーズなアップデート体験を確保するためには、重要なタスク中の障害を防ぐ
アップデート状態
自動更新プロセス中、バンドルは次の状態を通過します:
- ダウンロード中: ダウンロード中
- 待機中: ダウンロード完了、インストール待機
- 成功: アップデートがインストールされ、有効
- エラー: アップデート失敗 (自動ロールバックトリガー)
ストアの適合性
Apple App Store ✅
Live UpdatesはApple App Storeのポリシーに完全に準拠しています。Apple Developer Program License Agreementに記載されているとおりです。
「解釈されたcodeは、Applicationにダウンロードできますが、そのようなcode: (a) Applicationの主な目的を変更しないようで、App Storeに提出されたApplicationの目的と広告された目的と一致しない機能や機能を提供しないようで、(b) 他のcodeやアプリケーションを販売するためのストアやストアーフロントを作成しないようで、(c) OSの署名、サンドボックス、またはセキュリティ機能をバイパスしないようでなければなりません。」
Capgoの更新は、Web層のみを変更し、すべてのプラットフォームのセキュリティ境界を尊重します。
Google Play Store ✅
Live UpdatesはGoogle Playポリシーに準拠しています。Device and Network Abuseポリシーによると、
「この制限は、codeが仮想マシンまたはインタプリタで実行されている場合、またはどちらもAndroid APIに間接的なアクセスを提供している場合に適用されません (例えば、JavaScriptがWebビューまたはブラウザ内で実行されている場合)。」
Capgoは、Webビューのコンテンツのみを更新するため、これらの許可されたガイドラインに従っています。
ベストプラクティス
- フェイズドロールアウトバージョン管理
- バージョンをすべての展開に追跡するバージョン管理
- ロールバックサポート: 問題から迅速な復旧
- デルタアップデート: 変更されたファイルのみダウンロード
ライブアップデートの使用時期
適切な場合:
- バグ修正
- UI改善
- コンテンツ更新
- 機能切り替え
不適切な場合:
- ネイティブ code 変更
- メジャーバージョンアップデート
- ネイティブ変更を必要とするセキュリティパッチ
Capgoの「ライブアップデートのしくみ」から続けてください
__CAPGO_KEEP_0__を使用している場合 How Live Updates Work in Capgo __CAPGO_KEEP_0__を使用してネイティブプラグインの作業を計画する場合、__CAPGO_KEEP_0__ プラグイン ディレクトリと接続してください Capgo プラグイン ディレクトリの製品ワークフロー Capgo プラグインズ by __CAPGO_KEEP_1__ Capacitor プラグインズ by Capgoの実装詳細 for the implementation detail in Capacitor Plugins by Capgo, プラグインの追加または更新の実装詳細 プラグインの追加または更新 Ionic Enterprise Plugin Alternatives Ionic Enterprise Plugin Alternativesの製品ワークフローについて Capgo Native Builds Capgo Native Buildsの製品ワークフローについて