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

本文基于我的 OpenHarmony/HarmonyOS 项目「物理视界 PhysicsVision」整理。项目当前没有接入拍照识题、AI 识图、云端大模型等能力,而是采用本地 Canvas 模拟、手动参数输入、题库筛选和本地学习记录。
这一篇从教育 App 的角度,聊聊为什么“禁止 AI 识图”有时反而是更稳妥的产品选择,以及如何做精细化权限管控和隐私保护。🔐

一、为什么教育 App 要认真对待隐私?

教育类 App 的用户经常是学生,使用场景也很敏感:

  • 可能涉及未成年人;
  • 可能产生学习轨迹;
  • 可能包含错题、成绩、收藏、挑战记录;
  • 如果接入拍照识题,还可能涉及书本、桌面、头像、家庭环境等图像信息。

所以在设计「物理视界」时,我没有把“AI 拍照识题”作为默认能力,而是优先做了:

  • 🔬 本地物理模型模拟;
  • 🎚️ 手动参数调节;
  • 🧮 公式计算器;
  • 🎯 本地题库挑战;
  • ❤️ 本地收藏;
  • 🏅 本地成就。

这个思路的核心是:能不采集就不采集,能本地完成就本地完成,能不用敏感权限就不用敏感权限。

二、项目当前的权限状态:无相机、无相册、无网络请求

我在项目中搜索了权限、相机、图片、网络、AI 相关调用,目前主业务代码没有发现:

  • 相机权限申请;
  • 相册读取;
  • 图片上传;
  • 网络请求;
  • AI 识图接口;
  • 人脸识别调用;
  • 定位、通讯录等敏感权限。

module.json5 中只声明了基础 Ability 和备份扩展,没有额外申请敏感权限:

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

这对隐私保护很有价值:
用户打开应用,不会被一堆权限弹窗打断,也不会担心学习过程被拍照、上传或分析。

三、禁止 AI 识图:不是能力不足,而是产品边界

很多学习 App 喜欢做“拍照识题”,但这类能力有几个风险:

  1. 图像里可能包含学生个人信息;
  2. 桌面、房间、试卷、姓名都可能被拍进去;
  3. 如果上传云端,链路更复杂;
  4. AI 识别结果可能错误,影响学习判断;
  5. 学生容易从“理解过程”变成“直接要答案”。

「物理视界」的定位是物理实验和理解工具,所以更适合禁止 AI 识图,把重点放在可交互模型上。

比如光的干涉模型不需要拍题,用户直接调节波长、缝间距、屏距,就能观察条纹变化:

Slider({ value: this.wavelength, min: 380, max: 700, step: 10 })
  .selectedColor(this.getColorFromWavelength())
  .onChange((v: number) => {
    this.wavelength = v
    if (this.canvasReady) this.drawScene()
  })

这种方式更符合物理学习的目标:学生不是把题目丢给 AI,而是亲自观察变量关系。

四、本地数据:只保存必要学习状态

项目中保存的数据很克制,主要是:

  • favorites:收藏模型;
  • highScore:挑战最高正确率;
  • totalPlayed:挑战次数;
  • visitedModels:已浏览模型。

首页初始化时通过 PersistentStorage 建立这些状态:

aboutToAppear(): void {
  PersistentStorage.persistProp('favorites', '')
  PersistentStorage.persistProp('highScore', 0)
  PersistentStorage.persistProp('totalPlayed', 0)
  PersistentStorage.persistProp('visitedModels', '')
}

组件中通过 @StorageLink 读取和更新:

@StorageLink('favorites') favStr: string = ''
@StorageLink('highScore') highScore: number = 0
@StorageLink('totalPlayed') totalPlayed: number = 0

这些数据不包含姓名、手机号、定位、照片,也不需要账号体系。
对于一个物理学习工具来说,这样的最小化存储已经能满足核心功能。

五、用户可控:设置页提供清除入口

隐私保护不能只停留在“不采集”,还要让用户可以主动清理。

项目设置页提供了清除收藏和重置挑战记录:

Button('清除收藏')
  .onClick(() => {
    if (this.favStr.length > 0) {
      this.favStr = ''
      promptAction.showToast({ message: '已清除所有收藏' })
    }
  })

Button('重置记录')
  .onClick(() => {
    if (this.totalPlayed > 0) {
      this.highScore = 0
      this.totalPlayed = 0
      promptAction.showToast({ message: '已重置挑战记录' })
    }
  })

从体验上看,这两个按钮很简单;从隐私设计上看,它们很重要:

  • 用户知道 App 保存了什么;
  • 用户可以随时清理;
  • 清理后有 Toast 反馈;
  • 不需要进入复杂系统设置。

后续还可以加一个“清除全部学习数据”,把收藏、最近浏览、挑战记录、成就进度统一重置。

六、精细化权限管控:按功能再申请

如果未来要扩展能力,我会坚持“按功能申请权限”:

功能 是否需要权限 建议
Canvas 物理模拟 不需要 保持本地计算
公式计算器 不需要 手动输入参数
收藏模型 不需要 本地状态即可
挑战题库 不需要 本地题库即可
近场分享 可能需要 用户点击分享时再触发
拍照识题 需要相机 默认不做,或作为可选功能
云端同步 可能需要网络 明确说明同步内容
人脸识别 高敏感 不建议用于普通学习场景

权限弹窗不应该在 App 启动时全部弹出,而应该在用户主动触发对应功能时再申请。
这就是精细化权限管控:权限跟着功能走,而不是功能跟着权限走。

七、备份能力也要注意边界

项目当前有 BackupExtensionAbility:

export default class EntryBackupAbility extends BackupExtensionAbility {
  async onBackup() {
    hilog.info(DOMAIN, 'testTag', 'onBackup ok')
    await Promise.resolve()
  }

  async onRestore(bundleVersion: BundleVersion) {
    hilog.info(DOMAIN, 'testTag', 'onRestore ok %{public}s', JSON.stringify(bundleVersion))
    await Promise.resolve()
  }
}

配置中允许备份恢复:

{
  "allowToBackupRestore": true
}

后续如果真正接入备份,需要明确:

  • 备份哪些字段;
  • 是否包含挑战成绩;
  • 是否包含最近浏览;
  • 用户如何关闭;
  • 恢复后如何提示用户。

备份是提升体验的能力,但仍然要遵循数据最小化原则。

八、隐私保护方案总结

结合当前项目,我整理了一套适合教育类 App 的隐私方案:

1. 默认禁止 AI 识图

不接入相机、不读取相册、不上传图片。
用本地模型、公式计算和题库练习替代“拍照问答案”。

2. 敏感权限零默认

启动 App 不申请相机、相册、定位、麦克风、通讯录等权限。
让用户先建立信任,再在必要功能中按需授权。

3. 学习数据最小化

只保存收藏、挑战次数、最高正确率、浏览模型等必要数据。
不保存真实姓名、账号、照片、设备定位。

4. 用户可清理

设置页提供清除收藏、重置记录。
后续可以增加“一键清除全部学习数据”。

5. 本地优先

物理模拟、公式计算、题库筛选都在端侧完成。
只有在用户主动分享、备份、同步时,才考虑跨设备数据流转。

九、后续可以加入的隐私增强点

如果继续完善,我会加这些功能:

  • 🔐 隐私说明页:列出保存的数据和用途;
  • 🧹 一键清除:收藏、最近浏览、挑战记录、成就进度全部清理;
  • 📴 离线模式标识:告诉用户核心功能无需联网;
  • 🧾 权限说明弹窗:申请权限前先解释原因;
  • 🧒 青少年模式:禁用分享、禁用外部跳转、关闭云同步;
  • 🧠 AI 功能开关:如果未来接入端侧 AI,也必须默认关闭并明确说明。

十、结语

隐私保护不是少做功能,而是把产品边界想清楚。
对于「物理视界」这样的教育应用来说,真正重要的是帮助学生理解物理现象,而不是把题目拍给 AI 直接要答案。

OpenHarmony/HarmonyOS 提供了丰富能力,但开发者仍然要做取舍。
我的选择是:默认不碰敏感权限,默认不做 AI 识图,默认本地完成学习闭环。这样做出来的应用,也许没有那么“炫”,但更克制、更可靠,也更适合学生长期使用。✅

img

img

Logo

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

更多推荐