【OpenHarmony/HarmonyOs 】教育类 App 隐私保护实践:禁止 AI 识图、精细化权限管控与本地数据方案
【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 文章里建议用“项目实践 + 设计原则”的方式写,不要只贴配置。
可以分成四个层次:
- 权限最小化:没有必要的权限不声明。
- 数据最小化:错题只存 id,收藏只存必要字段。
- 端侧优先:成就和统计在本地完成。
- 用户可控:提供清空和投诉入口。
再结合“禁止 AI 识图”展开:
- 当前版本不接入图像识别。
- 后续如接入,默认关闭。
- 识别前单独授权。
- 端侧优先处理。
- 不保存原图。
这样写会比单纯说“我们重视隐私”更有说服力。
十、总结
在 HarmonyOS 教育类项目中,隐私保护可以从架构层面开始:
- 🛡️ 不需要的权限不声明。
- 📦 不必要的数据不保存。
- 🧠 不默认启用 AI 识图。
- 📍 不采集位置、相册、相机等敏感信息。
- 🧹 提供清空入口。
- 📮 提供投诉与反馈通道。
「化学视界」这个项目的隐私优势在于:它不是先采集再治理,而是从产品功能上就尽量避免采集。对面向学生的工具来说,这正是最可靠、也最容易向用户解释的隐私保护方案。✅

更多推荐


所有评论(0)