手表心率采集、时钟同步、云同步的端到端真机验证步骤。所有手表采集代码为首次真机测试,需重点关注。
前置条件
| 项目 | 要求 |
|---|
| Android 手机 | 已安装 BlinkLife 最新 debug 版 |
| WearOS 手表 | 已安装 blinklife-wear 并配对(或 watchOS + Apple Watch) |
| 用户登录 | 已通过微信登录(用于同步验证) |
| 后端部署 | api.blink-life.cn 已部署含 archive API 的最新版本 |
| 调试工具 | flutter logs 或 Android Studio Logcat,过滤 [Review] 标签 |
测试 1: 手表心率采集
- 确认手表已连接(首页或录制页显示手表状态)
- 进入录制页,选择任意运动类型
- 开始录制,同时观察手表 UI 是否显示心率数值
- 录制过程中打 5-10 个事件
- 录制 至少 3 分钟(确保有足够心率样本)
- 正常停止录制
验证点
| # | 检查项 | 如何验证 | 合格标准 |
|---|
| 1.1 | 手表 UI 显示当前心率 | 手表屏幕观察 | 数值在 40-200 范围,实时更新 |
| 1.2 | 心率数据传回手机 | Logcat 搜索 sensor_batch | 每 30 秒看到一批传输日志 |
| 1.3 | 录制结束统计日志 | Logcat 搜索 [Review] 录制结束统计 | 心率采样数大于 0,覆盖率大于 50% |
| 1.4 | 复盘页心率趋势 | 进入复盘页 → 查看心率曲线 | 曲线存在且趋势合理 |
异常场景
| 场景 | 操作 | 预期 |
|---|
| 手表未授权 HealthKit/传感器 | 拒绝权限弹窗 | 心率质量=unavailable,复盘页隐藏心率模块 |
| 录制中手表断连 | 关闭手表蓝牙 30 秒后恢复 | 心率有缺失区间,QualityState 降级 |
测试 2: 时钟同步
- 开始录制(触发
requestTimeSync)
- 查看 Logcat 中
[WatchService] 时钟同步完成 日志
验证点
| # | 检查项 | 合格标准 |
|---|
| 2.1 | 偏移值存在 | 日志中 偏移: Xms 有值 |
| 2.2 | 偏移范围合理 | 绝对值小于 5000ms(5 秒) |
| 2.3 | 录制结束统计中有偏移 | 时钟偏移=Xms(非"未同步") |
测试 3: 云同步
- 确认用户已登录
- 完成一次录制(含心率数据)
- 等待 5 秒(自动触发
syncRecording)
- 查看 Logcat 搜索
[RecordingSyncService] 同步成功
验证点
| # | 检查项 | 如何验证 | 合格标准 |
|---|
| 3.1 | payload 包含传感器聚合 | Logcat 搜索 payload 内容 | avgHeartRate/maxHeartRate 有值 |
| 3.2 | 后端存储成功 | curl -H "Authorization: Bearer TOKEN" https://api.blink-life.cn/api/v1/recordings | 返回记录含 avgHeartRate |
| 3.3 | 删除后归档 | 在回放页删除记录 → 检查云端 | GET /recordings 不返回该记录 |
测试 4: 端到端链路
- 连接手表 → 开始录制 → 打 5+ 个事件 → 3 分钟 → 停止录制
- 进入回放页 → 更多菜单 → 查看复盘
- 复盘页:确认总览卡/事件分布/心率趋势/AI 摘要 均正确
- 点击 AI 摘要中的"查看片段" → 确认回放页跳转到正确位置
- 返回复盘页 → 推荐片段点击"去剪辑" → 确认回放页预选事件
- 删除记录 → 确认云端已归档
合格标准
- 复盘页 5 个模块全部渲染,无崩溃
- 跳转回放页偏移在 ±3 秒以内
- AI 摘要包含数据来源标注
- 剪辑预选进入多选模式
已知限制
| 限制 | 说明 |
|---|
| 速度/距离数据 | 手表端未实现 GPS/计步器采集,复盘页总览卡不显示速度/距离 |
| 心率图负荷色带 | 负荷区段数据已生成但 UI 未叠加 |
| 集合浏览 | 需从推荐片段列表进入(当前仅单锚点跳转,集合模式需手动构造) |
故障排查
| 症状 | 可能原因 | 排查步骤 |
|---|
| 心率采样数=0 | 手表权限未授权 | 检查手表设置→应用权限→身体传感器 |
| 时钟偏移="未同步" | requestTimeSync 未收到响应 | 检查手表是否可达(isWatchConnected) |
| 同步失败 | 后端未部署最新版 | 检查 PUT /recordings/:id/archive 是否 404 |
| 复盘页空白 | jsonPath 为空 | 检查录制保存日志 |