跳过主要内容
Capgo logo

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

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

How to Handle User Data in Capacitor Apps

处理用户数据 Capacitor apps 需要安全的存储、清晰的保留政策和遵守数据保护法规,如 GDPR GDPR 和. context: Page/area: Capgo marketing website. Role: Short UI label or navigation item. Seen in: page trust.astro. Message key `and` (And).

  • CCPA本指南解释了如何最小化数据收集、安全处理敏感信息和有效管理权限。以下是一些快速概述:
  • 数据最小化: 只收集必要的数据以支持特定应用功能。 @capacitor/secure-storage 加密插件。
  • 数据保留: 根据定义的时间限制自动删除。
  • 用户权限: 允许用户访问、删除或导出他们的数据。
  • 权限管理: 在请求权限时提供上下文,并为拒绝请求提供替代方案。
  • OTA更新: 使用工具如 Capgo.

如何使用Ionic Capacitor 安全存储

Capacitor 框架文档网站

减少数据收集

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

数据收集审查

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

数据类型 审查重点 行动项
用户输入 表单字段和验证 移除不需要的字段
API 调用 请求/响应负载 过滤掉额外的数据字段
存储 上下文: Capgo Builder / 原生云构建产品页面。角色: 短 UI 标签或导航项。见于: 页面 native-build.astro。消息键 `native_build_v2_trust_stor_lbl` (Native Build V2 Trust Stor Lbl)。| 上下文: 企业产品/定价页面。角色: 短 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"
};

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

数据输入控件

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

在控件中集成Capacitor的安全功能以增强这些控件

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

定期使用自动化发现工具进行审计,确保您的数据收集实践保持高效并与您的应用程序的预期功能一致

数据安全和存储

一旦您定义了数据收集边界,必须实施措施来保护用户信息,同时遵守数据最小化原则

设置安全存储

该 @capacitor/secure-storage 插件使用内置安全功能,如iOS Keychain和Android Keystore来保护敏感数据 [1]. 对于更大的结构化数据集来说, @capgo/capacitor-sqlite-数据存储 提供了加密的SQLite存储, @capgo/capacitor-持久账户 可以在重新安装时保留账户状态。 @capgo/capacitor-隐私屏障 数据加密方法

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

Data Encryption Methods [2].

比较存储选项

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

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

Capgo的Secure Storage API 是一种适合存储关键信息,如身份验证令牌和个人用户数据的坚实选择 [1][4]. 其 加密功能 也符合保留政策,允许在指定时间框架内控制数据访问 [2].

sbb-itb-f9944d2

数据存储时间限制

明确数据保留政策有助于与数据最小化原则保持一致,确保信息不会保留得比必要的时间长

存储时间规则

不同类型的用户数据应该根据其目的和敏感度水平来定义保留期限。以下是一种管理数据保留在Capgo应用中的建议框架 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 对于存储,您可以设置触发器自动删除过期记录:

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]
    );
  }
}
  • 导出用户数据:使用户能够以结构化格式下载其存储的数据。
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();
    }
  }
};

权限请求的时机

你请求权限的时机很重要。策略性的时机可以显著提高用户接受率。以下是时机策略的快速概述:

时机策略 最佳用途
即时 当需要时,针对特定功能
上下文 对于非关键功能
首次启动 对于核心功能
延迟 在用户旅程的后期可选功能

例如,您可以在用户触发相机拍照动作时才请求相机访问权限:

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

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

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

For example, you can request camera access only when the user initiates an action like taking a photo: [2]Contextual requests like this can boost acceptance rates by 50% compared to upfront requests

To ensure a smooth experience, maintain a permission state tracker that saves user decisions across sessions

Once permissions are handled, you can shift focus to securing updates, especially for over-the-air (OTA) deployments

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.

, 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.

签署更新包是保护免受未经授权的code更改侵害的关键步骤。以下是确保OTA更新安全的关键措施:

Signing update packages is a critical step in protecting against unauthorized __CAPGO_KEEP_0__ changes. Here are some key measures to secure OTA updates: 如何实现
内容保护 AES加密
安全交付 https加密
更新完整性 哈希验证
版本安全 数字签名
失败恢复 快速回滚

Capgo 系统更新

Capgo Live Update 控制台界面

Capgo 简化了 Capacitor 应用的 OTA 安全更新,提供自动化安全功能。以下是一个使用 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 用户同意必须获得
同时 安全检查和合适的文档

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

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` (端到端加密)。
  • 以此来保护更新包。 实时监控

继续阅读《如何在Capacitor应用中处理用户数据》

如果您正在使用 《如何在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.

来自 Martin 的人性化支持

立即开始

最新博客

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