【OpenHarmony/HarmonyOs 】教育类 App 隐私保护实践:禁止 AI 识图、精细化权限管控与本地数据方案

本文基于 HarmonyOS 项目「化学视界」展开。它是一款离线化学学习 App,包含元素周期表、化学方程式、知识库、挑战、收藏、错题和成就统计。对这类面向学生的工具来说,隐私保护不是附加项,而是产品设计的一部分。🛡️

一、为什么这个项目适合写隐私保护?

「化学视界」有一个很明确的技术特点:完全离线、无需登录、无需网络、无需敏感权限。

README 中也写得很清楚:

  • 完全离线:无需网络连接。
  • 数据本地存储:所有数据存储在本地资源中。
  • 隐私保护:不收集任何用户数据。
  • 权限声明:无需任何权限。

这对教育类 App 非常重要。学生使用学习工具时,理想体验应该是:

  • 不强制登录。
  • 不上传错题。
  • 不采集人脸、相册、位置。
  • 不把学习记录用于广告推荐。
  • 不默认接入 AI 识图能力。

尤其当应用面向未成年人时,“少拿数据”比“拿了再保护”更安全。

二、先看模块配置:没有声明敏感权限

项目的 module.json5 中只声明了入口 Ability 和备份扩展,没有看到相机、位置、麦克风、相册等敏感权限声明:

{
  "module": {
    "name": "entry",
    "type": "entry",
    "deviceTypes": [
      "phone",
      "tablet"
    ],
    "abilities": [
      {
        "name": "EntryAbility",
        "srcEntry": "./ets/entryability/EntryAbility.ets",
        "exported": true
      }
    ]
  }
}

这就是权限管控的第一原则:不用就不申请。

很多 App 的问题不是权限实现复杂,而是产品设计阶段就把权限申请做得太宽。例如一个学习资料 App,如果只是展示题库和知识点,就没有必要申请相机、位置、通讯录或麦克风。

三、禁止 AI 识图:不是反对 AI,而是默认不采集图像

题目里提到“禁止 AI 识图”,在教育类 App 中可以这样理解:

默认不接入拍照搜题、图片识别、相册扫描等能力,避免采集学生作业、头像、家庭环境、学校信息等图像隐私。

当前项目没有引入相机、相册、图片 OCR、云端识别等能力,这是一个很好的隐私起点。

如果以后要加 AI 识图,也建议遵守以下原则:

  • 默认关闭 AI 识图,不作为核心路径强制使用。
  • 明确告知识别对象和用途。
  • 优先端侧识别,不上传原图。
  • 如果必须上传,应提供单独授权和撤回入口。
  • 不保存原图,只保存用户确认后的结构化结果。
  • 未成年人模式下禁用或弱化识图入口。

可以在设置页中增加一个开关:

@State allowImageRecognition: boolean = false;

Toggle({ type: ToggleType.Switch, isOn: this.allowImageRecognition })
  .onChange((isOn: boolean) => {
    this.allowImageRecognition = isOn;
    AppStorage.setOrCreate('allow_image_recognition', isOn);
  })

更稳妥的做法是:没有用户主动打开时,代码路径里根本不初始化图像识别模块。

四、精细化权限管控:按功能拆分权限,而不是一次全要

这个项目目前没有敏感权限,但如果后续扩展,可以按功能拆分:

功能 是否需要权限 推荐策略
元素周期表 不需要 本地数据展示
方程式查询 不需要 本地数据展示
知识库搜索 不需要 本地搜索
收藏/错题 不需要 本地存储
邮件投诉 不需要敏感权限 通过 Want 调起邮件应用
AI 拍照识题 需要相机/相册 默认关闭,单独授权
云端同步 可能需要网络 用户主动开启
人脸保护学习报告 需要用户认证 仅保护敏感页,不上传人脸

这种设计的好处是:用户能理解“为什么此刻需要权限”。比如用户点击“拍照识题”时申请相机,比 App 一启动就申请相机合理得多。

五、本地数据存储:收藏、错题、成就都留在端侧

项目的收藏数据使用 AppStorage 保存:

function writeFavorites(items: FavoriteItem[]): void {
  AppStorage.setOrCreate(STORAGE_KEY, JSON.stringify(items));

  const version = (AppStorage.get<number>(STORAGE_VERSION_KEY) ?? 0) + 1;
  AppStorage.setOrCreate(STORAGE_VERSION_KEY, version);
}

错题集也只保存题目 id:

export function addWrongQuestionId(id: number): void {
  const ids = readIds();
  if (!ids.includes(id)) {
    ids.push(id);
    writeIds(ids);
  }
}

这里有一个隐私设计细节很值得写:错题集不需要保存完整题干,因为题库本来就在本地。只保存 id 就能恢复错题列表。

这带来三个好处:

  • 🔐 存储数据更少。
  • ⚡ 读取速度更快。
  • 🧹 清空时更简单。

对于隐私保护来说,最好的数据不是“加密保存的大量数据”,而是“根本没有收集的不必要数据”。

六、成就统计:可激励,但不应该变成画像追踪

项目里的成就系统会记录访问天数、收藏数、知识阅读数、答题正确数等:

function getDefaultStatistics(): UserStatistics {
  return {
    totalEquationsViewed: 0,
    totalElementsViewed: 0,
    totalKnowledgeRead: 0,
    dailyQuizCorrect: 0,
    totalFavorites: 0,
    totalSearches: 0,
    visitDates: [],
    currentStreak: 0,
    unlockedAchievements: []
  };
}

这类数据本身并不一定敏感,但如果上传到云端、绑定账号、用于推荐或广告,就会变成用户画像。

当前项目只在本地保存,并且通过 Preferences 做持久化:

const data = {
  statistics: this.statistics,
  progress: Array.from(this.progressMap.entries())
};
const dataStr = JSON.stringify(data);
AppStorage.setOrCreate('achievement_data', dataStr);

const prefs = await this.getPreferences();
if (prefs) {
  await prefs.put('achievement_data', dataStr);
  await prefs.flush();
}

这适合在文章中总结为:

学习激励可以端侧完成,不一定需要把每一次学习行为上传到服务器。

七、清空入口:用户应该能删除自己的学习痕迹

隐私保护不只是“不要收集”,还包括“允许用户删除”。

项目设置页中提供了清空错题和收藏的确认弹窗:

handleClearConfirm() {
  if (this.clearActionType === 'wrong') {
    clearWrongBook();
    this.wrongCount = 0;
  } else {
    clearFavorites();
    this.favoriteCount = 0;
  }
  this.showClearConfirm = false;
}

这个逻辑很适合扩展成“数据管理中心”:

  • 清空错题。
  • 清空收藏。
  • 重置成就统计。
  • 导出本地学习数据。
  • 查看当前本地保存了哪些数据。

对未成年人学习 App 来说,家长和学生都应该知道 App 保存了什么,以及怎样删除。

八、举报与投诉:合规入口也是隐私保护的一部分

设置页中已经有“举报与投诉”入口:

private aboutItems: SettingsItem[] = [
  {
    icon: '🛡️',
    title: '举报与投诉',
    subtitle: '未成年人保护 · 邮件受理',
    action: 'report'
  }
];

并提供复制邮箱和调起邮件应用:

const want: Want = {
  action: 'ohos.want.action.viewData',
  uri: uri
};
ctx.startAbility(want).catch(() => {
  promptAction.showToast({ message: '未找到邮件应用,请使用复制邮箱' });
});

这个设计有两个优点:

  • 不在 App 内采集投诉人更多信息。
  • 使用系统邮件应用处理发送动作,降低自身数据处理压力。

如果后续上架,可以在隐私政策中明确:

  • App 不收集个人身份信息。
  • App 不使用相机、麦克风、定位。
  • App 不默认上传学习记录。
  • 投诉邮件由用户主动发送。

九、隐私保护可以这样写成文章亮点

CSDN 文章里建议用“项目实践 + 设计原则”的方式写,不要只贴配置。

可以分成四个层次:

  1. 权限最小化:没有必要的权限不声明。
  2. 数据最小化:错题只存 id,收藏只存必要字段。
  3. 端侧优先:成就和统计在本地完成。
  4. 用户可控:提供清空和投诉入口。

再结合“禁止 AI 识图”展开:

  • 当前版本不接入图像识别。
  • 后续如接入,默认关闭。
  • 识别前单独授权。
  • 端侧优先处理。
  • 不保存原图。

这样写会比单纯说“我们重视隐私”更有说服力。

十、总结

在 HarmonyOS 教育类项目中,隐私保护可以从架构层面开始:

  • 🛡️ 不需要的权限不声明。
  • 📦 不必要的数据不保存。
  • 🧠 不默认启用 AI 识图。
  • 📍 不采集位置、相册、相机等敏感信息。
  • 🧹 提供清空入口。
  • 📮 提供投诉与反馈通道。

「化学视界」这个项目的隐私优势在于:它不是先采集再治理,而是从产品功能上就尽量避免采集。对面向学生的工具来说,这正是最可靠、也最容易向用户解释的隐私保护方案。✅

img

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐