| 项目 | 内容 |
|---|---|
| 文档版本 | v1.1(2026-09-15 更新:产品已就 5 项决策拍板,详见第十一章) |
| 功能模块 | 我的 → 设备 |
| 适用端 | iOS / Android(移动端);涉及其它端的登录行为在第六章 6.8 与第八章中约定 |
| 设计稿 | Figma「U8 Chat 2.0」6dsI4eKdAoZr4RP0uILIBq · 画布「设备管理」node 515-989 |
| 线框图与演示 | 同目录 index.html(20 屏可点击串联) |
| 查缺补漏报告 | 历史归档 _archive/01_查缺补漏-页面清单与比对.md |
| 参照产品 | Telegram「Settings → Devices / Active Sessions」 |
本 PRD 的特点:设计稿已交付 9 屏主干。按 Telegram 逐条筛过后,真正缺的「页面」只有 1 个 (扫码确认授权页),其余补充是已有页面的状态 6 屏、设计稿回改 1 屏、其它模块 3 屏,全案共 20 屏。 「非 Telegram 固有且可合并」的一律已合并;编辑态只支持逐个删、不做批量(决策 D5)。删除会话有「逐个删」与「除本机外全删」两类路径。产品决策见 第十一章。
一、背景与目标
1.1 背景
U8 Chat 支持同一个账号在多个端同时在线(iOS、Android、Web、桌面端)。这带来两个必须解决的问题:
- 用户看不见:用户无法知道自己的账号此刻登录在哪几台设备上。
- 用户管不了:一旦发现陌生设备(账号被盗、旧手机没退登录、公共电脑忘了退),没有办法把它踢下线。
同时,U8 Chat 与 U8 加密钱包共用账号。设备即资产入口——一台陌生设备在线,等于资产查看权限暴露。因此设备管理的安全等级要求高于普通 IM。
1.2 现状问题(本次要解决的)
| # | 问题 | 影响 |
|---|---|---|
| 1 | 支持多端在线,但设备管理只在设置里有一行入口,且「添加设备」链路两端断裂 | 扫码登录走不通,用户只能靠密码在别的端登录 |
| 2 | 注销会话后没有任何反馈 | 用户不知道成没成,会重复操作,甚至误以为已生效(安全误判) |
| 3 | 编辑态(批量注销)只画了半个界面,且与「全删」重复 | 会让人不知道批量该走哪个入口(已决策:不补齐编辑态,由「除本机外全删」承接,见 6.5) |
| 4 | 扫码登录无手机端确认 | 扫到别人发的二维码 = 账号直接被登走(Telegram 最典型的诈骗手法) |
| 5 | 没有新设备登录提醒 | 账号被盗后用户可能几周都不会发现 |
1.3 目标
业务目标
- 让用户能自助管理登录设备,降低因账号被盗导致的资产损失与客诉。
用户目标
- 3 步之内完成「发现陌生设备 → 踢它下线」。
- 在电脑上登录时,用手机扫码 10 秒内完成,且能看清自己在给哪台设备授权。
成功指标(上线首月)
| 指标 | 目标 |
|---|---|
| 设备管理页周访问 UV / 活跃用户 | ≥ 15% |
| 「注销所有其它设备」操作成功率 | ≥ 98% |
| 扫码登录成功率(进入扫码页 → 电脑端登录成功) | ≥ 85% |
| 从「设备列表」到「注销完成」的平均步数 | ≤ 3 步 |
| 因"陌生设备"产生的安全类客诉 | 环比下降 50% |
二、范围
2.1 本期做
- 设备列表(此设备 + 活跃会话)
- 单台会话注销(详情页按钮入口 + 列表左滑)
- 一键注销所有其它设备
- 自动终止旧会话(超时自动登出)
- 添加设备(扫码登录)完整闭环:扫码 → 手机端确认授权 → 电脑端登录 → 结果反馈
- 电脑端二维码页的引导文案(手机端不再出引导说明页,见 6.8.1)
- 全部状态页:加载中 / 空态 / 失败 / 成功反馈
- 新设备登录的安全通知(站内系统消息)
2.2 本期不做(明确划出)
| 不做的事 | 原因 |
|---|---|
| 扫码授权前的资金密码 / Face ID 二次验证 | 已决策本期不做(见 D2) |
| 「新设备 24 小时内不能注销其它会话」的安全规则 | 已决策本期不引入(见 D3) |
| 手机端的「添加设备-引导说明页」 | 已决策不做(见 D6);点「添加设备」直接进相机,引导由电脑端二维码页承担 |
| 编辑态的批量能力(勾选 / 全选 / 注销所选) | 不做:编辑态保留,但只支持一台一台删(见 D5 / 6.5)。批量删与「注销所有其它设备上的会话」重复 |
| 登录两步验证(2FA) | 本期不做 —— 影响见 6.9.1:没有 2FA 时,验证码是登录的必经步骤 |
| 深色模式、大字号无障碍适配 | 随全局一起排期 |
三、名词定义
| 名词 | 定义 |
|---|---|
| 此设备 | 用户当前正在操作的这台设备。不能被自己注销。 |
| 活跃会话 | 除「此设备」外,其它在线的登录会话(含 Web / 桌面端)。 |
| 注销会话 | 结束某一台设备上的登录状态。该设备立即掉线,需重新登录。 |
| 注销所有其它设备上的会话 | 除「此设备」外,一次性结束全部会话。 |
| 自动终止旧会话 | 设置一个时长,超过该时长未上线的设备自动退出登录。 |
| 设备登录二维码 | 由电脑端(网页版 / 桌面端) 在登录页展示、仅供手机端扫描授权登录的二维码。有效期 5 分钟。 |
| 扫码登录(链接设备) | 手机端扫描电脑屏幕上的二维码,经手机端确认后,电脑端获得一个独立会话。 |
| 会话 ID | 每一次登录的唯一标识。同一台设备重复登录会产生新会话。 |
四、用户与场景
只有一个用户角色:账号持有者本人(无管理员、无子账号)。
场景 A · 例行巡查(低频、低风险)
用户换过几台设备,想确认一下现在还有哪些端在线。 路径:我的 → 设备 → 看到 3 台活跃会话,其中一台是半年前的公司电脑 → 点进详情 → 注销会话 → Toast「已注销」。
场景 B · 发现异常登录(低频、高风险、本功能的核心场景)
用户收到「新设备登录」通知(6.9.1),设备名和位置都不是自己的。 路径:通知 → 前往设备管理 → 看到陌生设备 → 点「注销所有其它设备上的会话」→ 确认 → Toast 成功。 要求:从收到通知到踢掉设备,不超过 30 秒、不超过 3 步。
场景 C · 换手机 / 旧设备忘了退
路径:新手机上登录 → 我的 → 设备 → 点「注销所有其它设备上的会话」→ 确认(一步清掉所有旧设备)。
场景 D · 在电脑上登录(扫码)
路径:在电脑端打开 U8Chat(网页版 / 桌面端)→ 按页面引导切到二维码登录 → 手机:我的 → 设备 → 添加设备 → 扫码 → 确认登录 → 电脑端登入成功,手机端列表新增该设备 + Toast。
场景 E · 公共电脑用完就走
用户在网吧/酒店电脑上用了网页版,离开前在手机上把它踢掉。 依赖:场景 A + 「最后活跃时间」字段足够准确。
五、功能总览
| 模块 | 功能点 | 页面(线框图) | 优先级 |
|---|---|---|---|
| A 入口 | 「我的」页设备入口 | — | P0 |
| B 列表 | 设备列表页(此设备 / 活跃会话) | #E1 | P0 |
| B 列表 | 加载中 / 空态 / 加载失败 | —(不出独立屏,规则见 6.2 异常与边界) | 状态 |
| C 详情 | 会话详情面板(含字段补全) | #E7 #E8 #N16 | P0 |
| D 注销 | 单会话注销 + 确认 | #E9 | P0 |
| D 注销 | 列表左滑注销单台(原编辑态里的左滑,保留并独立) | #E4 | 已有 · 需回改 |
| D 注销 | 注销所有其它设备 + 确认 | #E2 | P0 |
| D 注销 | 成功 / 失败反馈 | #N08 #N09 | 状态 |
| E 设置 | 自动终止旧会话(含设置后回填) | #E6 | 已有 |
| F 扫码 | 扫码 → 确认授权 → 结果 | #E5 #N02 #N04 | 新增页面 + 状态 |
| F 扫码 | 失败态 / 权限态 | #N05 #N06 | 状态 |
| G 安全 | 新设备登录通知 | #N17 | 其它模块(聊天) |
| G 安全 | 被注销设备端表现(跨端) | #N15 | 其它模块(登录) |
六、需求详述
6.1 入口(P0)
| 项 | 说明 |
|---|---|
| 位置 | 「我的」页 → 列表第 7 行「设备」(Figma 573:23903 已有此行) |
| 右侧 | 默认无内容;有异常时显示红点(异常定义见下) |
| 异常定义 | ① 存在"最后活跃时间在 30 天内"但用户从未在自己的设备列表里见过的新会话 → 红点提示「有新的登录设备」 |
| 点击 | 进入设备列表页 #E1 |
待确认 Q1:红点规则是否要做?做的话需要"用户见过"的本地标记,属于客户端存储。
6.2 设备列表页 #E1(P0)
页面结构(自上而下)
- 导航栏:
‹ 返回· 标题「设备」 · 右侧无操作(原「编辑」入口已决策删除,见 6.5) - 扫码登录引导区:二维码图标 + 「通过扫描二维码登录」+ 主按钮「添加设备」
- 此设备 分组
- 一张卡片:设备图标 · 设备名 · 应用与版本 · 位置 · 「在线」
- 卡片内一条红色操作行:注销所有其它设备上的会话
- 下方灰色说明:登出除此设备外的所有设备
- 活跃会话 分组
- 每台会话一张卡片:设备图标 · 设备名 · 应用与版本 · 位置 · 最后活跃时间
- 底部说明:U8Chat 官方应用可用于 iPhone、iPad、Android、macOS、Windows。
- 自动终止旧会话 分组
- 一行设置项:「若我不上线」→ 当前值(如「6 个月」)
字段与数据来源
| 字段 | 来源 | 规则 |
|---|---|---|
| 设备名 | 系统上报 | 如 iPhone 17 Pro、MacBook Air M1、Chrome 152(网页版用浏览器名) |
| 应用与版本 | 客户端上报 | 格式 U8Chat <平台> <版本>,如 U8Chat iOS 12.8.1;带渠道时拼接渠道,如 U8Chat macOS 12.6 APP_STORE |
| 位置 | IP 估算 | 格式 城市,国家(英文,与设计稿一致);必须同时展示免责说明 |
| 在线状态 | 服务端 | 此设备固定显示「在线」(蓝色);活跃会话显示最后活跃时间 |
| 最后活跃时间 | 服务端 | 规则见 7.1 |
排序规则
- 此设备固定在最上(不参与排序)。
- 活跃会话按「最后活跃时间」倒序。
- 新登录的设备自然排在最前(其最后活跃时间即「刚刚」)。
- 不额外打「新」标记(决策 D7)—— 登录提醒统一由官方账号 U8 Chat 承担(见 6.9.1)。
数量与滚动
- 列表不做分页;全部展示,超出即可滚动。
- 设备数 > 20 时(同一账号极少出现),在列表底部追加「仅显示最近 20 台设备」的说明。
交互
| 操作 | 结果 |
|---|---|
| 点「此设备」卡片 | 打开此设备详情面板 #E7 |
| 点「注销所有其它设备上的会话」 | 弹出确认弹窗 #E2 |
| 点某台活跃会话 | 打开会话详情面板 #E8 / #N16 |
| 左滑某台活跃会话 | 露出红色「注销」按钮 → 点击后进确认弹窗 #E9(快捷路径,与详情页按钮等价) |
| 点右上角「编辑」 | 进编辑态 #E3:其它设备每行出现红色减号 → 点减号进确认弹窗 #E9(只支持逐个删,见 6.5) |
| 点「添加设备」 | 直接进入扫码页 #E5 |
| 下拉刷新 | 重新拉取列表 |
异常与边界
| 情况 | 处理 |
|---|---|
| 只有此设备 | 照常显示「此设备」卡片(本机永远在,列表不会全空);「活跃会话」区显示一行「暂无其它活跃会话 / 你只在这台手机上登录着 U8Chat」;「注销所有其它设备」行隐藏。不单独出空态页 |
| 列表加载中 | 不做骨架屏(已决策):正常等待数据返回 |
| 加载失败 | 在设备列表页之上弹一个提示框「网络连接已中断」,不带按钮;失败时不展示任何缓存数据,避免用户基于旧数据做注销决策 |
| 扫码添加设备中 | 该设备以「等待确认」状态临时插入列表(可选,见 Q2) |
埋点:页面曝光、拉取成功/失败、点击「添加设备」/某会话/注销所有其它设备、左滑注销。
6.3 会话详情面板 #E8 / #E7 / #N16(P0)
触发:点击列表中的任一设备(含此设备)。
结构(自下而上的 Sheet)
- 左上角关闭按钮
✕ - 设备图标 + 设备名(大号)
- 状态行:此设备→「在线」(蓝);活跃会话→「最后活跃:3 分钟之前」(灰)
- 信息卡(本次补全的字段)
- 此设备:应用程序、位置、IP 地址、登录时间
- 活跃会话:应用程序、位置、IP 地址、登录时间、最后活跃时间
- 免责说明:该位置根据 IP 地址估算,可能并不准确
- 底部红色按钮:注销会话(此设备详情面板中不出现此按钮)
- 这是「一个一个删」的可见入口:列表左滑是隐形手势,此按钮保证用户一定找得到删除路径。编辑态取消后,它成为列表页之外唯一的单台删除入口,不要砍。
必改项
- 删除设计稿中的残留文案「预览兑换」。
- 修正占位数据:MacBook Air M1 的「应用程序」应为 macOS 版本,位置应与列表一致。
- 确认弹窗点名设备(见 6.4)。
不做的(避免过度设计)
- 不加会话级开关。「允许接收通知 / 允许在此设备发起资产操作」是 U8 特有的设想;
Telegram 的同类开关(新密钥聊 / 接听来电)与 U8 的场景对不上,本期不引入。
6.4 单会话注销 #E9(P0)
| 步骤 | 说明 |
|---|---|
| 1 | 用户点击详情面板底部「注销会话」 |
| 2 | 弹出确认弹窗。标题「提示」,正文 「注销 MacBook Air M1 的会话?」(必须点名设备) |
| 3 | 附一句后果:「该设备将立即退出登录,需要重新登录才能使用。」 |
| 4 | 按钮:注销会话(红色,主)/ 取消 |
| 5 | 成功 → 关闭面板、该设备从列表移除、Toast「已注销 MacBook Air M1 的会话」#N08 |
| 6 | 失败 → 保持原样 + 红色 Toast「注销失败,请检查网络后重试」#N09,可在面板底部重试 |
| 7 | 若列表中已无其它设备 → 只在「活跃会话」区显示一行「暂无其它活跃会话」,不出独立空态屏 |
被注销端:见第八章 / #N15。
6.5 编辑态(逐个删)#E3(P0)
入口与形态
| 项 | 说明 |
|---|---|
| 入口 | 主页 #E1 右上角「编辑」;「活跃会话」为空时该入口隐藏 |
| 形态 | 进入后,其它设备(活跃会话)每行左侧出现红色减号(待删除态);「此设备」卡片不带减号 |
| 点红色减号 | 进确认弹窗 #E9(与左滑注销等价),确认后该台从列表移除 |
| 退出 | 右上角「完成」(✓)回列表 |
| 不做 | 「已选 N 项」计数、全选、底部批量提交按钮 —— 只支持一台一台删 |
设计意图
进入编辑态只为露出删除控件(每行红色减号),不做多选批量 —— 批量删与 6.6 的「注销所有其它设备上的会话」重复,且要多两步(编辑 → 全选 → 提交)。
删除会话的全部路径
| # | 路径 | 入口 | 覆盖场景 |
|---|---|---|---|
| ① | 左滑 | 列表页某台会话左滑 #E4 → 确认 #E9 | 只怀疑其中一台 |
| ② | 详情页按钮 | 进 #E8 → 底部「注销会话」→ 确认 #E9 | 想先看详情再决定 |
| ③ | 编辑态减号 | 主页「编辑」→ #E3 → 点某台的红色减号 → 确认 #E9 | 想在一屏里逐台清理 |
| ④ | 除本机外全删 | 主页「注销所有其它设备上的会话」#E2 → 确认 → #N19 | 发现陌生设备,一次清干净(场景 B、C) |
①②③ 等价,都进同一个确认弹窗
#E9;④ 是唯一的批量路径。
设计稿需回改:633:23990(我的-设备-编辑)—— 去掉批量元素(不要「已选 N 项」、不要全选、不要底部操作条),减号点击进确认弹窗;633:24117(编辑-确定注销)—— 保留左滑、去掉编辑态外壳,见 #E4。
6.6 注销所有其它设备上的会话 #E2(P0)
| 项 | 说明 |
|---|---|
| 入口 | 列表页「此设备」卡片内的红色行 |
| 前置 | 至少存在 1 台活跃会话;否则该行隐藏 |
| 确认弹窗 | 标题「提示」;正文「你确定要注销所有其它设备上的会话吗?」+ 后果说明「其它设备将立即退出登录,正在进行的加密会话与文件传输会被中断。」 |
| 按钮 | 注销所有其它设备上的会话(红色)/ 取消 |
| 成功 | 一次清空其它全部会话,回列表:活跃会话区显示一行「暂无其它活跃会话」;「注销所有其它设备上的会话」红色行同步隐藏。Toast「已注销其它 N 台设备」(报数量,不点名设备 —— 点名是单台路径的规则)。线框 #N19 |
| 失败 | 保持原样 + 红色 Toast + 可重试(#N09)。不引入 24 小时限制,故不存在"暂时不允许注销"的业务失败原因 |
埋点:点击入口、确认、取消、成功、失败(含失败原因)。
6.7 自动终止旧会话 #E6(P1)
| 项 | 说明 |
|---|---|
| 入口 | 列表页底部「若我不上线」设置行 |
| 选项 | 1 周 / 1 个月 / 3 个月 / 6 个月(默认) / 1 年 |
| 当前值 | 在弹层中打勾高亮 |
| 生效 | 选择后立即生效,不另开确认页:弹层关闭 → 设置行回填新值 → Toast「已设置:1 个月不上线自动终止」 |
| 说明文案 | 设置行下方补一句:「超过该时长未上线的设备将自动退出登录」 |
| 后端行为 | 服务端定时任务扫描 last_active < now - 阈值 的会话并注销;被注销端按第八章处理 |
待确认 Q5:是否提供「从不」选项?提供等于允许会话无限期存在。
6.8 添加设备(扫码登录)完整闭环 #E5→#N02→#N04(P0)
这是本次补缺的重点。原稿只有中间的「扫码取景」一屏,扫到码之后全断。
6.8.1 步骤 1:扫码 #E5 —— 手机端不做引导说明页(已决策 D6)
产品已确认:手机端不设「添加设备-引导说明页」,点「添加设备」直接进相机。
理由:扫码动作本身需要电脑端配合,用户一定是从电脑屏幕上的二维码进入这个流程的, 引导放在电脑端的二维码页更自然,不必让用户在手机上看一遍已知的操作步骤。
但这意味着引导责任转移到了电脑端,电脑端二维码页必须补齐三件事(不可省略):
| # | 电脑端二维码页必须有的内容 | 作用 |
|---|---|---|
| 1 | 「用 U8Chat App 扫描此二维码登录」+ 明确的操作指向 | 用户知道下一步该拿手机做什么 |
| 2 | 「二维码 5 分钟内有效,过期将自动刷新」 | 避免用户拿着过期码反复扫 |
| 3 | 「请勿将此二维码截图或发送给他人」 | 扫码 = 授权登录,这是 QR 登录最大的诈骗入口,必须由展示二维码的一端提醒 |
注意:这里说的「电脑端」包含网页版与桌面端两种形态 —— 两种的二维码页都要有上面三条。文案里不要写死"网页版"(出二维码的设备可能是任意一种)。
手机端只保留一行安全提示(见 6.8.2 副标题):传递「不要扫别人发来的码」这一条最关键的信息。
待确认 Q10:电脑端二维码页由谁出稿?若与本期不同期上线,需明确手机端在这段时间内的替代提示。
6.8.2 步骤 2:扫码 #E5(已有稿,需改)
必改项
- 副标题
该功能仅支持设备登录二维码改为常驻正向文案 + 安全提示:「对准电脑屏幕上的二维码,请勿扫描他人发来的二维码」 (前半句正向引导,后半句承接防 QR 诈骗提示 —— 这是手机端唯一保留的一句安全提示)。
- 原
该功能仅支持设备登录二维码下沉为识别失败时的错误文案(见 6.10#N05)。 - 不需要「手电筒」,也不加「相册」入口(已决策):设备登录二维码只可能出现在电脑屏幕上 —— 不存在暗光补光,也不存在扫纸质码 / 相册图片的场景。原稿底部的手电筒去掉。
交互
- 识别成功 → 不直接登录,进入确认页
#N02。 - 识别失败 →
#N05(见 6.10)。 - 相机权限未开启 → 弹窗引导(
#N06,不占整屏),分两种情况: - 第一次授权:进扫码页时系统弹原生授权弹窗 —— 点「允许」进相机;点「不允许」转入情况 2。
- 权限已被关闭:在扫码页之上弹应用内弹窗 —— 沿用 Figma 原稿的文案与形态(系统风、两个文字按钮):标题「请允许访问」、副文案「没有相机权限」、按钮「不是现在」「设置」。「不是现在」= 关闭弹窗留在扫码页;「设置」= 跳系统设置,返回后自动重查权限,已打开就直接进相机。
- 弹窗可「取消」关闭;关闭后停留在扫码页,页面上给一个「打开相机权限」的次级入口。
- 不提供「从相册选择」 —— 设备码只可能在电脑屏幕上。
6.8.3 步骤 3:确认授权 #N02(新增,最关键)
扫码 = 授权一台设备登录你的账号。U8 涉及加密钱包,必须让用户看清「正在给谁授权」。
| 元素 | 内容 |
|---|---|
| 标题 | 登录确认 |
| 设备信息 | 设备名(如 MacBook Pro 16")+ 系统与浏览器(如 macOS · Safari 浏览器) |
| 安全提示(黄底) | 这台设备将可以查看你的聊天与资产。如果不是你自己在电脑上发起的登录,请点「取消」,并立即前往「我的 → 隐私和安全」修改密码。 |
| 主按钮 | 确认登录 |
| 次按钮 | 取消(回设备首页 #E1,二维码作废) |
| 二次验证 | ❌ 本期不加资金密码 / Face ID(已决策 D2)。点「确认登录」即授权 |
口径变更(2026-09-21):确认页不展示位置 / IP 地址 / 请求时间 —— 这三项只在本机「设备详情面板」(
#E7/#E8)里看。本页只回答「要不要把这台设备授权登录」,不承担「这台电脑是不是我的」的判断。
6.8.4 确认中的状态 —— 不单独出页面
点「确认登录」到电脑端真正登入之间有服务端往返,需要过渡态,但不值得单独一屏:
- 按钮进入 loading 并禁用重复点击,页面其余部分保持可见(或加一层浅遮罩)。
- 建议 15 秒超时。
- 超时 / 失败:页面不变,把按钮上的文案换成
「登录确认失败,请在电脑端刷新二维码后重试」,并出现「重试」按钮。
- 用户取消:可中断,回设备首页
#E1。
6.8.5 步骤 5:结果反馈 #N04(新增)
- 成功 → 回到设备列表,Toast「设备已添加」;新设备插入列表顶部(不打标记,见 6.2)。
- 电脑端同步进入已登录状态。
- 同时触发安全通知(6.9)。
6.8.6 二维码规则(后端)
| 规则 | 值 |
|---|---|
| 生成方 | 电脑端(网页版 / 桌面端)登录页 |
| 有效期 | 5 分钟(前端倒计时提示 + 过期自动刷新) |
| 一次性 | 一个二维码只能被成功授权一次 |
| 失效条件 | 超时、已被使用、用户在电脑端手动刷新 |
| 绑定 | 二维码需绑定发起设备的 UA / IP(服务端校验用);手机端确认页不展示位置与 IP |
6.9 安全通知与限制(本期做)
6.9.1 官方账号「U8 Chat」+ 本期 3 条消息 #N17 / #N20
它不是一条"服务通知",而是一个官方账号 —— 名字就叫「U8 Chat」,带官方认证标识(蓝底对勾),像普通用户一样出现在会话列表里;用户可以点进去看资料页,也可以给它发消息。
本期只有这 3 条消息:
| # | 消息 | 触发场景 | 发给谁 |
|---|---|---|---|
| ① | 新用户首次登录 | 新注册用户登录第一台设备(账号下没有其它活跃设备) | 该设备自身 |
| ② | 登录验证码 | 新设备用「手机号 + 验证码」登录时。扫码登录不需要(扫码本身就是验证) | 已登录的活跃设备 |
| ③ | 新设备登录 | 账号产生一次新的登录(新会话) 就发 —— 含扫码、密码登录;同一台设备退出后重新登录也算 | 所有其它在线端(离线端下次打开可见) |
① 新用户首次登录(发给第一台设备自己)
欢迎使用 U8 Chat 👋 你的账号已在本设备登录成功。
这里是 U8 Chat 官方的安全通知通道,账号安全相关的消息都会从这里发出,比如: · 账号从新设备登录 · 有人请求登录验证码
请认准官方认证标识 —— 我们不会通过其它账号联系你,也永远不会向你索要验证码。
措辞用「比如 / 例如」这类开放表述,不要写死「只发这几类消息」 —— 以后加消息时不必改这条老文案。
② 登录验证码(发到已登录设备)
登录验证码 630831
不要将此代码提供给任何人,即使他们声称来自 U8 Chat! 此验证码仅可用于登录你的 U8 Chat 账户,我们从不为此要求其他任何东西。 如果你没有尝试在其他设备上登录而请求此验证码,请忽略此消息。
验证码走哪条通道:
| 账号下的活跃设备 | 通道 |
|---|---|
| 有活跃设备 | 只走已登录设备的这个会话,不走短信 |
| 没有活跃设备(新用户第一台) | 走短信 |
兜底:登录页一直没收到应用内验证码时,提供「改用短信」入口。
本期没有两步验证(2FA):Telegram 的两步验证是在验证码之后再加一步密码,不是跳过验证码。U8 本期不做 2FA(见 2.2),因此验证码是登录的必经步骤。
③ 新设备登录(发给所有其它在线端)
新设备登录 亲爱的用户,我们检测到你的账号从一台新设备登录。
设备:U8Chat Web 12.0.43 A · Chrome 144 · macOS 14.5 位置:中国, 北京 时间:2026 年 9 月 17 日 14:32:07(北京时间)
如果不是你本人操作,请立即前往「我的 > 设备」终止该会话。
「设备」字段怎么组(三段,· 分隔):
| 段 | 内容 | 示例 | 来源 |
|---|---|---|---|
| 1 | 应用与版本 | U8Chat Web 12.0.43 A | 客户端上报,规则见 7.2 |
| 2 | 机型 / 浏览器 | Chrome 144、MacBook Air M1、iPhone 17 Pro | 系统上报,见 6.2 字段表 |
| 3 | 操作系统 | macOS 14.5、iOS 18.2、Android 14 | 客户端上报 |
「位置」字段:城市, 国家(中文 —— 面向用户的通知里不用英文;列表页仍按 7.3 用英文,见该节说明)。
「时间」字段:2026 年 9 月 17 日 14:32:07(北京时间),必须带时区标注。
官方账号的资料页 #N20(点头像进入)
| 项 | 规则 |
|---|---|
| 认证标识 | 名字后缀蓝底对勾;会话列表与资料页一致 |
| 「编辑」按钮 | 没有 —— 它不是你的资料,也不可编辑 |
| 状态位 | 显示「客服」两个字;不显示在线 / 最后上线时间,也不显示设备与位置 |
| 手机号 / 简介等信息卡 | 没有 —— 资料页只有头像、名字、状态与两个操作,不放信息卡("未绑定"这类空值反而会让人以为可以绑定) |
| 加好友 / 拉黑 / 举报 | 没有这些入口 |
| 静音 | 有 —— 可以关掉它的通知(消息仍留在会话里) |
| 发消息 | 可以,入口在资料页与会话输入框 |
通用规则
- 同时给所有在线端发推送;离线端下次打开可见。
- 通知内不展示完整 IP(屏幕被旁人看到时 IP 属于敏感信息)。
- 可静音(资料页提供),但消息本身不可关闭、不可删除 —— 安全类消息必须留在会话里。
- 设备管理页不再重复做「新」标记(决策 D7)—— 登录提醒只由这 3 条消息承担。
用户给这个号发消息走哪条通道
- 用户发出的消息进入系统后台的接收入口(客服后台);
- 后台管理员可选择是否回复 —— 回复时以「U8 Chat」官方账号的身份出现在这个会话里;
- 不回复也可以,用户的消息就留在会话中。
这条通道属于聊天模块,不在本 PRD(设备管理)的实现范围内,此处只约定它与官方账号的关系。
6.9.2 新设备 24 小时安全限制 —— 本期不引入(已决策 D3)
Telegram 的这条规则:新登录的设备在 24 小时内不能终止其它会话(只有「新设备」被冻结,从旧设备操作不受限)。
U8 本期不引入。原因:U8 在有活跃设备时,登录验证码只发到已登录设备(不走短信),攻击者原本就难登进来;而这条规则会挡住「丢手机后用新设备立刻切断旧设备」这一刚需 —— 旧设备上有钱包,等不起 24 小时。
不引入带来的两个后果(开发与测试都需要知道):
- 新设备登录后立即可以注销其它设备上的会话(
#E2与#E4都正常可用)。 - 因此「注销失败」(
#N09) 的原因里不包含任何"新设备不允许"这类业务限制;失败原因只剩网络异常、会话已失效等。
影响:被盗后的防护全部压在 6.9.1 的「新设备登录」通知 与 6.8 扫码确认授权 上,这两项不建议再砍。
6.10 状态与异常
| 状态 | 页面 | 规则 |
|---|---|---|
| 列表加载中 | — | 不做骨架屏:正常等待数据返回(已决策,见第九节) |
| 列表加载失败 | — | 在设备列表页之上弹一个提示框「网络连接已中断」,不带按钮;不展示缓存数据。不存在独立的「检查网络」页 |
| 活跃会话为空 | #E1 | 「此设备」卡片照常显示;「活跃会话」区一行「暂无其它活跃会话 / 你只在这台手机上登录着 U8Chat」;隐藏「注销所有其它设备」行。不单独出屏 |
| 扫码:不是设备登录二维码 / 已失效 | #N05 | 取景框转红 + 震动 + 提示「该二维码不是设备登录二维码,或已失效。请在电脑上的 U8Chat(网页版 / 桌面端)重新获取登录二维码并扫描新二维码。」 |
| 扫码:二维码已被使用 | #N05 | 提示「该二维码已被使用,请重新生成」 |
| 扫码:相机权限未开启 | #N06 | 弹窗引导(不占整屏):第一次授权走系统原生弹窗;权限已被关闭时弹原稿那版应用内弹窗(「请允许访问」/「没有相机权限」/「不是现在」「设置」),从设置返回后自动重查权限。不提供「从相册选择」 |
| 注销成功 | #N08 | Toast + 列表移除 |
| 注销失败 | #N09 | 红色 Toast + 保留原数据 + 可重试 |
七、规范
7.1 时间显示规则(必须全站统一)
| 时间差 | 显示 |
|---|---|
| < 1 分钟 | 刚刚 |
| < 60 分钟 | N 分钟之前 |
| < 24 小时 | N 小时之前 |
| 昨天 | 昨天 HH:mm |
| 2~7 天 | N 天之前 |
| > 7 天且当年 | MM 月 DD 日 HH:mm |
| 跨年 | YYYY 年 MM 月 DD 日 |
设计稿现状:
3 分钟之前与09/11/26、06/10/26混用,且是美式 MM/DD/YY。必须回改。
7.2 设备名与平台标识
| 平台 | 图标 | 应用名称示例 |
|---|---|---|
| iOS | 手机 | U8Chat iOS 12.8.1 |
| Android | 手机 | U8Chat Android 12.7.3 |
| macOS | 笔记本 | U8Chat macOS 12.6 APP_STORE |
| Windows | 笔记本 | U8Chat Windows 12.6 |
| Web | 浏览器 | U8Chat Web 12.0.43 A |
设计稿问题:MacBook Air M1、Chrome 152、Samsung 三台设备的图标全是绿色同款,无法区分平台。必须按平台区分图标。
7.3 位置与 IP
- 位置格式:列表页 / 详情页用
城市,国家(英文,与设计稿一致);面向用户的通知消息里用中文城市, 国家(见 6.9.1)。 - 位置为 IP 估算,每次展示都必须带免责说明。
- IP 地址只在详情面板展示,且不在通知类文案中出现。
7.4 文案规范
- 危险操作按钮用红色,且文案说明"注销/退出",不用"删除"。
- 所有确认弹窗必须点名对象(哪台设备、几台设备)。
- 所有确认弹窗必须说明后果(掉线、需重新登录、加密会话中断)。
- 失败提示必须给下一步动作(重试 / 检查网络 / 改密码)。
- 涉及"在哪台设备操作"的提示,一律写「电脑端」;需要举例时写「电脑端(网页版 / 桌面端)」。不要写死"网页版" —— 出二维码的设备可能是网页版,也可能是桌面端。
- 官方账号的欢迎文案不要写死「只发这几类消息」 —— 本期只发 3 条是内部范围,不是对用户的承诺;用「账号安全相关的消息都会从这里发出,比如……」这类开放表述。
7.5 设备信息字段总表(一处看全)
字段构成与来源
| 字段 | 含义 / 成分 | 来源 | 格式 | 示例 |
|---|---|---|---|---|
| 设备名 | 机型或浏览器名 | 系统上报 | 原样展示 | iPhone 17 Pro、MacBook Air M1、Chrome 152(网页端用浏览器名) |
| 应用与版本 | U8Chat 这个 App 的平台 + 版本(带渠道时拼渠道) | 客户端上报 | U8Chat <平台> <版本> | U8Chat iOS 12.8.1、U8Chat macOS 12.6 APP_STORE |
| 操作系统 | 设备本身的系统版本 | 客户端上报 | <OS> <版本> | macOS 14.5、iOS 18.2、Android 14 |
| 位置 | IP 估算的城市 / 国家 | 服务端(IP 库) | 列表与详情:城市,国家(英文);通知消息:城市, 国家(中文) | Taipei,Taiwan / 中国, 北京 |
| IP 地址 | 完整 IP | 服务端 | 点分十进制 | 203.0.113.24 |
| 登录时间 | 本次会话的登录时刻 | 服务端 | YYYY/MM/DD HH:mm | 2026/09/11 09:12 |
| 最后活跃时间 | 最近一次活动时刻 | 服务端 | 见 7.1 | 3 分钟之前 |
| 在线状态 | 只有「此设备」有 | 服务端 | 固定显示「在线」(蓝色) | 在线 |
⚠️ 别把两个"平台"弄混:「应用与版本」里的平台是 U8Chat 这个 App 的(
U8Chat macOS 12.6);「操作系统」是设备本身的(macOS 14.5)。两者不同,同时出现时不能只写一个。
三个展示位分别显示什么
| 展示位 | 显示哪些字段 | 版式 |
|---|---|---|
列表行(#E1 每台一行) | 设备名 · 应用与版本 · 位置 + 最后活跃时间 | 三行紧凑:设备名 / 应用与版本 / 位置 · 时间 |
详情面板(#E7 / #E8 / #N16) | 设备名(大号)· 在线状态或最后活跃 · 应用与版本 · 位置 · IP 地址 · 登录时间(活跃会话再加最后活跃时间) | 顶部图标 + 设备名,下面是信息卡逐行 |
通知消息(#N17) | 应用与版本 · 机型或浏览器 · 操作系统 合成一行,再加位置、时间 | 见 6.9.1 |
各字段的展示约束
- IP 地址:只在详情面板出现,列表行与通知消息里都不出现(旁人看到屏幕时 IP 属于敏感信息)。
- 位置:每次展示都必须带免责说明「该位置根据 IP 地址估算,可能并不准确」。
- 设备图标:按平台区分(手机 / 笔记本 / 浏览器),不能所有设备用同一个图标。
八、跨端行为约定
| 场景 | 各端表现 |
|---|---|
| A 端注销 B 端的会话 | B 端立即断开(WebSocket 推送),清掉本地会话数据,弹窗「你的账号已在其它设备注销,当前设备已退出登录」,点确定回登录页 |
| B 端离线时被注销 | 下次打开 / 下次请求时兜底:直接回登录页并给同一提示 |
| 扫码授权登录成功 | 电脑端立即进入已登录状态;手机端列表新增该设备;所有端收到安全通知 |
| 扫码被取消 | 电脑端二维码作废,提示「登录请求已取消,请刷新二维码」 |
| 密码被修改 | 所有会话作废,全部端回登录页(与第八章同一套提示文案体系) |
待确认 Q8:B 端被注销时,是"实时踢出"还是"下次请求时才发现"?前者体验好但需要长连接可靠;后者实现简单但有延迟。建议:实时踢 + 兜底。
九、埋点需求
| 事件 | 触发时机 | 关键参数 |
|---|---|---|
devices_page_view | 进入设备列表 | 来源(我的页 / 通知) |
devices_list_load | 列表请求返回 | 结果(成功/失败)、设备数、耗时 |
device_item_click | 点击某台设备 | 设备平台、是否此设备 |
device_session_terminate | 注销单会话 | 入口(详情页按钮 / 列表左滑)、结果、失败原因 |
device_terminate_all | 注销所有其它设备 | 会话数、结果、失败原因 |
device_auto_terminate_set | 设置自动终止时长 | 原值、新值 |
device_link_start | 进入扫码页 | — |
device_scan_result | 扫码识别 | 结果(成功/非设备码/失效/已使用)、耗时 |
device_link_confirm | 确认授权 | 结果(确认/取消)、耗时 |
device_link_success | 电脑端登录成功 | 总耗时(从扫码页算起) |
device_security_notice_click | 点击安全通知的「前往设备管理」 | — |
十、验收标准
功能
- 列表能正确区分「此设备」与「活跃会话」,此设备不可被自己注销。
- 单台注销后:该设备从列表消失,Toast 正确显示设备名,被注销端立即退出登录。
- 列表左滑某台活跃会话 → 点「注销」→ 确认弹窗点名该设备 → 完成后该行移除 + Toast。
- 「注销所有其它设备」在活跃会话为空时自动隐藏。
- 自动终止旧会话:5 个选项可选,当前值高亮,选择后回填 + Toast。
- 扫码登录完整闭环:相机 → 扫到码 → 确认页展示正确的设备名与系统 / 浏览器(不展示位置 / IP 地址 / 请求时间)→ 确认 → 电脑端登录成功 → 手机端列表新增 + Toast。
(点「添加设备」应直接进相机,不再有中间引导页。)
- 取消授权后二维码作废,电脑端提示重新生成。
- 扫码失败 4 种原因分别有对应文案;相机权限被拒时有引导。
- 列表加载失败时在列表页之上弹出「网络连接已中断」提示(不带按钮)且不展示缓存数据;加载中不做骨架屏。
- 新设备登录后所有在线端收到安全通知;账号下有活跃设备时,登录验证码通过官方账号「U8 Chat」会话送达(不走短信),没有活跃设备时才走短信。
- 「注销所有其它设备」确认后:其它设备在列表里一次全部消失,切空态;Toast 报数量(如「已注销其它 3 台设备」);红色行同步隐藏。不得只掉一台,也不得报单台设备名的文案(单台与全删是两条不同路径,反馈文案不同)。
- 主页点「编辑」进编辑态:其它设备每行出现红色减号,点减号进确认弹窗、确认后该台移除;没有全选 / 没有批量提交;「完成」退出编辑态。「活跃会话」为空时「编辑」入口隐藏。
- 从「设备列表」到「注销完成」≤ 3 步。
- 所有确认弹窗都点名了对象并说明了后果。
- 时间格式全站符合 7.1。
- 三端(iOS / Android / Web)的同类页面样式一致。
性能
- 设备列表首屏(骨架 → 数据)≤ 1.5 秒(正常网络)。
- 扫码识别到确认页出现 ≤ 1 秒。
十一、决策与待确认
11.1 已决策(产品已拍板,开发可直接依此执行)
| # | 问题 | 决策 | 落地说明 |
|---|---|---|---|
| D1 | 扫码登录是否加手机端「确认授权」? | ✅ 要加 | 本期必做的新页面:确认页 #N02;配套状态:结果 #N04、失败态 #N05(确认中的状态并入 #N02) |
| D2 | 确认授权前是否再验资金密码 / Face ID? | ❌ 本期不加 | 点「确认登录」即授权。安全兜底 = 新设备登录通知(6.9.1)+ 用户可随时在设备管理里注销该设备 |
| D3 | 是否引入「新设备 24 小时内不能注销其它会话」? | ❌ 不引入 | 新设备登录后即可立即注销其它会话;「注销失败」不含此类业务原因(详见 6.9.2) |
| D4 | 底部说明是否包含 Linux? | ❌ 不含 Linux | 统一文案:「U8Chat 官方应用可用于 iPhone、iPad、Android、macOS、Windows。」 |
| D5 | 编辑态是取消还是保留? | ✅ 保留,但只支持一台一台删 | 主页「编辑」→ 其它设备每行出现红色减号(待删除态)→ 点减号进确认弹窗 #E9 → 删这一台;不做全选 / 批量提交。原稿 633:23990 需回改(去掉批量元素)。「活跃会话」为空时「编辑」入口隐藏(见 6.5) |
| D6 | 手机端是否要「添加设备-引导说明页」? | ❌ 不要 | 点「添加设备」直接进相机;扫码前的引导由电脑端二维码页承担(见 6.8.1 的三条必补内容) |
| D7 | 新登录的设备要不要在列表里打「新」标记? | ❌ 不引入 | 该标记是补线框时自加的:Figma 原稿没有、Telegram 也不这么做(它靠登录通知)。且新登录设备最后活跃时间是「刚刚」,本来就在最上面,标记信息量低。提醒统一由 6.9.1 新设备登录通知承担(见 6.2 排序规则) |
| D8 | 设备列表的「空态 / 加载中 / 加载失败」要不要各自出屏? | ❌ 三屏都不出 | ①空态:本机永远在,列表不会全空 —— 「此设备」卡片照常显示,只在「活跃会话」区显示一行提示、红线隐藏;②加载中:不做骨架屏;③加载失败:在列表页之上弹提示框「网络连接已中断」,不带按钮、也不存在独立的「检查网络」页。规则写进 6.2 与 6.10 |
| D10 | 相机权限未开启怎么处理? | ✅ 弹窗引导,且区分两种情况 | ①第一次授权:进扫码页时系统弹原生授权弹窗;②权限已被关闭:在扫码页之上弹应用内弹窗(沿用 Figma 原稿文案:「请允许访问」/「没有相机权限」/「不是现在」「设置」),从设置返回后自动重查权限。#N06 由整屏改为弹窗;不提供「从相册选择」 |
11.2 待确认(不阻塞本期开发)
| # | 问题 | 建议 | 影响范围 |
|---|---|---|---|
| Q1 | 「我的」页「设备」入口是否做异常红点? | 建议做,但可延后 | 入口 |
| Q2 | 扫码后、电脑端确认前,新设备是否先以「等待确认」状态插入列表? | 建议不做,成功后再插入 | 列表 |
| Q3 | 会话详情是否加「允许接收通知 / 允许发起资产操作」两个开关? | 不做 —— U8 特有设想,与 Telegram 的同类开关场景对不上 | 详情 |
| Q5 | 「自动终止旧会话」是否提供「从不」? | 不建议提供 | 设置 |
| Q8 | 被注销设备是实时踢出还是下次请求才发现? | 实时踢 + 兜底 | 跨端 |
| Q10 | 电脑端二维码页(含引导文案)由谁出稿、是否与本期同期? | 若不同期,需定手机端在这段时间的替代提示 | 扫码链路 |
十二、附录
12.1 页面清单与线框图索引(共 20 屏)
| 性质 | 屏 | 线框图锚点 | Figma |
|---|---|---|---|
| 已有设计稿 | 我的-设备(主页) | index.html#E1 | 633:23747 |
| 已有设计稿 | 注销会话提示弹窗 | #E2 | 633:23862 |
| 已有设计稿 | 左滑注销单台会话(原「编辑-确定注销」,编辑态外壳去掉) | #E4 | 633:24117 |
| 已有设计稿 | 添加设备扫码 | #E5 | 633:24240 |
| 已有设计稿 | 自动终止旧会话 | #E6 | 633:24260 |
| 已有设计稿 | 查看此设备信息 | #E7 | 633:24386 |
| 已有设计稿 | 查看活跃会话设备信息 | #E8 | 633:24528 |
| 已有设计稿 | 活跃会话注销确认 | #E9 | 633:24672 |
| 已有设计稿 | 我的-设备-编辑(逐个删,见 6.5) | #E3 | 633:23990 |
| 新增页面 | 扫码成功-确认授权 | #N02 | — |
| 同一页的状态 | 添加设备-成功反馈(#N02 之后) | #N04 | — |
| 同一页的状态 | 扫码-识别失败(#E5 的异常态) | #N05 | — |
| 同一页的状态 | 扫码-相机权限未开启(#E5 的权限弹窗) | #N06 | — |
| 同一页的状态 | 注销会话-成功反馈(#E1 的结果态) | #N08 | — |
| 同一页的状态 | 注销会话-失败(#E1 / #E9 的失败态) | #N09 | — |
| 同一页的状态 | 注销所有其它设备-成功反馈(#E1 / #E2 的结果态,一次清空) | #N19 | — |
| 设计稿回改 | 会话详情-字段补全(回改 #E8) | #N16 | — |
| 其它模块 | 被注销设备端-退出登录(登录模块) | #N15 | — |
| 其它模块 | 官方账号 U8 Chat(登录系统消息,聊天模块) | #N17 | — |
| 其它模块 | 官方账号 U8 Chat-资料页(聊天模块) | #N20 | — |
已取消的屏(不在线框清单里):N03 确认中、N11 编辑态未选中、N12 自动终止设置成功、N10 编辑态批量操作栏、N07 活跃会话-空态、N13 加载中、N14 加载失败。它们的要求已并入对应主屏与 6.2 / 6.10 的规则。
12.2 主流程演示顺序
设备列表 #E1 → 扫码 #E5 → 确认授权 #N02 → 添加成功 #N04 → 会话详情 #E8 → 注销确认 #E9 → 注销成功 #N08 → 自动终止设置 #E6 → 回到 设备列表 #E1
另一条路径(除本机外全删):设备列表 #E1 → 点「注销所有其它设备上的会话」红色行 → 确认弹窗 #E2 → 全删成功反馈 #N19(一次清空 + Toast 报数量)。
在
index.html中点「▶ 走一遍主流程」可自动播放第一条顺序;第二条路径可在主页点那条红色行手动走一遍。
12.3 与设计稿的差异汇总(需回改设计稿)
- 删除 Sheet 里的残留文案「预览兑换」(
#E7#E8对应稿)。 - 修正
#E8对应稿的占位数据(应用名、位置、时间)。 - 统一底部说明文案为「U8Chat 官方应用可用于 iPhone、iPad、Android、macOS、Windows。」(不含 Linux)。
- 扫码页副标题改为「对准电脑屏幕上的二维码,请勿扫描他人发来的二维码」(正向引导 + 安全提示);原「该功能仅支持设备登录二维码」下沉为识别失败时的错误文案。
- 扫码页去掉手电筒,且不加「相册」入口 —— 设备登录码只可能出现在电脑屏幕上,补光/相册场景不存在。
- 统一时间格式(见 7.1)。
- 编辑态改为「逐个删」:
633:23990保留,但去掉批量元素(不要「已选 N 项」、不要全选、不要底部操作条);633:24117保留左滑、去掉编辑态外壳;主页633:23747右上角「编辑」入口保留(活跃会话为空时隐藏)。 - 确认弹窗点名设备 + 补后果说明。
- 自动终止弹层高亮当前值。
- 设备图标按平台区分。
- 删除重复稿(
iOS 2.0画板与「设备管理」画布两份完全相同的 9 屏)。 - 「自动终止旧会话」选项补「1 年」(Telegram 有),并给当前选中值打勾。
- 电脑端二维码页补三条引导(操作指向 / 5 分钟有效期 / 请勿转发),见 6.8.1 —— 手机端已不做引导说明页(决策 D6)。