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

How to Handle User Data in Capacitor Apps

Capacitorアプリでユーザーデータを取り扱う方法について学び、セキュリティ、法的合致性、データ管理のベストプラクティスについての効果的な戦略を学びましょう。

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

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

コンテンツマーケティング

How to Handle User Data in Capacitor Apps

Capacitorアプリでユーザーデータを取り扱う方法 Capacitor アプリは、安全なストレージ、データ保護法への適合性、データ保護法の明確な保持ポリシーが必要です。 GDPR そして CCPA. このガイドでは、データ収集を最小限に抑え、敏感情報を安全に保管し、権限を効果的に管理する方法を説明します。ここでは、簡単な概要をご紹介します。

  • データ最小化: 必要なアプリ機能ごとに、必要なデータのみを収集します。
  • 安全なデータストレージ: 暗号化ツールである @capacitor/secure-storage プラグインを使用します。
  • データ保持: 定義された時間制限に基づいて、自動的に削除します。
  • ユーザー権限: ユーザーがデータをアクセス、削除、またはエクスポートできるようにします。
  • 許可管理: 要求された許可をコンテキストに基づいて要求し、拒否された要求に対して代替を提供します。
  • OTA更新: セキュアなオーバー・ザ・エア更新を実現するツールを使用します。 Capgo.

イオニクンを使用する方法 Capacitor セキュアなストレージ

Capacitor Framework Documentation Website

データ収集の削減

プライバシー規制に準拠するために、データ収集を管理するための構造化されたアプローチを取ることが重要です。Capacitorのデータ収集を最小限に抑えるための組み込みツールを活用することで、実際のステップを実行してアプリのデータ慣行を改善できます。

データ収集のレビュー

データフローをマッピングし始めましょう。データの流れを視覚化するツールや、不要なデータが収集される可能性のある箇所を特定するデータの流れを視覚化するツールを使用してください。プライバシー影響評価ソフトウェアは、各データが本当に必要かどうかを評価するのに役立ちます。ここでは、焦点を当てるべき領域を簡単に説明します。

データタイプ レビュー対象 アクションアイテム
ユーザー入力 フォームフィールドと検証 不要なフィールドを削除
APIの呼び出し リクエスト/レスポンス ペイロード 不要のデータフィールドをフィルタする
ストレージ ページ/エリア: Capgo Builder / ネイティブクラウドビルド製品ページ。役割: 短いUIラベルまたはナビゲーションアイテム。ページnative-build.astroで見られる。メッセージキー`native_build_v2_trust_stor_lbl` (Native Build V2 Trust Stor Lbl)。|ページ/エリア: Enterprise製品/価格ページ。役割: 短いUIラベルまたはナビゲーションアイテム。ページenterprise.astroで見られる。メッセージキー`enterprise_plugins_legacy_storage` (Enterprise Plugins Legacy Storage)。 キャッシュされたデータと永続化データ
ストレージの使用を最適化する 分析 ページ/エリア: Capgoマーケティングウェブサイト。役割: 短いUIラベルまたはナビゲーションアイテム。メッセージキー`analytics` (Analytics)。

使用状況のトラッキング

必要なメトリックのみを保持する

// 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].

各データポイントが特定の目的を果たすように、明確にデータを収集することについて説明する

例えば、天気予報機能を持つアプリでは、フルアドレスではなく、単に郵便番号を収集する必要がある場合があります。このアプローチにより、コアアプリ機能に必要な情報のみを収集することができます。APIは郵便番号です。

In Capacitorのセキュリティ機能を組み込んで、これらの制御を強化します:

  • 可能な限りドロップダウンメニューを使用するのではなく、フリーテキストフィールドを使用してください。
  • テキスト入力フィールドの文字数制限を設定します。

定期的なオーディットを実施し、自動化された検出ツールを使用して、データ収集の実践が効率的で、目的の機能と一致していることを確認します。

データセキュリティとストレージ

データ収集の境界を定義した後、ユーザー情報を保護し、データ最小化の原則に従う必要があります。

セキュアなストレージの設定

プラグインは、iOS KeychainとAndroid Keystoreなどの組み込みセキュリティ機能を使用して、敏感なデータを保護します。 @capacitor/secure-storage . 大規模な構造化データセットの場合、@__CAPGO_KEEP_0__/__CAPGO_KEEP_1__-data-storage-sqliteは暗号化されたSQLiteストレージを提供します。 [1]データストレージのSQLITE @capgo/capacitor-data-storage-sqlite 大規模な構造化データセットの場合、@__CAPGO_KEEP_0__/__CAPGO_KEEP_1__-data-storage-sqliteは暗号化されたSQLiteストレージを提供します。 @capgo/capacitor-persistent-account @__CAPGO_KEEP_0__/__CAPGO_KEEP_1__-持続的なアカウント @capgo/capacitor-privacy-screen @__CAPGO_KEEP_0__/__CAPGO_KEEP_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' });

アプリSwitcherと最近のアプリのプレビューで敏感なUIを隠します。

データ暗号化方法 クライアントサイドの暗号化を追加することで、さらに保護することができます。ライブラリとして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 年間 (削除) 機能向上をサポート
マーケティングのプライアシー オプトアウトまたはアカウント削除まで consent 要件に従う

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;

ユーザーデータの削除

:ユーザーアカウントに関連付けられた特定のデータタイプを削除する機能を提供します。

  • ユーザーデータのエクスポート:ユーザーが保存されたデータを構造化された形式でダウンロードできるようにします。
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の許可設定管理は、iOSとAndroid両方で許可設定を統一的に管理するための統一されたアプローチを提供します。

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

ここでは、__CAPGO_KEEP_0__アプリで許可設定の要求を管理するためのサンプル実装を示します。

許可設定の拒否管理

タイミング戦略 ベストユースケース
即時 特定の機能が必要な場合
状況に応じて 初回起動
コンテキスト 重要な機能が必要な場合
遅延 例えば、ユーザーが写真を撮るアクションを開始したときにカメラへのアクセスを要求できます:

状況に応じた要求は、事前に要求するよりも承認率を 50% 高めることができます。

const captureImage = async () => {
  const userStartedCapture = true;

  if (userStartedCapture) {
    const granted = await permissionHandler('camera');

    if (granted) {
      await startCamera();
    } else {
      showUploadOption();
    }
  }
};

__CAPGO_KEEP_0__ [2]. 使い易い体験を確保するため、セッションをまたいだユーザーの決定を保存する許可状態トラッカーを維持する必要があります。

許可が取り扱われていると、オーバー・ザ・エア (OTA) デプロイメントの特に、セキュリティを確保することに焦点を移すことができます。

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.

Update Package Signing

Signing update packages is a critical step in protecting against unauthorized code changes. Here are some key measures to secure OTA updates:

Security Measure 方法
コンテンツ保護 AES暗号化
配信セキュリティ HTTPSで証明書ピンニング
バージョン安全 署名バージョン番号
失敗回復 即時ロールバック機能
__CAPGO_KEEP_0__ アップデートシステム

Capgo Live Update ダッシュボード インターフェース __CAPGO_KEEP_0__は、__CAPGO_KEEP_1__アプリのセキュアなOTAアップデートを自動化する安全な機能を提供することで、__CAPGO_KEEP_2__アプリのアップデートシステムを簡素化します。ここでは、__CAPGO_KEEP_2__のアップデートシステムをアプリ内で使用する方法の例を示します。

Capgo

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 ユーザーの同意が必要です
両方 セキュリティチェックと適切なドキュメント

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に記載されているパーミッション制御を確立し、実施する

「Capgo」を活用する

OTA更新を管理するチーム向けに、「Capgo」は以下のセキュリティツールを備えています:

  • エンドツーエンド暗号化 コンテキスト: Capgo マーケティング ウェブサイト。役割: ショート UI ラベルまたはナビゲーション アイテム。メッセージ キー `end_to_end_encryption` (End To End Encryption)。
  • アップデート パッケージをセキュリティで保護する リアルタイム監視

Keep going from How to Handle User Data in Capacitor Apps

「__CAPGO_KEEP_0__ アプリでユーザーデータを管理する方法」から続けて 「Capacitor アプリでユーザーデータを管理する方法」を使用している場合 セキュリティとコンプライアンスを計画するには、接続する 暗号化 暗号化の実装詳細 コンプライアンス コンプライアンスの実装詳細 Capgo セキュリティ スキャナー Capgo セキュリティ スキャナーの製品ワークフロー Capgo セキュリティ Capgo セキュリティの製品ワークフロー Capgo トラスト センター Capgo トラスト センターの製品ワークフロー

Live updates for Capacitor apps

Capacitor アプリのバグが生じた場合、Capgo を使用して修正を配信するのではなく、数日間待ってアプリストアの承認を待つのではなく、ユーザーはバックグラウンドでアップデートを受け取り、ネイティブの変更は通常のレビュー経路を通じて実施される。

Capacitor アプリのユーザーに直接サポートを提供する

始める

Capacitor アプリの最新情報

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