18、远程控制与反向控制:手机控制车机、车机控制手机、权限安全模型、防误触设计
远程控制和反向控制,说白了就是「谁管谁」的问题。
手机能管车机,车机也能管手机。听起来挺酷,但做起来坑不少。
我最早做这个功能时,以为就是发几条指令的事。结果呢?权限乱飞、误触频发、用户投诉不断。嗯,后来我花了整整两个版本才把这块理顺。
今天咱们就把这块掰开揉碎,好好聊聊。
18.1 手机控制车机:远程操控的核心场景
手机控制车机,最常见的场景就是「人还没上车,先把车准备好」。
比如夏天提前开空调,冬天提前热车。或者远程解锁让快递员放东西。这些功能现在很多车都有,但实现方式差别很大。
核心思路:手机作为控制端,车机作为被控端。控制指令通过云端中转,或者通过蓝牙/WiFi直连。
我个人习惯把控制指令分成两类:
- 即时指令:比如解锁、关窗、鸣笛。要求低延迟、高可靠。
- 定时指令:比如预约充电、预约空调。允许一定延迟,但要保证执行。
我在项目中遇到过一个问题:用户手机没信号,但车机有网络。这时候指令怎么传?
我的方案是:手机先把指令缓存到云端,车机轮询拉取。虽然延迟高一点,但至少不会丢指令。
18.2 车机控制手机:反向控制的特殊场景
反向控制,就是车机反过来操作手机。这个场景相对少,但很实用。
举个例子:你开车时来了个微信语音,用手点手机不安全。车机屏幕上直接显示来电,你点一下「接听」,车机就通过蓝牙或CarPlay通道告诉手机「接电话」。
再比如:车机上的导航需要手机上的某个App数据。车机可以直接拉起手机App,甚至把手机屏幕投射到车机上操作。
我的经验:反向控制一定要做「单向通道」。车机只能发指令,不能读手机数据。否则隐私问题就大了。
我记得有一次,产品经理说「车机能不能读取手机相册?」我直接拒绝了。你想想看,车借给别人开,别人车机里能看到你手机照片,这谁受得了?
18.3 权限安全模型:谁可以控制什么
权限模型是远程控制的基石。没有好的权限设计,功能做得再好也是白搭。
我一般把权限分成三个层级:
| 权限层级 | 控制范围 | 示例 | 安全要求 |
|---|---|---|---|
| L1 基础控制 | 车辆状态查询 | 查看电量、胎压、位置 | 简单身份验证 |
| L2 远程控制 | 车辆功能操作 | 解锁、开窗、开空调 | 二次验证+操作确认 |
| L3 安全控制 | 涉及安全的功能 | 启动引擎、解除防盗 | 生物识别+时间窗口 |
说白了,查个电量不需要太严格,但远程启动发动机,必须慎之又慎。
我曾经踩过一个坑:用户手机丢了,别人拿着手机直接远程解锁了车辆。后来我加了个「信任设备」机制——新设备第一次控制必须用原设备扫码确认。
注意:权限模型一定要考虑「临时授权」。比如你让代驾开车,你不能把全部权限都给他。只给驾驶相关的权限,其他功能锁死。
18.4 防误触设计:别让用户「手滑」出事
防误触,这个太重要了。
你想想看,用户掏手机时不小心点了一下「远程解锁」,车就在楼下开了。万一有人拉车门呢?
我总结了几条防误触原则:
- 两步确认:任何控制操作,必须有两个步骤。比如先点「解锁」,再弹窗确认「确定解锁?」。
- 操作倒计时:确认后给3-5秒倒计时,用户可以取消。这个时间足够用户反应过来「我点错了」。
- 地理围栏:手机和车辆距离太近时,禁止远程控制。你就在车旁边,直接拉车门就行了,用不着远程解锁。
- 状态反馈:操作完成后,车机必须给手机一个「已执行」的回执。如果没收到回执,手机端要提示「操作可能失败,请确认」。
一个小技巧:我在做防误触时,加了个「摇一摇取消」功能。用户误操作后,摇一下手机就能取消指令。这个功能用户反馈特别好。
18.5 整体架构与流程
说了这么多,咱们用一张图把整体逻辑串起来。
这张图把整个流程串起来了。手机发指令,云端中转,车机执行并回执。权限和防误触贯穿始终。
18.6 代码示例:远程控制指令协议
最后给一段实际用过的指令协议。我习惯用JSON格式,简单明了。
// 手机端发送远程解锁指令
{
"cmd": "remote_unlock",
"timestamp": 1712345678000,
"device_id": "car_abc123",
"user_id": "user_xyz789",
"auth_token": "eyJhbGciOiJIUzI1NiIs...",
"confirm": true,
"geo": {
"lat": 39.9042,
"lng": 116.4074
}
}
// 车机端返回执行结果
{
"status": "success",
"cmd": "remote_unlock",
"exec_time": 1712345678500,
"result": "door_unlocked",
"error_code": 0
}
注意看,指令里带了地理位置。如果手机和车距离小于50米,车机端会拒绝执行。这就是地理围栏防误触。
重要提醒:auth_token一定要有时效性,建议5分钟内过期。我见过有人用永久token,结果泄露后车被人远程开走了。这不是开玩笑。
好了,远程控制和反向控制的核心内容就这些。权限模型和防误触是重中之重,千万别省。下一章咱们聊聊更进阶的话题。
公众号:蓝海资料掘金营,微信deep3321