跳过主要内容

如何在Capacitor应用中处理用户数据

了解移动应用中处理用户数据的有效策略,重点是安全性、合规性和数据管理最佳实践。

马丁·多纳迪厄

马丁·多纳迪厄

内容营销专家

如何在Capacitor应用中处理用户数据

处理用户数据在 Capacitor 应用中需要安全存储、清晰的保留政策和遵守数据保护法规如 GDPRCCPA. 本指南解释了如何最小化数据收集、安全存储敏感信息和有效管理权限。以下是一些快速概述:

  • 数据最小化: 只收集必要的特定应用功能。
  • 安全存储: 使用工具如 @capacitor/secure-storage 插件进行加密。
  • 数据保留期: 根据定义的时间限制自动删除。
  • 用户权限: 允许用户访问、删除或导出他们的数据。
  • 权限管理: 在请求被拒绝时提供替代方案,根据上下文请求权限。
  • OTA更新: 使用工具如 Capgo.

如何使用Ionic Capacitor 安全存储

Capacitor 框架文档网站

减少数据收集

遵守隐私法规的关键是采取结构化的方法来审查、规划和管理数据收集。通过利用Capacitor内置的工具来减少数据收集,您可以采取实际步骤来改善您的应用程序的数据实践。

数据收集审查

首先,通过映射出数据如何流经您的应用程序来开始。使用数据线索可视化工具来找出可能收集了不必要数据的区域。隐私影响评估(PIA)软件可以指导您评估每个数据项是否真正需要。以下是需要关注的领域:

数据类型审查重点行动项
用户输入表单域和验证去除不必要的域
API Calls请求/响应负载过滤掉额外的数据域
存储缓存和持久数据优化存储使用
分析使用跟踪保留仅必要的指标

数据收集目标

明确每个数据点的收集目的。每个数据点都应为核心功能服务。例如:

// Purpose-driven data collection example
const userPreferences = {
  location: "Used for local weather updates",
  notification: "Needed for sending alerts"
};

如果您的应用程序具有天气功能,则可能只需要邮政编码code而不是完整地址。这一方法确保您只收集必要的信息来实现核心功能[1][5].

数据输入控制

使用验证工具来限制通过表单和API调用的数据收集量。结合客户端验证和服务器端验证来有效地实施这些限制

在这些控制中,集成Capacitor的安全功能来增强这些控制:

  • 在可能的情况下使用下拉菜单代替自由文本字段
  • 为文本输入字段设置字符限制

定期(每季度)使用自动发现工具进行审计,以确保您的数据收集实践与应用程序的预期功能保持一致

数据安全和存储

一旦您定义了数据收集边界,确保用户信息安全并遵守数据最小化原则就变得至关重要

设置安全存储

安全存储设置 @capacitor/secure-storage 插件使用内置的安全功能,如 iOS Keychain 和 Android Keystore,来保护敏感数据 [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' });

数据加密方法

在客户端加密是另一种保护措施。类似于 CryptoJS 的库可以帮助加密敏感信息:

// Basic encryption/decryption implementation
const encryptData = (data: string, key: string): string => {
  return CryptoJS.AES.encrypt(data, key).toString();
};

定期轮换加密密钥是提高安全性的聪明方法。这确保即使一个密钥被破坏,数据仍然安全 [2].

比较存储选项

选择合适的存储解决方案取决于数据的敏感度。以下是快速比较:

功能安全存储本地存储
安全级别高级(加密)基本
适合令牌、密码非敏感设置
性能较慢(加密原因)更快的访问

Secure Storage API 是存储关键信息,如身份验证令牌和个人用户数据的坚实选择 [1][4]。它的 加密功能 也符合保留政策,允许在指定时间框架内对数据进行控制访问 [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;
});

If you’re using __CAPGO_KEEP_0__ for storage, you can set up triggers to automatically delete expired records: SQLite User Data Removal Options

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

Providing users with tools to manage their data is essential. Here are two key features you can implement:

Delete Specific Data

  • : Allow users to remove certain data types tied to their account.Export User Data
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]
    );
  }
}
  • : Enable users to download their stored data in a structured format.The French data protection authority
async function exportUserData(userId: string) {
  // Gathers all user data for export
  const userData = await collectUserData(userId);
  return JSON.stringify(userData);
}

CNIL highlights that retention periods must align with the core functionality of the app Data storage and management [3]. 这一原则尤其适用于 Capacitor 应用程序开发人员,并应指导您的数据保留策略。

App 权限控制

谨慎处理应用程序权限至关重要,以保护用户数据,同时确保您的应用程序按预期运行。通过合理管理权限,您可以限制对设备功能的访问,只允许您的应用程序真正需要的功能。 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();
    }
  }
};

权限请求的时机

您何时请求权限至关重要。战略性地选择时机可以显著提高用户接受率。以下是时机策略的快速概述:

时机策略最佳用例
即时当需要特定功能时
上下文相关对于非关键功能
首次启动对于需要在用户启动前就必须的核心功能
延迟对于用户旅程中的可选功能

例如,您可以在用户触发相机操作(如拍照)时请求相机访问:

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

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

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

这种上下文相关的请求可以提高接受率达 50%,相比于在启动时直接请求 [2]为了确保流畅的体验,请维护一个保存用户决策的权限状态跟踪器,跨会话保存用户决策

一旦权限处理完成,您可以将重点转移到确保更新,尤其是对于无线(OTA)部署

OTA 更新安全

To ensure data integrity during app updates, it’s crucial to use secure OTA (Over-The-Air) update processes. These updates help prevent unauthorized changes to app __CAPGO_KEEP_0__, which could otherwise bypass limits on data collection. Update Package SigningSigning update packages is a critical step in protecting against unauthorized code changes. Here are some key measures to secure OTA updates:

Security Measure

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

Content ProtectionAES加密
Delivery SecurityHTTPS with certificate pinning
Update Integrity__CAPGO_KEEP_0__
__CAPGO_KEEP_0____CAPGO_KEEP_0__
版本安全__CAPGO_KEEP_0__
失败恢复即时回滚功能

Capgo 更新系统

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

__CAPGO_KEEP_2__

确保更新是经过验证和安全的,失败时有回滚选项

遵守应用商店政策是OTA更新的必要条件[1][6][7]每个平台都有特定的要求,以确保更新与其数据保留和安全策略保持一致:

平台遵守性要求
iOS仅限 JavaScript 或资产更新
Android必须获得用户同意
Both安全检查和适当的文档

以下是实现符合存储要求的更新的示例:

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 应用中处理用户数据》

如果您正在使用 《在 Capacitor 应用中处理用户数据》 来规划安全性和合规性,连接它 加密 加密的实现细节 合规 合规的实现细节 Capgo 安全扫描器 Capgo 安全扫描器的产品工作流程 Capgo 安全 Capgo 安全的产品工作流程 Capgo 信任中心 Capgo 信任中心的产品工作流程

Capacitor应用程序中的实时更新

当有web层bug时,通过Capgo将修复直接推送给用户,而不是等待几天的应用商店审批。用户在后台接收更新,而原生代码的更改仍然在正常的审批路径中。

立即开始

博客最新文章

Capgo为您提供了创建真正专业的移动应用所需的最佳见解。