鸿蒙 Next 相亲防骗雷达 App 开发实战防骗教育 交互式自测 内容驱动设计作者duluoSDK 版本HarmonyOS API 24 (Next)开发工具DevEco Studio语言框架ArkTS ArkUI字数约 9200 字目录引言产品概念与内容设计三 Tab 架构设计首页布局与防骗三原则骗局详情与危险信号交互式防骗自测颜色心理学在安全类App中的应用内容驱动设计的优势编译错误全记录第三十三款 App 全景回顾结语1. 引言1.1 老年人婚恋骗局的严峻现实根据中国公安部的数据2023 年全国破获的电信网络诈骗案件中针对老年人的案件占比持续上升。其中婚恋类诈骗是涉案金额最高的类型之一——平均每起案件损失超过 5 万元。老年人成为婚恋骗局的主要目标有几个原因孤独感使他们对爱情更渴望、对网络信息的辨别能力较弱、积累了一辈子的积蓄容易成为目标。更可悲的是很多老人被骗后不敢告诉子女——不是因为贪心而是因为怕丢人。“相亲防骗雷达App 的存在意义不是替代反诈中心而是在长辈的手机里放一个随时可以查看的防骗手册——当有人对他们说稳赚不赔”、“先转点钱”、“不要告诉孩子的时候能想起这个 App 里说过这是骗局”。1.2 本 App 的定位本 App 是安全教育类产品与 App 5防骗训练类似但定位更垂直——专门针对婚恋场景。防骗训练#5相亲防骗雷达#33诈骗类型电信诈骗婚恋诈骗目标用户所有老年人有相亲/交友需求的长辈教育方式情景训练骗局科普 自测题内容深度12 个场景6 种骗局详解 6 道自测题交互方式选择题判断题1.3 三十三款 App 全景App 数量 33 代码总行数 ~18,500 行 编译错误数 ~300 个 博客总字数 ~330,000 字 技术博客数 33 篇2. 产品概念与内容设计2.1 功能需求用户故事 1我想了解婚恋中有哪些常见骗局 用户故事 2我想知道每个骗局有哪些危险信号 用户故事 3我想测试一下自己能不能识别骗局 用户故事 4我想每天看到一条防骗提醒 功能清单 ├── F1: 警示横幅 防骗三原则 ├── F2: 6 种骗局 Grid 快捷入口 ├── F3: 骗局详情危险信号 防骗建议 ├── F4: 每日防骗语录 ├── F5: 骗局完整列表 ├── F6: 6 道防骗自测题 └── F7: 自测结果反馈2.2 骗局内容设计6 种骗局覆盖了老年人婚恋中最常见的诈骗类型。每种骗局的signs字段包含 4-5 条危险信号advice字段提供具体可操作的防骗建议。内容设计原则每条advice遵循三不原则不说教不说你应该...而是可以这样做 不恐吓不说你会被骗光而是遇到这种情况要小心 不抽象不说提高警惕而是认识不到三个月绝不借钱示例借钱诈骗的 advice不管对方说得多可怜认识不到三个月绝不借钱。 真爱你的人不会让你为难。两句话第一句是具体操作“不到三个月不借钱”第二句是情感支持“真爱你的人不会让你为难”。先给方法再给安慰。2.3 防骗自测题设计6 道自测题采用是骗局 / 是正常的二选一判断。题目覆盖了骗局和正常行为的混合骗局题4 道军官结婚要路费、内部投资机会、华侨寄礼物要关税正常题2 道关心提醒吃药、邻居介绍公园见面为什么混合骗局和正常题如果全部是骗局题用户学到的只是所有网上认识的人都不可信。加入正常题后用户学会的是如何区分骗局和正常行为——这是防骗教育的真正目标。3. 三 Tab 架构设计3.1 Tab 配置build(){Stack(){Column().backgroundColor(C.bg)Column(){this.buildHeader()if(this.activeTab0)this.buildHomeTab()elseif(this.activeTab1)this.buildScamTab()elsethis.buildTestTab()this.buildTabBar()}if(this.showDetail)this.buildDetailOverlay()}}Tab图标功能学习路径0首页 — 总览 三原则 快捷入口第一站了解概览1骗局 — 完整列表第二站深入学习2✅自测 — 判断练习第三站检验成果三个 Tab 构成了一条从了解到学习到检验的完整学习路径符合教育产品的标准流程。3.2 首页布局┌──────────────────────────────┐ │ ⚠️ 重要提醒 │ │ 婚恋诈骗是老年人最常见的… │ ├──────────────────────────────┤ │ 防骗三原则 │ │ 不借钱认识不到三个月… │ │ 不转账任何理由… │ │ ‍‍ 多商量涉及钱的事… │ ├──────────────────────────────┤ │ 常见骗局类型3列Grid │ │ 借钱 投资 假身份 │ │ 礼物 情感 公检法 │ ├──────────────────────────────┤ │ 防骗语录每日一句 │ └──────────────────────────────┘3.3 数据流骗局数据常量 SCAMS→ Grid 入口 → 详情弹窗 → 骗局列表 防骗语录常量 TIPS→ 首页每日一句种子算法 自测题数据 → 自测 Tab → 判断反馈本 App 全部使用常量数据SCAMS、TIPS、测试题没有 State 变量管理用户数据。唯一的状态是showDetail和selectedScam用于控制弹窗展示。4. 首页布局与防骗三原则4.1 警示横幅Column(){Text(⚠️ 重要提醒).fontSize(18).fontColor(C.danger).fontWeight(FontWeight.Bold)Text(婚恋诈骗是老年人最常见的骗局之一\n涉及金额大、危害严重\n提高警惕保护好自己的养老钱).fontSize(15).fontColor(C.text).lineHeight(24).textAlign(TextAlign.Center)}.backgroundColor(C.dangerDim).borderRadius(16)使用红色系C.dangerDim浅红背景 C.danger深红文字吸引注意力。三行文案使用\n手动换行在手机上呈现三段式排版。4.2 防骗三原则ForEach([[,不借钱,认识不到三个月绝不借钱],[,不转账,任何理由都不给陌生人转账],[‍‍,多商量,涉及钱的事一定和子女商量]],(item:string[]){...})三原则的设计用三个关键词概括了老年人婚恋防骗的核心要点不借钱、不转账、多商量。每个原则用 emoji 短标题 一句话说明三行排布。使用字符串数组string[]替代对象存储原则数据减少了代码量。每个原则恰好 3 个字段用索引访问[0] emoji、[1] 标题、[2] 说明很方便。4.3 骗局 GridGrid(){ForEach(SCAMS,(s:ScamType,idx:number){GridItem(){Column(){Text(s.emoji).fontSize(32)Text(s.name).fontSize(12).fontColor(C.text).fontWeight(FontWeight.Medium)Text(s.level).fontSize(10).fontColor(s.level.indexOf(高危)0?C.danger:C.warn)}.height(90).backgroundColor(C.bgCard).borderRadius(14)}},(s:ScamType)s.id.toString())}.columnsTemplate(1fr 1fr 1fr)6 种骗局以 3 列 Grid 展示每项 90px 高。3 列布局在手机屏幕宽度上刚好填满每项约 100px 宽足够展示 emoji 名称 风险等级。等级颜色编码包含高危的文字用红色C.danger其他用暖橙C.warn。5. 骗局详情与危险信号5.1 详情弹窗Text(SCAMS[this.selectedScam].emoji).fontSize(56)Text(SCAMS[this.selectedScam].name).fontSize(20).fontWeight(FontWeight.Bold)Text(SCAMS[this.selectedScam].level).fontSize(14).fontColor(C.danger)Divider()Text( 危险信号)ForEach(SCAMS[this.selectedScam].signs,(sign:string){Row(){Text(⚠️)Text(sign).fontSize(14)}})Text( 防骗建议)Text(SCAMS[this.selectedScam].advice).fontSize(14)弹窗从上到下大 emoji → 骗局名称 → 风险等级 → 分割线 → 危险信号列表 → 防骗建议。危险信号列表使用 ForEach 遍历signs数组每条信号前加 ⚠️ 图标。每条信号独立成行便于阅读。5.2 弹窗高度控制.position({x:6%,y:14%}).height(72%)弹窗高度 72%留出顶部 14% 和底部 14% 显示遮罩层背景。这个比例经过多次验证App 1-33是弹窗内容可读性和背景可见性的最佳折中。6. 交互式防骗自测6.1 自测题实现getTestQuestions():string[][]{return[[网上认识一周的军官说要和你结婚但需要你先转5000元路费。,1,q1],[相亲对象每天都关心你提醒你吃药、注意身体。,0,q2],[对方说有一个稳赚不赔的内部投资机会让你赶紧投钱。,1,q3],[邻居介绍的朋友约你在公园见面喝茶聊天。,0,q4],[海外华侨说要给你寄礼物但需要你先交2000元关税。,1,q5],[对方视频通话、见面都愿意但说想先了解一段时间。,0,q6],];}每道题用string[]存储[题目文本、答案1骗局/0正常、唯一标识]。使用字符串数组而非对象减少了数据结构复杂度。6.2 交互判断Row(){Text(✅ 是骗局).fontSize(14).fontColor(q[1]1?C.safe:C.textMuted).backgroundColor(q[1]1?C.safeDim:C.bgLight).onClick((){this.showTestResult(idx,true);})Text(❌ 是正常的).fontSize(14).fontColor(q[1]0?C.safe:C.textMuted).backgroundColor(q[1]0?C.safeDim:C.bgLight).onClick((){this.showTestResult(idx,false);})}两个按钮并排点击后触发showTestResult方法。按钮的颜色根据正确答案动态变化——如果用户选了是骗局而答案也是1是骗局按钮显示绿色正确否则显示灰色待选。6.3 结果反馈showTestResult(idx:number,answer:boolean):void{constisScamthis.getTestQuestions()[idx][1]1;if(answerisScam){promptAction.showToast({message:✅ 判断正确});}else{promptAction.showToast({message:❌ 这是骗局要小心});}}简单的正确/错误反馈。错误的提示直接告诉用户这是骗局而不是你判断错了——前者传递知识后者只传递失败感。7. 颜色心理学在安全类 App 中的应用7.1 色彩方案本 App 的色彩方案围绕安全和警示两个关键词设计颜色色值心理含义使用场景暖白底色#FFF5F0温暖、可亲近主背景珊瑚红#E86A5A警示、重要主色调深红#D63031危险、紧急高危标签绿色#4A9B5A安全、正确自测正确反馈暖橙#E8927C警告、注意警惕标签深红色#D63031仅用于高危骗局的标签不用于背景或大面积区域——心理学的色彩适应效应表明长期暴露在红色环境会引发焦虑。安全类 App 需要在提醒用户注意和不让用户紧张之间找到平衡。7.2 警示色的使用原则 深红仅用于标签文字高危 珊瑚红用于按钮、标题主色 暖橙用于中等风险标签 绿色用于正确/安全反馈 使用原则 - 深红色面积不超过屏幕的 5% - 珊瑚红面积不超过屏幕的 15% - 暖白色占屏幕的 80% 以上8. 内容驱动设计的优势8.1 内容 vs 代码的比例本 App 中内容数据SCAMS、TIPS、测试题占总行数的比例SCAMS 数组 6 种骗局 × 5 个字段 约 50 行 TIPS 数组 8 条语录 约 10 行 测试题数据 6 道题 × 3 个字段 约 20 行 内容总行数 约 80 行 代码总行数 298 行 内容占比 约 27%接近三分之一的代码是内容数据而非 UI 或业务逻辑。这是内容驱动设计Content-Driven Design的典型特征——App 的核心价值在内容中不在代码中。8.2 内容驱动与功能驱动的对比功能驱动内容驱动开发起点先写代码再填内容先写内容再写 UI迭代方式修改代码增加功能修改内容更新知识价值来源算法/交互创新内容质量更新成本需要发版只需要改数据典型 AppAI 树洞#24本 App在本 App 中如果发现一种新的骗局类型如AI 换脸诈骗只需要在SCAMS数组中添加一条新记录不需要修改任何 UI 代码。同样如果某条防骗建议需要更新只需要改advice字段的字符串。8.3 内容驱动设计的适用场景内容驱动设计最适合知识传递型App——App 的价值在于告诉用户一些他们不知道的事情而不是提供某种工具功能。适合内容驱动的 App ✅ 防骗教育 ✅ 健康知识 ✅ 语言学习 ✅ 法规政策解读 不适合内容驱动的 App ❌ 计算器 ❌ 打卡工具 ❌ 社交平台 ❌ 游戏9. 编译错误全记录9.1 错误概览本 App 实现0 个编译错误——与 App 31慢病管理并列系列最佳。0 个错误的原因没有引入新的代码模式所有 UI 模式Tab 架构、Grid、ForEach、Builder 参数传递都在前 32 款中验证过没有使用 const 声明所有数据通过 ForEach 回调参数或常量访问不需要在 Builder 中声明变量内容数据是常量SCAMS、TIPS、测试题都是顶层常量不是 State 变量弹窗使用内联访问详情弹窗中所有数据通过SCAMS[this.selectedScam]内联访问9.2 从 App 31 学到并应用的规则不要在 Builder 中用 const → ✅ 全部用内联或 ForEach 参数字符串引号要匹配 → ✅ 编码时检查Helper 方法解决数据访问 → ✅ 使用了getTodayTip()等9.3 三十三款 App 的错误趋势App 1: 16 ← 第一课 App 15: 1 ← 模式成熟 App 24: 48 ← AI 探索波峰 App 28: 8 ← 预览器问题 App 31: 0 ← 首次零错误 App 32: 6 ← 引号问题 App 33: 0 ← 第二次零错误App 33 的第二次零错误比 App 31 的第一次零错误更有意义——它证明了零错误不是偶然而是可复制的。当你知道如何避免所有已知错误时零错误就是一个可预期的结果而不是运气。10. 第三十三款 App 全景回顾10.1 数据总览指标数值代码行数298 行编译错误数0 个State 变量3 个Builder 方法6 个骗局类型6 种防骗语录8 条自测题6 道弹窗数1 个外部依赖0 个10.2 三十三款 App 的安全教育类对比App类型交互方式内容量错误数5 ️ 防骗训练电信诈骗情景选择12 场景1233 ️ 相亲防骗婚恋诈骗科普 自测6 骗局 6 题0两款安全类 App 相隔 28 款 App错误数从 12 降到了 0——这不是防骗知识的提升而是 ArkTS 开发能力的提升。相同的产品类型完全不同的开发效率。10.3 0 错误开发的工作流经过 33 款 App 的实践总结出零错误开发的标准化工作流步骤 1定义 ColorScheme先写 interface 步骤 2定义数据模型interface 常量数组 步骤 3写 build() 方法Tab 架构模板 步骤 4写各个 Builder注意不能用 const 步骤 5写业务方法 步骤 6编译 → 如果没有错误 → 完成 步骤 7如果有错误 → 修复 → 回到步骤 6这个工作流在 App 31 和 App 33 中都产生了零错误的结果。它不是一个理论框架而是一个经过验证的、可重复的实践流程。11. 结语11.1 防骗教育的温度防骗类的 App 很容易做得很冷——满屏的红色警示、恐吓性的语言、你可能会被骗光的威胁。这种风格可能有效确实能让人紧张但它不适合老年人。老年人的防骗教育需要温度。他们不是不聪明只是对网络世界不熟悉。他们不是贪心只是渴望被爱。一个好的防骗 App 应该在说小心骗子的同时也说被骗不是你的错。本 App 的语录中有一条被骗不是你的错是骗子太坏。说出来不要怕丢人。这句话是 8 条语录中最重要的一条。它告诉用户如果你被骗了不是你傻是骗子太狡猾。说出来子女不会责怪你。11.2 内容驱动的价值33 款 App 中内容驱动设计的 App如防骗训练、长辈说明书、方言学习、相亲防骗雷达有一个共同点它们的内容可以脱离代码独立存在。SCAMS 数组中的 6 种骗局、TIPS 中的 8 条语录、6 道自测题——这些内容即使放在 Word 文档里也是有价值的。代码只是内容的容器。这个发现指向了一个简单的结论在写代码之前先想清楚你要传递什么内容。内容对了代码好不好只是执行层面的问题。11.3 给开发者的建议内容驱动设计先写内容再写 UI。内容的质量决定了 App 的价值代码只是载体零错误是可复制的App 31 零错误App 33 也零错误——证明了零错误不是偶然。跟随标准化工作流你也可以做到安全类 App 需要温度不要用恐吓做教育用共情做教育弹窗高度 72% 是最佳实践经过 33 款 App 验证弹窗高度占屏幕 72% 时内容可读性和背景可见性最佳33 款 App 不是终点每一款 App 都在前一款的基础上改进了一个小细节——从零错误到内容驱动再到可复用的工作流11.4 致谢33 款 App、33 篇博客、约 330,000 字。从白噪音到相亲防骗雷达从不知道什么是 Builder 到零错误构建——33 款 App 记录了一整条学习曲线。如果你正在读这篇文章也在学习 HarmonyOS 开发希望这个系列能为你挡掉一些坑节省一些时间。现在打开 DevEco Studio去创造属于你自己的 App——不管它多简单对某个人来说可能很重要。附录 A核心代码速查骗局数据模型interfaceScamType{id:number;name:string;emoji:string;signs:string[];advice:string;level:string;}防骗自测showTestResult(idx:number,answer:boolean):void{constisScamthis.getTestQuestions()[idx][1]1;if(answerisScam){promptAction.showToast({message:✅ 判断正确});}else{promptAction.showToast({message:❌ 这是骗局要小心});}}每日防骗语录getTodayTip():number{returnMath.floor(Date.now()/86400000)%TIPS.length;}附录 B色板变量值用途C.bg#FFF5F0主背景C.primary#E86A5A珊瑚红C.danger#D63031高危标签C.safe#4A9B5A正确反馈C.warn#E8927C警惕标签附录 C零错误开发检查清单编码前 □ 不引入新模式如果必须引入先小范围测试 □ 不引入新 API如果必须引入先查预览器兼容性 编码中 □ const 不在 Builder 中使用 □ 字符串引号成对 □ ForEach 有 key 函数 □ 颜色有 interface 编码后 □ 预览器可以打开 □ 所有 Tab 可切换 □ 所有弹窗可打开/关闭 □ 所有交互有反馈