# F2B 协作清单 本文档由前端维护,用于记录: - 前端当前联调状态 - 需要后端确认或配合的事项 - 已明确的接口契约与运行时语义 约定: - `f2b.md` 由前端维护 - `b2f.md` 由后端维护 - 双方只维护自己的文件 - 边界不清的事项,先写入文档,再由你确认 --- ## 1. 当前前端联调状态 当前小程序侧已经接通: - 微信小程序登录 - 首页聚合 - 活动页 `play` - `launch -> 地图页` - `session start` - `session finish` - `session result` - 故障恢复提示与恢复继续 - 故障恢复放弃 当前已确认不再是 backend 阻塞项: - `evt_demo_001` 的 release manifest 现在可正常加载 - 地图页已经能正常拉起 - 模拟定位 / 模拟日志的通道与连接问题,当前主要在小程序与模拟器侧处理 --- ## 2. 前端已按当前契约实现 ### 2.1 launch 契约 前端当前按以下字段消费: - `launch.resolvedRelease.releaseId` - `launch.resolvedRelease.manifestUrl` - `launch.resolvedRelease.manifestChecksumSha256` - `launch.config.configUrl` - `launch.config.configLabel` - `launch.config.releaseId` - `launch.config.routeCode` - `launch.business.sessionId` - `launch.business.sessionToken` - `launch.business.sessionTokenExpiresAt` 当前前端约束: - 正式联调只认后端 `launch` 下发的 release / manifest - 不再回退到本地 `event/*.json` 样例路径 - 如果 `manifestUrl` 无效,会直接在地图页报错 ### 2.2 session 生命周期 前端当前已接: - 进入运行态后自动上报 `session start` - 正常结束时上报 `finish(finished)` - 超时结束时上报 `finish(failed)` - 主动退出时上报 `finish(cancelled)` ### 2.3 故障恢复 前端当前已接: - 检测到未正常结束对局时,弹出“继续恢复 / 放弃” - 点击“继续恢复”时恢复本地运行时快照 - 点击“放弃”时: - 清理本地恢复快照 - 并使用**恢复快照中的旧 sessionId/sessionToken** 向后端补报 `finish(cancelled)` 当前实现口径: - 放弃恢复不会阻塞用户 - 即使 backend 上报失败,前端也会继续放弃本地恢复 - 失败时前端会明确提示“后端取消上报失败” --- ## 3. 需要 backend 当前确认 / 配合 ## 3.1 固定 session 三态语义 请 backend 明确并固定: - `finished` - `failed` - `cancelled` 前端当前使用口径: - 正常打终点完成 -> `finished` - 超时结束 -> `failed` - 主动退出 / 放弃恢复 -> `cancelled` 如果 backend 计划使用其他语义,请先在 `b2f.md` 明确,不要直接改单接口行为。 ## 3.2 确认“放弃恢复 -> cancelled”是官方语义 前端现在已经启用: - 点击“放弃恢复”时,调用 `POST /sessions/{id}/finish` - 参数:`status=cancelled` 请 backend 确认: 1. 这是否就是官方的“放弃恢复 / 放弃本局”语义 2. 旧 `sessionToken` 是否允许在恢复放弃场景继续调用 `finish(cancelled)` 3. `cancelled` 后是否保证不再作为 `ongoingSession` 出现在: - `/me/entry-home` - `/events/{eventPublicID}/play` ## 3.3 保证 start / finish 幂等 请 backend 明确: - `start` 重复调用是否安全 - `finish` 重复调用是否安全 前端建议口径: - `start`:如果 session 已在运行态,返回成功和当前 session - `finish`:如果 session 已进入终态,返回成功和当前 session/result 原因: - 联调重试 - 页面重进 - 故障恢复补报 - 用户重复点击 这些都很容易触发重复请求。 ## 3.4 回归确认 ongoing session 口径一致 请 backend 回归确认以下接口对 ongoing session 的口径一致: - `/me/entry-home` - `/events/{eventPublicID}/play` - `/sessions/{sessionPublicID}/result` 重点确认: 1. `cancelled` 后不再继续出现在 ongoing 入口 2. `failed` 后不再继续出现在 ongoing 入口 3. `finished` 后结果摘要和首页摘要保持一致 ## 3.5 保持 launch 返回契约稳定 当前前端已经按既定结构接好 `launch`。 请 backend: - 保持字段名稳定 - 如需调整字段名或层级,先在 `b2f.md` 里给出变更说明 - 尤其不要在未通知前端的情况下,改变: - `resolvedRelease.manifestUrl` - `business.sessionId` - `business.sessionToken` --- ## 4. P1 后续建议 ## 4.1 用户身体数据接口 前端已经有 telemetry profile 合并能力。 backend 后续建议提供: - 当前用户 body profile 查询接口 建议至少包含: - `birthDate` 或 `heartRateAge` - `weightKg` - `restingHeartRateBpm` - `maxHeartRateBpm`(可选) ## 4.2 result 摘要字段容错 前端当前 finish 可能上报: - `finalDurationSec` - `finalScore` - `completedControls` - `totalControls` - `distanceMeters` - `averageSpeedKmh` - `maxHeartRateBpm` 请 backend: - 对可选字段做空值容忍 - 不要因某个非关键字段缺失导致整局 finish 失败 ## 4.3 workbench 增加恢复相关调试项 建议 backend workbench 后续增加: - 将 session 标记为 `cancelled` - 查询当前用户 ongoing session - 查看最近一局状态流转 这样更利于故障恢复联调。 --- ## 5. 当前前端需要 backend 反馈的最小集合 backend 现在只要先在 `b2f.md` 回 3 件事,前后端主链就能更稳: 1. `finished / failed / cancelled` 三态最终语义 2. 放弃恢复时 `finish(cancelled)` 是否是正式方案 3. `start / finish` 是否按幂等处理 --- ## 6. 一句话结论 当前前端最需要 backend 配合的,不是更多新接口,而是: > 先把 session 生命周期语义、放弃恢复语义和 ongoing session 口径完全定稳。