【OpenHarmony/HarmonyOs 】学习 App 如何做轻量化数据安全与隐私保护
【OpenHarmony/HarmonyOs 】学习 App 如何做轻量化数据安全与隐私保护
教育类 App 面向学生用户,隐私保护不能后置。学习数据看似普通,其实包含年级、学习习惯、错题、正确率、薄弱知识点等敏感信息。本文结合 政治视界 项目,讲解学习 App 如何用“少申请权限、本地保存、边界清晰”的方式做好轻量化数据安全 🔐
一、少申请权限
当前项目 module.json5 没有声明相机、定位、通讯录、麦克风等高敏权限:
{
"module": {
"deviceTypes": ["phone", "tablet"],
"abilities": [
{
"name": "EntryAbility",
"exported": true
}
]
}
}
对一个本地政治学习工具来说,题库、闪卡、笔记、报告都不需要这些权限。能不申请就不申请,是最有效的隐私保护。
二、数据本地保存
项目使用 Preferences 保存学习数据:
const PREFERENCES_NAME = 'zhengzhi_prefs';
async init(context: common.UIAbilityContext): Promise<void> {
this.prefs = await preferences.getPreferences(context, PREFERENCES_NAME);
}
本地保存的好处是:
- 不需要上传用户学习行为;
- 离线可用;
- 数据边界清楚;
- 用户更容易信任。
三、业务数据集中管理
所有学习数据通过 DataManager 管理:
const STUDY_STATS_KEY = 'study_stats';
const WRONG_QUESTIONS_KEY = 'wrong_questions';
const STUDY_SESSIONS_KEY = 'study_sessions';
const PROFILE_KEY = 'user_profile';
const SETTINGS_KEY = 'app_settings';
集中管理有利于后续实现:
- 清空学习数据;
- 导出学习报告;
- 关闭错题记录;
- 隐私设置页;
- 数据备份。
四、避免默认 AI 识图
学习 App 可能会想加入“拍照识题”,但这类能力涉及图片和个人环境信息。建议默认关闭,用户主动触发时再申请权限,并说明用途:
用于拍摄题目并识别文字,不会在未确认前保存或上传图片。
当前政治视界没有默认接入 AI 识图,这是比较稳妥的设计。后续如果加入,也应该优先端侧处理。
五、错题数据也要保护
错题包含用户薄弱知识点:
export interface WrongQuestion {
questionId: number;
userAnswer: string | string[];
correctAnswer: string | string[];
category: string;
grade: string;
wrongCount: number;
}
这些数据不应该默认分享或上传。即使做学习报告,也应该由用户主动导出。
六、初始化可靠性
数据保护还包括不丢数据。项目在页面加载前初始化 Preferences:
void storageManager.init(this.context).then(() => {
windowStage.loadContent('pages/Index', appLocalStorage, (err) => {
if (err.code) {
return;
}
});
});
这样可以避免页面先读取导致空数据覆盖真实数据。
七、隐私设置建议
后续可以增加“隐私与数据”页面:
- 查看本地保存了哪些数据;
- 清空错题;
- 清空学习记录;
- 导出学习报告;
- 关闭学习画像;
- AI 识图默认关闭说明;
- 权限使用说明。
八、实现流程总结
不声明无关权限
↓
Preferences 本地保存
↓
DataManager 集中管理
↓
用户主动触发导出/清空
↓
AI 能力默认关闭
九、结语
学习 App 的隐私保护不是写一份协议就结束了,而是体现在架构设计中。政治视界当前选择了本地数据、低权限、集中管理的方案,非常适合教育工具的早期版本。
对学生用户来说,可信比炫技更重要。真正好的学习 App,应该帮助用户成长,而不是过度收集用户数据 🛡️
十、具体可以增加哪些隐私功能
在当前项目基础上,可以新增一个“隐私与数据”页面,入口放在 ProfilePage 的设置区域。页面可以包含这些操作:
学习数据概览:展示本地保存了哪些数据
清空错题:只删除 wrong_questions
清空学习记录:删除 study_sessions 和 study_stats
重置每日目标:恢复默认 daily_goal
导出学习报告:用户主动生成文本或图片
AI 识图说明:默认关闭,未来用户主动启用
由于 DataManager 已经把 key 集中定义,删除某类数据时可以比较精确,不需要清空所有 Preferences。
十一、清空数据的实现思路
StorageManager 已经提供了删除方法:
delete(key: string): void {
if (!this.prefs) {
return;
}
try {
this.prefs.deleteSync(key);
this.prefs.flush();
} catch (e) {
console.error('Failed to delete: ' + JSON.stringify(e));
}
}
后续可以在 DataManager 中封装业务方法:
clearWrongQuestions()
clearStudySessions()
resetStudyStats()
clearProfile()
页面只调用这些方法,不直接传 key。这样可以避免误删不该删除的数据。
十二、权限申请的产品流程
如果未来加入拍照识题,建议流程是:
用户点击“拍照识题”
↓
展示用途说明
↓
申请相机权限
↓
拍照后先展示预览
↓
用户确认后才识别
↓
识别结果可删除
这个流程比 App 启动时直接要权限更友好。尤其是教育场景,用户应该清楚知道每一次敏感能力为什么被使用。
十三、本地学习画像也要可关闭
错题推荐、学习报告、成就系统都会形成学习画像。即使这些数据只在本地,也建议给用户一个开关:
开启:根据错题和学习记录生成复习建议
关闭:只保留基础答题记录,不生成画像标签
这样用户对自己的数据更有控制感。隐私保护做到这一步,产品信任度会明显提升。

更多推荐



所有评论(0)