Capacitorアプリでユーザーデータを Capacitor Capacitorアプリでは、安全なデータストレージ、明確な保持ポリシー、データ保護法への準拠が必要です。 GDPR そして CCPA. このガイドでは、データ収集を最小限に抑え、敏感情報を安全に保管し、権限を効果的に管理する方法を説明します。ここでは、簡単な概要をご紹介します。
- データ最小化: 必要なアプリ機能ごとに、収集するデータを最小限に抑えます。
- 安全なデータストレージ: 暗号化に使用するようにするため、
@capacitor/secure-storageプラグイン - データ保持: 定義された時間制限に基づいて自動的に削除します。
- ユーザー権限: ユーザーがデータにアクセス、削除、またはエクスポートできるようにします。
- 許可管理: 要求許可をコンテキストに基づいて、拒否された要求の代替を提供します。
- OTA更新: セキュアなオーバー・ザ・エア更新を、 Capgo.
イオニクスを使用する方法 Capacitor セキュアなストレージ

データ収集の削減
プライバシー規制に準拠するために、データ収集を管理するための構造化されたアプローチを取ることは、データ収集を最小限に抑えるためのCapacitorの組み込みツールを活用することで実現できるため、実際的なステップを実行してアプリのデータ慣行を改善することができます。
データ収集のレビュー
データフローをマッピングし始めましょう。データの流れを視覚化するツールや、不要なデータが収集される可能性のある箇所を特定するためのデータの流れを視覚化するツールを使用してください。プライバシー影響評価ソフトウェアは、各データが本当に必要かどうかを評価するためのガイドを提供します。ここでは、焦点を当てるべき領域を簡単に説明します。
| データタイプ | レビューの焦点 | アクションアイテム |
|---|---|---|
| ユーザー入力 | フォームフィールドと検証 | 不要なフィールドを削除 |
| APIの呼び出し | リクエスト/レスポンスのペイロード | 不要のデータフィールドをフィルタする |
| ストレージ | キャップゴー・ビルダー/ネイティブ・クラウド・ビルド・製品ページ | キャッシュされたデータと永続化データ |
| ストレージの使用を最適化する | 分析 | キャップゴー・マーケティング・ウェブサイト |
使用状況の追跡
必要なメトリクスのみを保持する
// Purpose-driven data collection example
const userPreferences = {
location: "Used for local weather updates",
notification: "Needed for sending alerts"
};
If your app has a weather feature, it might only require a zip code rather than a full address. This approach ensures you’re gathering only the information necessary for core app functions[1][5].
各データポイントが特定の目的を果たすように明確にする
Use validation tools to limit the amount of data collected through forms and API calls. Combine client-side validation with server-side verification to enforce these limits effectively.
In Capacitorのセキュリティ機能を組み込んで、これらの制御を強化します:
- 可能な限りドロップダウンメニューを使用するのではなく、フリーテキストフィールドを使用してください。
- テキスト入力フィールドの文字数制限を設定します。
定期的なオーディットを実施し、自動化された検出ツールを使用して、データ収集の実践が効率的で、目的の機能と一致していることを確認します。
データセキュリティとストレージ
データ収集の境界を定義した後、ユーザー情報を保護し、データ最小化の原則に従う必要があります。
セキュアなストレージの設定
The @capacitor/secure-storage プラグインは、iOS KeychainとAndroid Keystoreなどの組み込みセキュリティ機能を使用して、敏感なデータを保護します。 [1]より大きな構造化されたデータセットの場合、 @capgo/capacitor-data-storage-sqlite 暗号化されたSQLiteストレージを提供します。 @capgo/capacitor-persistent-account @__CAPGO_KEEP_0__/__CAPGO_KEEP_1__-persistent-account @capgo/capacitor-persistent-account @__CAPGO_KEEP_0__/__CAPGO_KEEP_1__-persistent-account
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' });
データの取り扱い方法
クライアントサイドの暗号化を追加することは、別の保護のレイヤーです。ライブラリとしては CryptoJS が利用できます。敏感情報を暗号化することができます:
// Basic encryption/decryption implementation
const encryptData = (data: string, key: string): string => {
return CryptoJS.AES.encrypt(data, key).toString();
};
暗号化キーの定期的なローテーションは、セキュリティを向上させる賢い方法です。1つのキーの侵害でも、残りのデータは安全です [2].
ストレージオプションの比較
データの敏感度に応じて、適切なストレージソリューションを選択する必要があります。ここでは、簡単な比較を紹介します:
| 機能 | セキュア ストレージ | ローカル ストレージ |
|---|---|---|
| セキュリティ レベル | 高 (暗号化) | 基本 |
| 最適 | トークン、パスワード | 非機密設定 |
| パフォーマンス | 遅い (暗号化のため) | 高速アクセス |
セキュア ストレージ API は、認証トークンや個人情報などの重要な情報の保存に適した堅牢な選択肢です [1][4]. Its 暗号化機能 データの保存期間を規定する保有ポリシーと一致するため、データへの制御されたアクセスを可能にします。 [2].
sbb-itb-f9944d2
データストレージの時間制限
データの保存期間を規定する保有ポリシーを明確にすることは、データの最小化の原則と一致するため、情報が必要以上に保存されないようにするのに役立ちます。
保存時間のルール
ユーザーデータの異なる種類には、目的と感度のレベルに基づいて定義された保存期間が必要です。以下に、データの保存期間を管理するための提案されたフレームワークが示されています。 Capacitor アプリ:
| データタイプ | 保存期間 | 正当化 |
|---|---|---|
| アカウントデータ | アカウント削除または 2 年間の非アクティブ期間まで | アカウント関連の操作に必要 |
| 取引記録 | 7 年 | 金融規制への適合 |
| 分析データ | 90 日間 (匿名化)、1 年間 (削除) | 機能改善をサポート |
| マーケティングのプライファレンス | オプトアウトまたはアカウント削除まで | 同意要件に従う |
Capacitorアプリでユーザーデータを取り扱う方法の例です。
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 データの自動削除オプション
CREATE TRIGGER remove_expired_data
AFTER INSERT ON user_data
BEGIN
DELETE FROM user_data
WHERE expiration_date < CURRENT_TIMESTAMP;
END;
ユーザーデータの削除オプション
ユーザーが特定のデータタイプを削除できるようにする
- ユーザーが保存されたデータを構造化された形式でダウンロードできるようにする__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__のバックグラウンドフェッチ機能は、この目的のために役立つツールです。__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アプリの開発者にとっては、特に重要です。データ保持戦略に導くべきです。
アプリの許可設定の管理
Handling app permissions carefully is key to safeguarding user data while ensuring your app functions as intended. By managing permissions properly, you can limit access to only the device features your app truly needs. Capacitor’s Permissions API offers a unified approach to managing permissions on both iOS and 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();
}
}
};
許可の要求のタイミング
許可の要求のタイミングは重要です。戦略的なタイミングで許可の要求を出すと、ユーザーの受け入れ率が大幅に改善されます。
| タイミング戦略 | ベストユースケース |
|---|---|
| 即時 | 特定の機能が必要な場合 |
| 状況に応じて | 非必須機能の場合 |
| 初回起動 | 主な機能が必要な場合 |
| 遅延 | ユーザーの旅程の後半にオプション機能 |
例えば、ユーザーが写真を撮るアクションを開始したときにカメラアクセスを要求できます:
const captureImage = async () => {
const userStartedCapture = true;
if (userStartedCapture) {
const granted = await permissionHandler('camera');
if (granted) {
await startCamera();
} else {
showUploadOption();
}
}
};
状況に応じた要求は、事前に要求するよりも受け入れ率が 50% 高くなります。 [2]. 使ってユーザーがスムーズな体験を楽しめるように、セッションをまたいでユーザーの決定を保存するパーミッションの状態トラッカーを維持する必要があります。
パーミッションが処理されたら、特にオーバー・ザ・エア(OTA)展開の場合にアップデートをセキュアにすることに焦点を当てることができます。
OTAアップデートのセキュリティ
アップデートの際にデータの整合性を確保するために アプリのアップデート, 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.
アップデートパッケージの署名
Signing update packages is a critical step in protecting against unauthorized code changes. Here are some key measures to secure OTA updates:
| セキュリティ対策 | 対策の実施方法 |
|---|---|
| コンテンツ保護 | AES暗号化 |
| Delivery Security | HTTPS with certificate pinning |
| Update Integrity | Hash verification |
| Version Safety | Signed version numbers |
| Failure Recovery | Instant rollback capability |
Capgo Update System

Capgo simplifies secure OTA updates for Capacitor apps by offering automated security features. Here’s an example of how to use Capgo’s update system in your app:
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 | ユーザーの同意が必要です |
| 両方 | セキュリティチェックと適切なドキュメント |
以下は、ストアに準拠した更新を実装する例です:
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に記載されている権限制御を確立し実施する
Capgoを利用して
OTA更新を管理するチーム向けに、Capgoは以下のセキュリティツールを備えています:
- エンドツーエンド暗号化 コンテキスト:Capgoマーケティングウェブサイト。役割:短いUIラベルまたはナビゲーションアイテム。メッセージキー`end_to_end_encryption` (End To End Encryption)。
- アップデートパッケージをセキュリティ化する リアルタイムモニタリング
Keep going from How to Handle User Data in Capacitor Apps
Capacitorアプリでユーザーデータを扱う方法については続きます。 How to Handle User Data in Capacitor Apps セキュリティとコンプライアンスを計画するには、接続する 暗号化 暗号化の実装詳細 コンプライアンス コンプライアンスの実装詳細 Capgo セキュリティ スキャナー Capgo セキュリティ スキャナーの製品ワークフロー Capgo セキュリティ Capgo セキュリティの製品ワークフロー Capgo トラスト センター Capgo トラスト センターの製品ワークフロー