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

How to Handle User Data in Capacitor Apps

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

How to Handle User Data in Capacitor Apps

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

  • データ最小化: 必要なアプリ機能ごとに、収集するデータを最小限に抑えます。
  • 安全なデータストレージ: 暗号化に使用するようにするため、 @capacitor/secure-storage プラグイン
  • データ保持: 定義された時間制限に基づいて、自動的に削除します。
  • ユーザー権限:ユーザーがデータをアクセス、削除、またはエクスポートできるようにします。
  • パーミッション管理:ユーザーが要求したパーミッションを拒否した場合に代替を提供し、パーミッションを要求するときに状況に応じてパーミッションを要求します。
  • OTAアップデート:セキュアなオーバー・ザ・エア更新を実現するために、Cloudflare、Capacitor、GitHub、Capgo、code、API、SDK、CLI、npm、bunなどのツールを使用します。 Capgo.

:Capacitorアプリでユーザーデータを扱う方法 Capacitor :Capacitorアプリでユーザーデータを扱う方法

Capacitor Framework Documentation Website

データ収集の削減

プライバシー規制に準拠するために、データ収集を管理するための構造化されたアプローチは、データ収集を最小限に抑えるためのCapacitorの組み込みツールを活用することで実現できます。

データ収集のレビュー

データフローをマッピングし、データラインエージュ・ビジュアライザーを使用して不要なデータが収集される可能性のある箇所を特定することで、データ収集を開始してください。プライバシーアイソメンター (PIA) ソフトウェアを使用すると、各データが本当に必要かどうかを評価することができます。ここでは、焦点を当てるべき領域を簡単に説明します。

データタイプ レビュー対象 アクションアイテム
ユーザー入力 フォームフィールドとバリデーション 不要なフィールドを削除
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.

CapgoのCapacitorのセキュリティ機能を活用して、これらの制御を強化します:

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

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

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

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

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

プラグインは、iOS KeychainとAndroid Keystoreなどの組み込みセキュリティ機能を使用して、敏感なデータを保護します。 @capacitor/secure-storage より大きな構造化されたデータセットの場合、 [1]@__CAPGO_KEEP_0__/__CAPGO_KEEP_1__-data-storage-sqlite @capgo/capacitor-data-storage-sqlite provides encrypted SQLite storage, and capgo/capacitor-persistent-account 再インストールしてもアカウントの状態を保持することができます。 capgo/capacitor-privacy-screen アプリSwitcherと最近のアプリのプレビューで敏感なUIを非表示にすることができます。

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

暗号化鍵を定期的に更新することは、セキュリティを向上させる良い方法です。鍵が一つでも破られても、残りのデータは安全に保たれます。 [2].

データ保存オプションの比較

データの敏感度に応じて、適切な保存ソリューションを選択する必要があります。以下の比較をご覧ください。

機能 セキュア ストレージ ローカル ストレージ
セキュリティ レベル 高 (暗号化) 基本
最適 トークン、パスワード 非機密設定
__CAPGO_KEEP_0__ 遅い (暗号化のため) 高速アクセス

セキュア ストレージ 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 データの保存に使用している場合、期限切れのレコードを自動的に削除するトリガーを設定できます。

CREATE TRIGGER remove_expired_data
AFTER INSERT ON user_data
BEGIN
  DELETE FROM user_data 
  WHERE expiration_date < CURRENT_TIMESTAMP;
END;

ユーザー データの削除オプション

ユーザーが自分のデータを管理できるようにすることは不可欠です。ここでは、実装できる 2 つの重要な機能を紹介します。

  • 特定のデータの削除:ユーザーのアカウントに関連付けられた特定のデータタイプを削除することを許可します。
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]
    );
  }
}
  • ユーザー データのエクスポート:ユーザーが保存されたデータを構造化された形式でダウンロードできるようにします。
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.

__CAPGO_KEEP_0__のパーミッション__CAPGO_KEEP_1__は、iOSとAndroid両方でパーミッションを統一的に管理するための統一されたアプローチを提供します。

Make sure the permissions you request align with your app’s data collection goals. Here’s a sample implementation for handling permission requests in a Capacitor app:

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

パーミッションの要求は、アプリのデータ収集目標と一致するようにすることが重要です。

__CAPGO_KEEP_0__アプリでパーミッションの要求を管理するサンプル実装

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の更新セキュリティ

アプリの更新中の データの整合性を確保するために、セキュアな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暗号化 __CAPGO_KEEP_0__
配信セキュリティ HTTPSで証明書ピンニング
アップデートの整合性 ハッシュ検証
バージョンの安全性 署名されたバージョン番号
失敗の回復 即時ロールバック機能

Capgo アップデートシステム

Capgo Live Update Dashboard Interface

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は以下のセキュリティツールを提供します。

  • エンドツーヘンド暗号化 更新パッケージを保護する
  • リアルタイムモニタリング 潜在的なセキュリティ脅威に対処するために迅速に対応する

「Capacitorアプリでユーザーデータを取り扱う方法」の続き

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

Live updates for Capacitor apps

When a web-layer bug is live, ship the fix through Capgo instead of waiting days for app store approval. Users get the update in the background while native changes stay in the normal review path.

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

コンテキスト: Capgo マーケティング ウェブサイト。役割: サポートする説明文またはメタ ディスクリプション。見られる場所: コンポーネント GetStarted.astro。Capgo の製品/ブランド名と開発者用語をそのまま保存。メッセージ キー `instant_updates_for_capacitor_apps_description` (Capacitor アプリのリアルタイム更新の説明)。

マーティンから人間のサポートを受けることができます。

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