【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保存functionwriteFavorites(items: FavoriteItem[]): void {AppStorage.setOrCreate(STORAGE_KEY, JSON.stringify(items)); const version (AppStorage.getnumber(STORAGE_VERSION_KEY) ??0) 1;AppStorage.setOrCreate(STORAGE_VERSION_KEY,version); }错题集也只保存题目 idexportfunctionaddWrongQuestionId(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做持久化constdata { statistics:this.statistics, progress: Array.from(this.progressMap.entries()) };constdataStr JSON.stringify(data); AppStorage.setOrCreate(achievement_data, dataStr);constprefs awaitthis.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 识图。 不采集位置、相册、相机等敏感信息。 提供清空入口。 提供投诉与反馈通道。「化学视界」这个项目的隐私优势在于它不是先采集再治理而是从产品功能上就尽量避免采集。对面向学生的工具来说这正是最可靠、也最容易向用户解释的隐私保护方案。✅