接口时序训练器
从 App 启动到控车结果刷新,把每个接口放回正确时机。
这页关联 Obsidian 笔记《非24DCM车控完整接口调用时序》,把原来的时序图、接口表、 车型分叉、缓存和降级策略拆成可点击的学习路径。目标是让你能按业务场景说清楚: 现在该查哪个接口、它解决什么问题、失败后页面为什么这么表现。
先建立全局图
非24DCM 车控不是“一次点击一个接口”,而是一条状态流水线。
先形成当前 VIN,再加载配置和门禁,最后才进入点击执行。每个接口都只回答它那一层的问题。
拿到 VIN、绑定状态、车型路线、openStatus、remoteFlg、分享字段。
按 VIN 拉后端能力、个性化、DCM/DK 契约、实名状态。
刷新 openStatus 和 remoteFlg,决定能否构建菜单面板。
30 秒防重、15 分钟免密、密码设置/锁定/验证。
普通车型走 remoteControl;BTET 走 otherControl + 结果轮询。
成功后刷新疏忽项、行驶数据;地图寻车和空调状态另有查询。
交互学习
时序播放器:按阶段看“为什么现在调这个接口”。
点击阶段或接口卡片,右侧会切换解释。手机端会自动变成上下结构。
接口速查
按阶段筛选接口,而不是死背一张长表。
输入接口名、字段或用途即可搜索。排查时先定位阶段,再看路径和关键字段。
车型与场景分叉
同样点“锁车”,普通车型和 BTET 不是同一条接口链。
选一个业务场景,看它为什么进入不同接口、需要哪些前置条件、成功后还要查什么。
缓存与降级
接口失败时,页面不一定直接失败;有些会回退,有些会置灰。
这部分很适合工单排查:先判断接口失败会不会被缓存或 fallback 掩盖。
缓存口径
哪些状态会被记住
carList写入当前默认车上下文,切车或退出登录时更新。getCarFunctionConfig按vin + remoteItems缓存在内存。- DCM/DK 契约按
vin_dcmAvailable、vin_dkAvailable持久化。 - 密码验证时间 15 分钟有效;每个动作有 30 秒防重时间戳。
降级口径
哪些失败不是同一种表现
- 能力配置失败会使用本地
remote_control_local.json兜底。 - 契约接口失败/解密失败默认不拦截,按 DCM 未过期处理。
- 实名接口失败默认未认证,页面会置灰或提示实名。
- 服务开通刷新失败会沿用车辆列表里的
openStatus。
| 异常场景 | 页面/逻辑表现 | 排查提示 |
|---|---|---|
getCarFunctionConfig 失败 | 使用本地能力表 fallback | 不要只看接口失败,要确认最终使用了哪份配置。 |
| 契约接口失败或解密失败 | 默认 DCM 未过期、DK 可用 | 如果页面未置灰,可能是降级策略生效。 |
| 实名接口失败 | 默认未认证 | 按钮置灰可能来自实名查询失败,而不是真实未实名。 |
| BTET 轮询 6 次无结果 | 提示操作超时,以实车状态为准 | 要查 uuid 对应结果链路,不要只看下发接口。 |
checkGbookPwd 返回 212 | 密码锁定 10 分钟 | 这属于安全链路拦截,不是车控接口失败。 |
记忆口径
把接口时序压缩成 6 句排查语言。
真正排查时,先讲清楚“我现在在哪一段”。
先查车辆列表和默认车,确认 bindStatus、selected、is24Dcm、modelType、remoteFlg。
DCM 契约、实名、openStatus 决定能不能正常展示和点击。
本地 sfx、后端能力、车辆属性和共享权限一起决定最终按钮。
30 秒防重、15 分钟免密、密码锁定和 19DCM 确认都在指令前。
普通车型同步返回;BTET 先拿 uuid,再轮询结果。
控车成功只是“发送成功”,还要刷新疏忽项、行驶数据或实时状态。