ユーザーデータを取り扱う Capacitor アプリは安全なストレージ、データ保持の明確なポリシー、データ保護法の遵守(例:GDPR、CCPA)を必要とします。 このガイドでは、データ収集の最小化、敏感情報の保護、権限の効果的な管理について説明します。ここでは、簡単な概要を紹介します。 データ最小化 :特定のアプリ機能に必要なものだけを収集する。. 安全なデータストレージ
- :エンクリプションのためのツールを使用する(例:Capacitorのプラグイン)。データ保持の期間の設定
- :データをどのくらい長く保持するかを決定する。Data Retention
@capacitor/secure-storage:データをどのくらい長く保持するかを決定する。 - Data Protection Laws and Regulations (Data Protection Laws and Regulations): 時間制限に基づいて自動的に削除する。
- ユーザー権限: ユーザーがデータを参照、削除、またはエクスポートできるようにします。
- 権限管理: 要求された権限をコンテキストに基づいて要求し、拒否された要求に対して代替を提供します。
- OTA更新: セキュアなオーバー・ザ・エア更新を実現するために使用できるツールを提供します。 Capgo.
Ionicの使用方法 Capacitor セキュアなストレージ

__CAPGO_KEEP_0__によるデータ収集の削減
プライバシー規制に準拠するために、データ収集のレビュー、計画、管理に構造化されたアプローチが鍵です。データ収集を最小限に抑えるCapacitorの組み込みツールを活用することで、実際のステップでアプリのデータ慣行を改善できます。
データ収集のレビュー
データフローの流れをマッピングし始めましょう。データ系譜視覚化ツールを使用して、不要なデータが収集される可能性のある領域を特定し、プライバシー影響評価(PIA)ソフトウェアを使用して、各データの必要性を評価することができます。ここでは、焦点を当てるべき領域の詳細を示します。
| データタイプ | レビュー対象 | 実行するタスク |
|---|---|---|
| ユーザー入力 | フォームフィールドと検証 | 不要なフィールドを削除 |
| APIの呼び出し | リクエスト/レスポンス ペイロード | 不要なデータ フィールドをフィルタする |
| ストレージ | キャッシュされたデータと永続データ | ストレージ使用量を最適化する |
| 分析 | 使用状況のトラッキング | 必要なメトリクスだけを保持する |
データ収集の目標
データ収集の理由を明確にする。各データ ポイントは、特定の目的を果たすようにする。
// Purpose-driven data collection example
const userPreferences = {
location: "Used for local weather updates",
notification: "Needed for sending alerts"
};
例えば、天気予報機能があるアプリでは、フル アドレスではなく、単に郵便番号 code を収集するだけで済むかもしれません。このアプローチにより、コア アプリ機能に必要な情報だけを収集できます。[1][5].
データ入力制御
フォームやAPIコールを通じて収集されるデータの量を制限するために、検証ツールを使用してください。クライアント側の検証とサーバー側の検証を組み合わせて、これらの制限を効果的に実施してください。
Capacitorのセキュリティ機能を組み込んで、これらの制御を強化してください。
- 可能な限りドロップダウンメニューを使用するのではなく、フリーテキストフィールドを使用してください。
- テキスト入力フィールドの文字数制限を設定してください。
自動化された検出ツールを使用して、定期的なアクセス審査をスケジュールしてください。データ収集の実践が効率的で、目的の機能と一致していることを確認してください。
データセキュリティとストレージ
データ収集の境界を定義した後、ユーザー情報を保護し、データ最小化の原則に従う必要があります。
セキュアなストレージの設定
プラグインは、iOS KeychainとAndroid Keystoreなどの組み込みセキュリティ機能を使用して、敏感なデータを保護します。 @capacitor/secure-storage データ暗号化方法 [1].
import { SecureStorage } from '@capacitor/secure-storage';
// Store sensitive data
await SecureStorage.set({
key: 'authToken',
value: 'user-specific-token'
});
// Retrieve stored data
const { value } = await SecureStorage.get({ key: 'authToken' });
クライアント側の暗号化を追加することで、保護の別の層が実現します。ライブラリなど
Adding client-side encryption is another layer of protection. Libraries like CryptoJS は機密情報を暗号化するのに役立ちます:
// Basic encryption/decryption implementation
const encryptData = (data: string, key: string): string => {
return CryptoJS.AES.encrypt(data, key).toString();
};
__CAPGO_KEEP_0__ [2].
暗号化キーを定期的にローテートすることは、セキュリティを向上させる賢い方法です。 これにより、1 つのキーが侵害された場合でも、残りのデータは安全に保たれます。
__CAPGO_KEEP_1__
| データの機密度に応じて、適切なストレージソリューションを選択する必要があります。 以下は、比較の簡単な例です。 | __CAPGO_KEEP_2__ | __CAPGO_KEEP_3__ |
|---|---|---|
| __CAPGO_KEEP_4__ | 高 (暗号化) | __CAPGO_KEEP_5__ |
| __CAPGO_KEEP_6__ | トークン、パスワード | 機密情報以外の設定 |
| パフォーマンス | 暗号化により速度が低下 | 高速アクセス |
APIのSecure Storageは、認証トークンやユーザー情報などの重要な情報の保存に適した選択肢です。 [1][4]. Its 暗号化機能 データの保持ポリシーと一致するように、指定された時間枠内でデータへの制御されたアクセスを可能にします。 [2].
sbb-itb-f9944d2
データストレージの有効期間
データの保持ポリシーを明確にすることで、データの最小限化の原則に沿った情報の保存期間を確保し、情報が必要以上に保存されないようにします。
データ保持期間ルール
ユーザーデータの種類ごとに、目的と敏感度に応じた保持期間を定義する必要があります。以下は、データ保持を管理するための提案されたフレームワークです。 Capacitor アプリ:
| データタイプ | 保持期間 | 理由 |
|---|---|---|
| アカウントデータ | アカウント削除または 2 年間の非活性期間 | アカウント関連の操作が必要 |
| 取引記録 | 7 年 | 金融規制への適合 |
| 分析データ | 90 日間 ( 匿名化 )、1 年間 ( 削除 ) | 機能改善をサポート |
| マーケティングのプライバシー設定 | アカウント削除またはオプトアウトまで | 同意要件に準拠 |
データの有効期限を設定する方法の例です。
async function storeDataWithExpiration(key: string, value: any, retentionDays: number) {
const item = {
value: value,
expiration: Date.now() + (retentionDays * 24 * 60 * 60 * 1000)
};
await Preferences.set({ key, value: JSON.stringify(item) });
}
自動データ削除
データの自動削除を自動化すると、コンプライアンスを維持し、手動の介入を減らすことができます。Capacitorのバックグラウンドフェッチ機能は、このような場合に便利なツールです。
import { BackgroundFetch } from '@capacitor/background-fetch';
BackgroundFetch.registerTask({
taskId: 'data-cleanup',
delay: 3600000,
periodic: true,
requiresNetworkConnectivity: false
}, async () => {
await cleanExpiredData();
return BackgroundFetch.Result.NewData;
});
SQLiteを使用している場合、有効期限切れのレコードを自動的に削除するトリガーを設定できます。 SQLite SQLite
CREATE TRIGGER remove_expired_data
AFTER INSERT ON user_data
BEGIN
DELETE FROM user_data
WHERE expiration_date < CURRENT_TIMESTAMP;
END;
ユーザー データの削除オプション
__CAPGO_KEEP_0__のユーザーにデータ管理ツールを提供することは不可欠です。ここでは、実装する2つの重要な機能を紹介します。
- 特定のデータの削除: __CAPGO_KEEP_0__アカウントに関連付けられた特定のデータタイプを削除することを許可します。
async function deleteSpecificData(userId: string, dataType: string) {
await Preferences.remove({ key: `${userId}_${dataType}` });
if (db) {
await db.run(
'DELETE FROM user_data WHERE user_id = ? AND data_type = ?',
[userId, dataType]
);
}
}
- ユーザー データのエクスポート: __CAPGO_KEEP_0__の保存されたデータを構造化された形式でダウンロードすることを可能にします。
async function exportUserData(userId: string) {
// Gathers all user data for export
const userData = await collectUserData(userId);
return JSON.stringify(userData);
}
フランスのデータ保護当局 CNIL 、は、保持期間がアプリのコア機能と一致することを強調しています。 [3]この原則は、特にCapacitorアプリ開発者にとっては、特に重要です。この原則は、データ保持戦略を導くものです。
アプリ パーミッションの管理
Capacitorのパーミッション APIは、iOSとAndroid両方でパーミッションを統一的に管理するための統一されたアプローチを提供します。
許可要求の手順
Capacitor アプリで許可要求を取り扱うためのサンプル実装を以下に示します。
import { Permissions } from '@capacitor/core';
const permissionHandler = async (permissionType: string) => {
const status = await Permissions.query({ name: permissionType });
if (status.state === 'granted') {
return true;
}
const shouldProceed = await showExplanationDialog(
`We need ${permissionType} access to provide core functionality`
);
if (shouldProceed) {
const result = await Permissions.request({ name: permissionType });
return result.state === 'granted';
}
return false;
};
許可が拒否された許可の管理
ユーザーが許可要求を拒否した場合、明確な代替案とガイダンスを提供してください。以下の例を参照してください。
const handleDeniedPermission = async (permissionType: string) => {
const status = await Permissions.query({ name: permissionType });
if (status.state === 'denied') {
const alternatives = {
camera: 'manual photo upload',
location: 'manual address entry',
notifications: 'in-app message center'
};
showAlternativeFeature(alternatives[permissionType]);
if (status.canOpenSettings) {
offerSettingsRedirect();
}
}
};
許可要求のタイミング
許可を求めるタイミングは重要です。戦略的なタイミングにより、ユーザーの受け入れ率を大幅に改善できます。以下のタイミング戦略の概要をご覧ください。
| タイミング戦略 | ベストケース |
|---|---|
| 即時 | 特定の機能が必要なとき |
| 文脈依存 | 非批判的な機能 |
| First Launch | 必要な機能の初期設定 |
| 遅延 | ユーザー経路の後半にオプション機能 |
例えば、カメラアクセスのリクエストは、ユーザーが写真を撮るアクションを開始したときにのみ行うことができます。
const captureImage = async () => {
const userStartedCapture = true;
if (userStartedCapture) {
const granted = await permissionHandler('camera');
if (granted) {
await startCamera();
} else {
showUploadOption();
}
}
};
ユーザーがアクションを実行する際にリクエストするようにすると、リクエストの受け入れ率が50%向上する可能性があります。 [2]許可の状態をセッション間で保存する許可状態トラッカーを維持することで、Smoothなエクスペリエンスを確保できます。
許可が取り扱われている後、セキュアなアップデートに焦点を当てることができます。特に、OTA (Over-The-Air) デプロイメントの場合です。
OTA Update Security
データの不正性を防ぐために、 アプリの更新, it’s crucial to use secure OTA (Over-The-Air) update processes. These updates help prevent unauthorized changes to app code, which could otherwise bypass limits on data collection.
パッケージ署名の更新
署名されたパッケージの更新は、未承認のcode変更に対処するための重要なステップです。ここでは、OTA更新のセキュリティを確保するための重要な対策を紹介します。
| セキュリティ対策 | 実施方法 |
|---|---|
| コンテンツ保護 | AES暗号化 |
| 配信セキュリティ | HTTPSと証明書ピンニング |
| 更新の整合性 | ハッシュ検証 |
| バージョン安全 | 署名されたバージョン番号 |
| エラー復旧 | 即時ロールバック機能 |
Capgo アップデートシステム

Capgoは、CapacitorアプリのセキュアなOTAアップデートを自動化する安全な機能を提供することで、CapacitorアプリのセキュアなOTAアップデートをCapgoが簡素化します。ここでは、Capgoのアップデートシステムをアプリ内で使用する方法の例を示します。
import { CapacitorUpdater } from '@capgo/capacitor-updater';
const secureUpdate = async () => {
try {
const update = await CapacitorUpdater.download({
version: 'latest',
validateSignature: true
});
if (update.status === 'success') {
await CapacitorUpdater.set(update);
}
} catch (error) {
await CapacitorUpdater.rollback();
}
};
このアプローチでは、更新が検証され、セキュアになり、ロールバックオプションがエラーの場合に用意されます。
ストアポリシーへの準拠
OTAアップデートのためにアプリストアのガイドラインに準拠する必要があります。[1][6][7]各プラットフォームには、データの保持とセキュリティポリシーに沿ったアップデートを確実にするために必要な特定の要件があります。
| プラットフォーム | 準拠要件 |
|---|---|
| iOS | JavaScriptまたはアセットの更新のみ |
| Android | ユーザーの同意が必要です |
| 両方 | セキュリティチェックと適切なドキュメント |
Capgoのストアに準拠した更新の実装例は以下のようになっています。
const compliantUpdate = async () => {
const userConsent = await requestUpdateConsent();
if (userConsent) {
await CapacitorUpdater.setUpdateConfig({
type: 'assets-only',
scope: 'ui-updates' // Updates limited to UI components
});
}
};
const preventDowngrade = async (newVersion, currentVersion) => {
const versions = await CapacitorUpdater.getVersions();
if (versions.current.buildNumber > newVersion.buildNumber) {
throw new Error('Downgrade attempt detected');
}
};
概要
重要なポイント
ユーザーデータを効果的に管理するには、次の基本戦略を組み合わせる必要があります。
- 必要なデータのみを収集する。
- プラットフォーム固有の暗号化を使用して保護する。
- データ保持期限の自動化
- 詳細な権限制御の設定
データ収集から自動削除まで、すべてのステップを組み合わせて、法的遵守を確実にする
実装手順
これらの戦略を実行するには:
- セクション2で説明されている方法でデータフローのアウトレイスを実施する
- セクション3で説明されている方法でストレージセキュリティを強化する
- セクション4に記載されている方法で自動削除プロセスを設定する
- セクション5に記載されている方法で権限制御を確立し、強制する
管理者がOTA更新を管理するチームには、Capgoが提供する、セキュリティツールが組み込まれており、これらの取り組みと一致しています:
Capgo
- エンドツーエンド暗号化 セキュリティアップデートパッケージを保護する。
- リアルタイムモニタリング 潜在的なセキュリティ脅威に対処するために迅速に取り組む。