FTMS 专题学习

非24DCM 车控完整接口调用时序

19 核心接口

接口时序训练器

从 App 启动到控车结果刷新,把每个接口放回正确时机。

这页关联 Obsidian 笔记《非24DCM车控完整接口调用时序》,把原来的时序图、接口表、 车型分叉、缓存和降级策略拆成可点击的学习路径。目标是让你能按业务场景说清楚: 现在该查哪个接口、它解决什么问题、失败后页面为什么这么表现。

先建立全局图

非24DCM 车控不是“一次点击一个接口”,而是一条状态流水线。

先形成当前 VIN,再加载配置和门禁,最后才进入点击执行。每个接口都只回答它那一层的问题。

5 段 启动、进入 Tab、密码安全、指令执行、成功后刷新。
19 个 主链路核心接口,另有 BTET/空调预约等扩展接口。
2 条 普通 GBook 同步返回;BTET 返回 uuid 后轮询。
2 个窗口 15 分钟控车密码免验,30 秒重复操作冷却。
01 车辆列表

拿到 VIN、绑定状态、车型路线、openStatus、remoteFlg、分享字段。

02 配置加载

按 VIN 拉后端能力、个性化、DCM/DK 契约、实名状态。

03 服务开通

刷新 openStatus 和 remoteFlg,决定能否构建菜单面板。

04 安全校验

30 秒防重、15 分钟免密、密码设置/锁定/验证。

05 指令下发

普通车型走 remoteControl;BTET 走 otherControl + 结果轮询。

06 状态刷新

成功后刷新疏忽项、行驶数据;地图寻车和空调状态另有查询。

交互学习

时序播放器:按阶段看“为什么现在调这个接口”。

点击阶段或接口卡片,右侧会切换解释。手机端会自动变成上下结构。

接口速查

按阶段筛选接口,而不是死背一张长表。

输入接口名、字段或用途即可搜索。排查时先定位阶段,再看路径和关键字段。

车型与场景分叉

同样点“锁车”,普通车型和 BTET 不是同一条接口链。

选一个业务场景,看它为什么进入不同接口、需要哪些前置条件、成功后还要查什么。

缓存与降级

接口失败时,页面不一定直接失败;有些会回退,有些会置灰。

这部分很适合工单排查:先判断接口失败会不会被缓存或 fallback 掩盖。

缓存口径

哪些状态会被记住

  • carList 写入当前默认车上下文,切车或退出登录时更新。
  • getCarFunctionConfigvin + remoteItems 缓存在内存。
  • DCM/DK 契约按 vin_dcmAvailablevin_dkAvailable 持久化。
  • 密码验证时间 15 分钟有效;每个动作有 30 秒防重时间戳。

降级口径

哪些失败不是同一种表现

  • 能力配置失败会使用本地 remote_control_local.json 兜底。
  • 契约接口失败/解密失败默认不拦截,按 DCM 未过期处理。
  • 实名接口失败默认未认证,页面会置灰或提示实名。
  • 服务开通刷新失败会沿用车辆列表里的 openStatus
异常场景页面/逻辑表现排查提示
getCarFunctionConfig 失败使用本地能力表 fallback不要只看接口失败,要确认最终使用了哪份配置。
契约接口失败或解密失败默认 DCM 未过期、DK 可用如果页面未置灰,可能是降级策略生效。
实名接口失败默认未认证按钮置灰可能来自实名查询失败,而不是真实未实名。
BTET 轮询 6 次无结果提示操作超时,以实车状态为准要查 uuid 对应结果链路,不要只看下发接口。
checkGbookPwd 返回 212密码锁定 10 分钟这属于安全链路拦截,不是车控接口失败。

记忆口径

把接口时序压缩成 6 句排查语言。

真正排查时,先讲清楚“我现在在哪一段”。

1 没有 VIN,不谈车控。

先查车辆列表和默认车,确认 bindStatus、selected、is24Dcm、modelType、remoteFlg。

2 菜单前先过三道门。

DCM 契约、实名、openStatus 决定能不能正常展示和点击。

3 能力来自多源合并。

本地 sfx、后端能力、车辆属性和共享权限一起决定最终按钮。

4 点击后先走安全链路。

30 秒防重、15 分钟免密、密码锁定和 19DCM 确认都在指令前。

5 普通 GBook 和 BTET 分开查。

普通车型同步返回;BTET 先拿 uuid,再轮询结果。

6 成功后还要刷新状态。

控车成功只是“发送成功”,还要刷新疏忽项、行驶数据或实时状态。

一句话: 非24DCM 车控的排查顺序是:车辆上下文 → 配置和门禁 → 菜单构建 → 安全校验 → 指令协议 → 结果刷新。