eHome App 端详细需求设计文档
M01 账号体系(对应需求:FR-101~105)
| 项目 | 内容 |
|---|---|
| 所属项目 | eHome 智能家居硬件配套 APP + 云端后台定制开发项目 |
| 设计依据 | 《eHome智能家居项目需求文档(PRD V1.1)》5.1节、第8章、NFR-03/04;《eHome项目页面功能工时费用明细表》M01模块(序号1~9) |
| 优先级 | P0(MVP必须,微信登录FR-104为P1) |
| 里程碑 | M1 MVP开发(账号为基础前置模块) |
| 文档用途 | 直接交付 UI 设计(1人天)与 Flutter 开发(13人天)、云端开发(10人天)、测试QA(3人天) |
1. 模块概述与设计原则
1.1 模块范围
本模块覆盖工时表 M01 的全部 9 个页面/功能项:
| 序号 | 页面/功能项 | 需求编号 | 类型 |
|---|---|---|---|
| 1 | 启动页与加载页 | — | APP |
| 2 | 手机号注册/登录页(验证码/倒计时/协议弹窗) | FR-101 | APP+云端 |
| 3 | 邮箱注册/登录页(密码+验证码双模式) | FR-102 | APP+云端 |
| 4 | 第三方登录(Apple/Google/Facebook) | FR-103 | APP+云端 |
| 5 | 微信登录(国内渠道包) | FR-104(P1) | APP+云端 |
| 6 | 账号认证服务与令牌管理 | FR-101~105 | 云端 |
| 7 | 修改密码页与服务 | FR-105 | APP+云端 |
| 8 | 账号注销与数据删除流程 | FR-105 | APP+云端 |
| 9 | 登录注册流程UI设计 | 第8章 | UI |
1.2 设计原则
- 简约扁平化:对标 Govee Home 简洁交互风格;主色调品牌蓝(色值待甲方品牌规范 Q9 确认后替换,设计稿先用占位色)。
- 关键操作不超过3步(PRD 8.1):登录/注册统一采用"验证码一键登录"模式,注册与登录合一,不区分注册流程。
- 全页面适配深色/浅色双主题(FR-211):账号页为首批适配页面。
- 文案 100% 走多语言资源文件:禁止硬编码(PRD 8.2),7语种:简中/繁中/英/德/法/西/日。
- 合规前置:首次启动必须先同意隐私政策方可发起任何数据采集;Apple 登录符合 App Store 审核要求(提供第三方登录时必须同时提供 Sign in with Apple)。
1.3 用户与角色
- 终端用户(主账号):注册账号、绑定设备、管理家庭。
- 家庭成员(共享用户):独立注册账号后被主账号邀请(邀请流程属 M02,本模块仅提供账号注册能力)。
2. 页面结构与流程图
2.1 页面导航结构
APP启动
├─ 首次启动 → P01 启动页 → 隐私政策弹窗 ─拒绝→ 退出/仅浏览受限模式
│ └─同意→ P02 登录引导页
├─ 非首次且已登录且令牌有效 → 直接进入首页(M04)
└─ 非首次未登录/令牌失效 → P02 登录引导页
P02 登录引导页
├─ 手机号登录 → P03 手机号注册/登录页 → P04 验证码输入页
├─ 邮箱登录 → P05 邮箱注册/登录页(双模式)→ P06 邮箱验证码输入页
├─ Apple / Google / Facebook 一键登录(免验证码)
├─ 微信一键登录(仅国内渠道包)
├─ 忘记密码 → P07 找回密码流程(复用P03/P04验证码能力)→ P08 重置密码页
└─ 第三方登录成功但未绑定手机号/邮箱 → P09 账号补充绑定页
个人中心(M12)入口
├─ 修改密码 → P10 修改密码页
└─ 设置-账号安全 → P11 注销账号页 → P12 注销确认页 → P13 注销冷静期/完成页
2.2 核心状态机(账号认证)
[未登录]
│
├──(登录成功)──────────────────────► [已登录(令牌有效)]
│ │
│ ├──(令牌过期+刷新成功)──► [已登录(令牌有效)]
│ ├──(令牌过期+刷新失败)──► [未登录] → 跳转P02
│ ├──(主动退出)──────────► [未登录]
│ ├──(异地登录保护触发)──► [需二次验证]
│ │ ├─(验证通过)► [已登录]
│ │ └─(验证失败)► [未登录]
│ └──(发起注销)──────────► [冷静期(可撤销)]
│ │
│ ├──(用户撤销)► [已登录]
│ └──(期满执行)► [已注销(数据删除)]
│
└──(第三方登录成功但未绑定手机/邮箱)──► [P09 账号补充绑定页]
│
├──(完成绑定)► [已登录]
└──(暂不绑定)► [已登录(受限)]
3. 页面级详细需求
P01 启动页与加载页(工时表序号1,Flutter 1人天)
页面目标:品牌展示 + 冷启动初始化。
| 元素 | 规格 |
|---|---|
| 品牌 LOGO | 居中,甲方提供素材(Q9);LOGO 下方产品名"eHome"+ 一句 slogan(多语言) |
| 版本号 | 底部小字显示,如"V1.0.0 (Build xx)" |
| 背景 | 浅色主题白色/深色主题深灰,支持品牌图切换(由后台配置,一期可纯色) |
逻辑规则:
- 冷启动展示时长 ≤2秒(含初始化:读取本地令牌、语言/主题配置、SDK初始化、Sentry初始化)。
- 初始化完成后路由决策:
- 首次启动(本地无隐私同意记录)→ 隐私政策弹窗(见P01-a);
- 已同意隐私 + 本地令牌有效 → 直接进首页;
- 已同意隐私 + 无令牌/令牌失效且刷新失败 → P02 登录引导页。
- 热启动(后台切前台)不重复展示启动页,仅校验令牌有效性。
- 加载失败(无网络):启动页展示"网络异常"提示 + "重试"按钮,不允许未同意隐私政策即发起网络请求。
P01-a 隐私政策弹窗(合规硬性要求,NFR-04):
- 首次启动必现,不可跳过。
- 内容:《用户协议》《隐私政策》可点击链接跳转 WebView 阅读,摘要说明收集的个人信息类型(手机号/邮箱/设备标识/位置——位置仅气象功能使用)。
- 按钮:【同意并继续】主按钮 /【不同意】次按钮。
- 【不同意】→ 二次挽留弹窗(说明不同意将无法使用)→ 仍不同意则退出 APP 或进入无数据采集的受限模式(仅浏览协议页面)。
- 未同意前禁止调用任何采集设备信息的 SDK(推送、第三方登录 SDK 延迟初始化)。
验收要点:首次启动必现隐私弹窗;同意记录本地持久化;启动到路由决策 ≤2s。
P02 登录引导页(登录方式聚合页)
页面目标:统一入口,聚合全部登录方式,突出验证码一键登录。
布局(自上而下):
- 顶部:品牌 LOGO + "欢迎使用 eHome"(多语言)。
- 主按钮区(一级):【手机号登录/注册】品牌蓝填充大按钮;【邮箱登录/注册】描边按钮。
- 分割线:"或使用以下方式登录"(多语言)。
- 第三方登录图标区(二级,圆形图标横排):Apple(仅iOS,首位)、Google、Facebook、微信(仅国内渠道包)。
- 底部:《用户协议》《隐私政策》链接 + 已读勾选框(勾选状态与P01一致则默认勾选)。
交互规则:
- 未勾选协议时点击任何登录方式 → Toast 提示"请先阅读并同意用户协议和隐私政策",协议文案高亮抖动。
- 第三方图标按渠道包动态渲染:海外包 = Apple+Google+Facebook;国内包 = 手机号+邮箱+微信(Apple仅iOS)。
- 页面右上角【跳过】不开放(账号为设备绑定前提,必须登录才能使用)。
- 语言跟随系统,若与7语种不匹配则默认英语。
验收要点:渠道包登录方式配置正确;Apple 登录在 iOS 端展示且符合审核要求(FR-103)。
P03 手机号注册/登录页(FR-101,序号2,APP 2.5人天 + 云端1.25人天 + QA 0.5人天)
页面目标:手机号 + 短信验证码,注册登录合一。新用户首次登录进入引导页(PRD验收标准)。
页面元素:
| 元素 | 规格与规则 |
|---|---|
| 导航 | 左上角返回箭头 |
| 标题 | "手机号登录/注册"(多语言) |
| 区号选择器 | 下拉选择国际区号,默认按SIM卡/系统地区自动识别;支持搜索;支持主流地区手机号 |
| 手机号输入框 | 仅数字键盘;按所选区号规则校验长度(前端本地校验);输入满位数自动启用"下一步"按钮 |
| 【下一步】按钮 | 未通过格式校验时置灰;点击后进入 P04 并自动触发发送验证码 |
| 协议区 | 复用 P02 勾选状态 |
逻辑规则:
- 手机号格式本地校验失败 → 输入框下方红色错误文案"请输入正确的手机号",不发请求。
- 点击【下一步】→ 请求云端"发送短信验证码"接口 → 成功后跳转 P04 自动开始倒计时。
- 云端风控(防刷):同一手机号60秒内不可重复发送;每日上限10条;同IP/设备每小时上限;超限返回错误码;连续失败触发图形验证码挑战。
- 号码被冻结(后台 FR-401)→ 登录后提示"账号已被限制,请联系客服"。
P04 验证码输入页
页面元素:
- 标题:"输入验证码",副标题显示"验证码已发送至 +86 138****8888"(脱敏)。
- 6位验证码分格输入框(自动读取系统短信填充;数字键盘)。
- 倒计时区:"60s 后重新发送"→ 结束变为可点击【重新发送】。
- 【更换手机号】文字链 → 返回 P03。
- 登录成功前展示 loading,禁止重复提交。
逻辑规则:
- 输满6位自动提交校验。
- 验证码有效期5分钟;错误→清空+提示;连续错误5次→作废强制重获。
- 校验通过:已注册用户→登录成功跳首页;新用户→自动建号+登录→进入新用户引导页(2~3屏轮播,可跳过,标记云端持久化)。
- 令牌过期自动刷新无感处理。
异常与边界(QA重点):无网络提交、验证码过期、倒计时中杀进程重进(倒计时本地持久化)、多设备同号码并发登录、区号切换后位数校验。
P05 邮箱注册/登录页(FR-102,序号3,APP 2.5人天 + 云端1.25人天 + QA 0.5人天)
页面目标:支持"邮箱验证码"与"邮箱+密码"两种方式(PRD验收标准),注册登录合一。
页面元素:
| 元素 | 规格与规则 |
|---|---|
| 方式切换 Tab | 【验证码登录】/【密码登录】,默认验证码;切换保留已输入邮箱 |
| 邮箱输入框 | 邮箱键盘;本地正则校验;合法后启用下一步 |
| (密码Tab)密码输入框 | 可见/隐藏切换(眼睛图标) |
| (密码Tab)忘记密码 | 文字链 → P07 |
| 主按钮 | 验证码Tab:【下一步】→ P06;密码Tab:【登录/注册】 |
验证码模式:格式错误→红色提示;点击下一步→发送邮件验证码(6位,10分钟有效)→ P06(同P04布局,脱敏邮箱,60秒重发);新用户自动建号+引导页;频控同短信。
密码模式:正确→登录;未注册→统一提示"邮箱或密码错误"(防枚举);错误5次锁定15分钟;密码强度校验:8~32位、含字母+数字、实时强度条(弱红/中黄/强绿)、禁止与邮箱前缀相同、禁止纯数字连续重复。
第三方登录:Apple / Google / Facebook(FR-103,序号4,APP 3人天 + 云端2人天 + QA 0.5人天)
页面形态:无独立页面,P02图标触发 + P09补充绑定页。
交互流程:
- 点击图标→调起系统授权→全屏loading。
- 客户端提交凭证至云端校验:首次→自动建号(昵称取第三方,Apple隐藏邮箱时生成默认昵称,头像取第三方或默认)+引导页;非首次→直接登录。
- 取消授权→静默返回P02;失败→Toast+Sentry上报。
- 登录成功后检测账号绑定状态:若手机号与邮箱均为空 → 强制跳转 P09;若已绑定任一 → 正常进入首页。
P09 账号补充绑定页(第三方登录后置流程)
页面目标:确保第三方登录账号至少拥有一种可用于找回/注销的身份凭证,满足合规与安全要求。
页面元素:
- 标题:"完善账号信息"(多语言)。
- 说明文案:"为保障账号安全与后续找回,请绑定手机号或邮箱"。
- 【绑定手机号】主按钮 → 跳转 P03/P04 流程(场景参数=bind,成功后返回本页并刷新状态)。
- 【绑定邮箱】次按钮 → 跳转 P05/P06 流程(场景参数=bind,成功后返回本页并刷新状态)。
- 【暂不绑定】文字链(灰色小字)→ 弹窗二次确认"未绑定可能导致账号丢失且无法注销,确定跳过?"→ 确认后进首页,账号标记为"受限"状态。
受限状态规则:
- 可正常使用基础功能(查看设备、控制设备);
- 不可执行敏感操作:添加新设备、创建家庭、邀请成员、修改密码、注销账号;
- 每次进入受限功能页 → 拦截弹窗引导补绑;
- 个人中心账号卡片显示黄色警示标签"账号未完善"。
绑定成功反馈:Toast"绑定成功" + 解除受限状态 + 云端更新账号完整度标记。
验收要点:第三方首次登录无绑定必现P09;绑定流程复用P03~P06且场景参数正确传递;受限状态拦截逻辑完整;暂不绑定二次确认不可省略。
微信登录(FR-104,P1,序号5,APP 1人天 + 云端0.5人天 + QA 0.25人天)
范围:仅国内渠道包(开关控制,海外包隐藏入口且不初始化SDK)。
流程:未安装→Toast提示;已安装→跳转授权→返回提交code→建号/登录→首次进引导页→检测绑定状态,无手机/邮箱→P09补充绑定(国内强引导,暂不绑定选项弱化或不展示);取消静默返回;失败Toast+Sentry。
优先级:P1,M2交付;UI与渠道开关逻辑M1一并实现。
P07/P08 忘记密码与重置密码(FR-105)
流程:P05密码Tab【忘记密码】→输入邮箱/手机→发验证码→验证通过→P08重置密码(新密码+确认,强度校验同P05,两次不一致提示,不得与旧密码相同)→成功Toast→强制新密码重新登录(全端旧令牌吊销);第三方无密码账号入口文案为"设置密码"。
P10 修改密码页(FR-105,序号7,APP 1人天 + 云端1人天 + QA 0.25人天)
入口:个人中心→账号与安全→修改密码。
元素:原密码、新密码、确认新密码(均带眼睛图标)+【确认修改】。
规则:原密码错误→提示,连续5次当日禁止;新密码强度同P05;新旧相同→提示;成功→吊销除当前设备外全部令牌;第三方无密码→隐藏原密码框显示"设置密码";成功后Toast+安全通知。
P11~P13 账号注销与数据删除(FR-105,序号8,APP 2人天 + 云端2人天 + QA 1人天)
入口:个人中心→账号与安全→注销账号(iOS必须提供,App Store审核要求)。
P11 注销说明页:列出后果(永久删除不可恢复、解绑、数据删除范围含2年时序数据、设备恢复出厂、15天冷静期可撤销、GDPR/国内合规依据);前置校验阻断(主账号且有成员→先转移/移除;OTA进行中→等待;冻结→联系客服;受限账号→先完成P09绑定);底部【申请注销】红色警示按钮/【放弃】。
P12 注销确认页:身份二次验证(短信/邮箱/密码,第三方无密码强制绑定验证);勾选"已知晓后果";提交→P13。
P13 注销生效/冷静期页:展示正式注销日期;【撤销注销】冷静期内可撤;【退出登录】不撤销;冷静期内重新登录弹窗询问是否撤销。
云端删除:冷静期到期删除/匿名化PII、解除关系、删时序数据;日志留存(不含PII);后台同步"已注销"状态。
异地登录保护(FR-105验收标准)
策略:云端记录设备指纹+IP归属地;触发条件=新设备+IP归属地与30天常用不一致;动作=放行+安全通知(邮箱/手机),异常行为叠加时强制二次验证码验证;APP配合推送跳转账号安全页;个人中心【登录设备管理】列表支持移除设备(吊销令牌)。
4. 通用交互与视觉规范(UI设计输入,序号9)
- 双主题:浅色/深色两套设计稿;token化颜色;跟随系统(FR-211)。
- 组件清单:大按钮三态、描边按钮、第三方圆形图标、分格验证码框、倒计时、密码框(眼睛)、强度条、协议勾选、Toast、全屏loading、二次确认弹窗、区号选择器(含搜索)。
- 表单规则:错误就近红色12px+关键Toast;聚焦自动上滚避键盘;提交防重复(loading+禁用)。
- 键盘:手机号数字、邮箱邮箱、验证码数字自动聚焦、密码不联想不缓存。
- 多语言:德/法预留1.4倍文本空间,提供最长文案示例;RTL本期不涉及。
- 动效:转场系统默认;验证码错误抖动;倒计时渐变。
5. 客户端技术要求(Flutter)
- 兼容 iOS 13+ / Android 7.0+(NFR-06)。
- 令牌存储:iOS Keychain / Android Keystore封装,加密存储(NFR-03);不落盘明文密码。
- 全链路TLS(NFR-03),禁明文HTTP;证书校验不可关闭。
- 短信自动填充:Android SMS Retriever / iOS系统能力。
- 渠道包:登录方式开关由构建变体控制,同一套代码。
- SDK延迟初始化:隐私同意前不初始化微信/Google/Facebook/推送SDK。
- Sentry(NFR-10):登录失败/SDK异常/刷新失败上报,不携带手机号/邮箱明文。
6. 云端需求(序号6:账号认证服务与令牌管理,2人天)
6.1 接口清单
| 接口 | 说明 |
|---|---|
| POST /auth/sms/send | 发送短信验证码(区号+手机号、场景login/bind/reset/cancel、风控挑战参数) |
| POST /auth/email/send | 发送邮箱验证码(同上场景参数) |
| POST /auth/login/code | 验证码登录/注册(返回令牌+isNewUser) |
| POST /auth/login/password | 邮箱密码登录 |
| POST /auth/login/thirdparty | 第三方登录(渠道+凭证,返回令牌+isNewUser+needBind) |
| POST /auth/token/refresh | 刷新令牌 |
| POST /auth/logout | 退出登录(吊销当前令牌) |
| POST /auth/password/reset | 重置密码(验证码凭证+新密码) |
| POST /auth/password/change | 修改密码(旧+新,登录后调用) |
| POST /auth/bind | 补充绑定手机号/邮箱(验证码凭证+绑定类型,登录后调用) |
| GET /auth/account/status | 查询账号完整度与受限状态 |
| GET /auth/devices | 登录设备列表 |
DELETE /auth/devices/{id} | 移除设备(吊销指定令牌) |
| POST /account/cancel | 申请注销 |
| POST /account/cancel/revoke | 撤销注销 |
6.2 令牌与安全策略
- 双令牌:AccessToken 2h + RefreshToken 30d滑动续期;401静默刷新,失败跳登录。
- 改密/重置→吊销全部(重置)或除当前外(修改)。
- 多设备上限5台,超限挤掉最旧+推送。
- 验证码:短信5min/邮箱10min;60s重发+日上限+IP/设备风控+图形挑战;错5次作废。
- 密码:加盐哈希(bcrypt/argon2),禁明文/可逆加密(NFR-03)。
- 防枚举:统一错误文案。
- 复用IoT平台账号体系(云端-0.5人天)。
- 账号完整度标记:thirdparty_only / bound_phone / bound_email / full;受限状态由完整度驱动。
6.3 合规(NFR-04)
- 登录日志最小化留存;GDPR注销触发删除/匿名化,数据可携带权二期;国内合规注销入口+隐私政策版本化(重大变更重弹窗)。
7. 验收标准核对表(对齐 PRD 5.1)
| 需求 | PRD验收标准 | 本设计落点 |
|---|---|---|
| FR-101 | 主流地区手机号;60秒倒计时防频繁;新用户首次进引导页 | P03区号选择器;P04倒计时+云端频控;P04新用户引导页 |
| FR-102 | 邮箱验证码/密码双方式;密码强度校验 | P05双Tab;强度条与规则 |
| FR-103 | 三渠道一键登录自动建号;Apple符合审核 | 第三方自动建号;Apple首位+隐藏邮箱;P09补充绑定 |
| FR-104 | 国内渠道包微信授权登录 | 微信登录+渠道开关,P1排期M2;P09国内强引导 |
| FR-105 | 改密、注销(含数据删除GDPR/国内合规)、异地保护 | P10、P11~P13冷静期+云端删除、异地策略;P09受限拦截 |
QA测试要点(3人天):多区号边界、验证码频控并发、双主题×7语种走查、第三方授权各分支、P09绑定/暂不绑定/受限拦截全流程、渠道包矩阵、令牌静默刷新、注销全流程(含受限账号阻断)、密码强度与锁定。
8. 依赖与风险
| 项 | 说明 | 责任/时点 |
|---|---|---|
| 品牌LOGO与蓝色值(Q9) | UI高保真前置,先用占位 | 甲方M0提供 |
| 云平台选型(Q1) | 影响令牌方案细节 | M0确认 |
| 第三方开发者账号 | Apple/Google/Facebook/微信资质 | 甲方配合(PRD第12章) |
| 短信/邮件服务商 | 国际通道覆盖范围 | M0确定 |
| 隐私政策/注销文案法务审核 | 合规验收前置 | 甲方/双方法务,M1前定稿 |
以上为 M01 账号体系完整详细需求设计,页面、交互、校验、异常、接口、验收均已闭环,可直接交付UI与开发。如确认无误,可按同样格式继续输出 M02 家庭与设备管理(FR-111~116)。