【OpenHarmony/HarmonyOs 】数学学习 App 隐私保护实践:禁止 AI 识图、最小权限与精细化权限管控 【OpenHarmony/HarmonyOs 】数学学习 App 隐私保护实践禁止 AI 识图、最小权限与精细化权限管控项目类型OpenHarmony / HarmonyOS ArkTS 数学学习应用文章主题禁止 AI 识图、精细化权限管控、隐私保护方案核心观点隐私保护不是最后补一页协议而是从架构开始就少拿数据、少要权限、少做不必要识别 一、为什么数学学习应用也要认真做隐私很多工具类应用会觉得自己“不涉及隐私”。但只要应用里出现学习记录、收藏内容、错题、使用习惯就已经与用户个人数据有关。数学视界项目里有这些数据每日学习目标连续学习天数计算器历史单位换算历史收藏的公式、知识点、图形方案挑战答题结果和正确率用户反馈内容。这些数据虽然不是身份证、定位、人脸这种高敏信息但仍然可以反映用户的学习习惯。因此我的设计原则是能本地完成就本地完成能不申请权限就不申请权限能不用 AI 识图就不用 AI 识图。二、项目当前权限状态不申请高敏权限在entry/src/main/module.json5中当前项目没有声明requestPermissions。节选如下{module: {name:entry,type:entry,mainElement:EntryAbility,deviceTypes: [phone,tablet],abilities: [ {name:EntryAbility,srcEntry:./ets/entryability/EntryAbility.ets,exported: true } ] } }这意味着当前应用没有主动申请相机、麦克风、位置、通讯录、相册等高敏权限。对于一个数学学习工具来说这是非常合理的。功能上项目通过以下方式避免权限依赖功能实现方式是否需要高敏权限公式大全本地静态数据否科学计算器本地表达式计算否单位换算本地换算逻辑否挑战答题本地题库与计时器否曲线画板Canvas 本地绘制否收藏内存状态管理后续可本地持久化否学习统计本地计数否这就是“权限最小化”的第一步不要为了看起来高级而申请不必要权限。三、为什么我选择“禁止 AI 识图”数学学习类应用很容易想到一个功能拍照搜题、AI 识图解题。听起来很酷但它会立刻带来一系列隐私和合规问题需要相机权限可能读取相册图片中可能包含学生姓名、学校、试卷编号如果上传云端识别还涉及网络传输和第三方处理AI 识别结果可能不准确还会影响学习过程。因此在当前项目阶段我明确选择不做 AI 识图而是采用“用户主动输入 本地计算 本地图形绘制”的方式。例如曲线画板中函数表达式是用户输入的文本drawSingleFunction(ctx:CanvasRenderingContext2D,expr:string,color:string,label:string,lineWidth:number):void{if(expr )returnconstexprLower:string expr.replace(/\s/g,).toLowerCase() ctx.strokeStyle color ctx.lineWidth lineWidth ctx.beginPath()for(letmathX:numberthis.graphRange.xMin; mathX this.graphRange.xMax; mathX step) {constmathY:numberthis.evaluateExpr(exprLower, mathX)if(isFinite(mathY)) {constpt:DrawPointthis.mathToCanvas(mathX, mathY)// 绘制函数曲线} } }表达式求值也是本地处理evaluateExpr(expr:string,x:number):number{try{lete:string expr.replace(/x/g,(${x})) e e.replace(/\^/g,**) e e.replace(/sin\(/g,Math.sin() e e.replace(/cos\(/g,Math.cos() e e.replace(/sqrt\(/g,Math.sqrt()constfn:FunctionnewFunction(use strict; return (${e}))returnfn()asnumber}catch{returnNaN } }这里没有拍照、没有上传图片、没有调用云端识别。用户输入什么应用就在本地绘制什么。四、精细化权限管控未来新增能力时怎么做当前项目没有申请权限但后续如果真的要新增能力应该遵循“按场景申请”的原则。例如未来要做“导出图片到相册”不应该一启动应用就申请相册权限而应该在用户点击“保存到相册”时再申请并说明原因。一个推荐的权限策略表未来功能可能需要权限申请时机替代方案保存画板图片媒体写入相关权限点击保存时保存到应用沙箱拍照识别题目相机权限点击拍照识别时手动输入题目从相册导入题目媒体读取相关权限点击相册导入时文本输入语音读题麦克风权限点击语音输入时键盘输入学习提醒通知权限开启提醒开关时应用内提示OpenHarmony 权限配置通常需要在module.json5中声明并按权限类型在运行时申请。官方文档也强调了requestPermissions、reason和usedScene等字段的重要性。示意配置如下requestPermissions: [ {name:ohos.permission.PERMISSION_NAME,reason:$string:permission_reason,usedScene: {abilities: [EntryAbility],when:inuse} } ]重点不是“会写配置”而是要问自己这个权限是否真的必要有没有低权限替代方案五、数据最小化AppState 只保存学习所需数据项目中统一状态管理在AppState.ets。学习统计数据结构如下export interfaceStudyData{totalStudyDays:numbercurrentStreak:numbertotalDrawings:numbertotalCalculations:numbertotalFunctions:numbertotalFormulasViewed:numbertotalUnitsConverted:numberlastStudyDate:stringdailyGoal:numbertodayCount:numberconsecutiveGoalMetDays:numberfunFactsViewed:number}可以看到它只记录学习行为统计不记录真实姓名、手机号、定位、人脸、设备通讯录等敏感数据。收藏数据也尽量聚焦内容本身export interface FavoriteItem {id:stringtype:stringtitle:stringcontent:stringcategory:stringicon:stringnote:stringtags:string[] createdAt:numberupdatedAt:numbergraphData?:string}这里的graphData是曲线方案 JSON不是图片不包含人像或环境信息。相比“保存截图”结构化数据更利于隐私保护因为它只保存业务所需的数学模型参数。六、用户可控学习目标和反馈都由用户主动触发在“我的”页面中用户可以修改每日学习目标AppState.settings.dailyGoal valAppState.studyData.dailyGoal val反馈入口也提供了“隐私问题”分类ForEach([功能问题,内容投诉,隐私问题,其他],(t:string){ Text(t) .onClick((){ this.reportType t }) })这个入口看似简单但它表达了一个产品态度隐私不是开发者单方面说“我保护了”也要给用户反馈问题的通道。七、本地优先挑战结果不依赖云端挑战答题结果在本地计算calculateCorrect(): number { let count 0for(let i 0; i this.questions.length; i) {constuserAns this.normalizeAnswer(this.userAnswers[i])constcorrectAns this.normalizeAnswer(this.questions[i].answer)if(userAns correctAns) { count } }returncount }答题结束后构造结果数据constresultData: ChallengeResult { id: Date.now().toString(), correctCount, totalCount:this.questions.length, totalTime, score, gradeId:this.config?.gradeId ??, knowledgeIds:this.config?.knowledgeIds ?? [], isCompleted:true, }这套流程不需要把答案上传到服务器也不需要进行用户画像。对当前项目来说本地统计已经足够支持成就、正确率、学习进度等功能。八、隐私保护方案总结数学视界当前的隐私设计可以概括为五点 不申请不必要权限当前没有相机、相册、位置、麦克风等高敏权限 禁止 AI 识图不拍照搜题不上传试卷图片 本地计算优先计算器、题库、挑战评分都在端侧完成 数据最小化只保存学习统计和收藏内容‍ 用户可控学习目标可修改隐私问题可反馈。如果未来接入 OCR、拍照识题、人脸识别等能力也应该遵循默认关闭用户主动触发明确说明用途尽量端侧处理提供删除和关闭入口。九、结语隐私保护不是把功能砍掉而是做更克制的产品设计。对于数学视界这样的学习应用来说用户真正需要的是稳定、清晰、可信赖的学习工具而不是每个入口都接 AI、每个场景都要权限。先把“不该拿的数据”挡在架构之外才是最可靠的隐私方案。✨参考资料OpenHarmony 权限申请指南OpenHarmony 权限声明说明