【OpenHarmony/HarmonyOs 】教育类 App 隐私保护:禁止 AI 识图与精细化权限管控实践
【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 喜欢做“拍照识题”,但这类能力有几个风险:
- 图像里可能包含学生个人信息;
- 桌面、房间、试卷、姓名都可能被拍进去;
- 如果上传云端,链路更复杂;
- AI 识别结果可能错误,影响学习判断;
- 学生容易从“理解过程”变成“直接要答案”。
「物理视界」的定位是物理实验和理解工具,所以更适合禁止 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 识图,默认本地完成学习闭环。这样做出来的应用,也许没有那么“炫”,但更克制、更可靠,也更适合学生长期使用。✅


更多推荐



所有评论(0)