我们这个“红绳安卓”的项目,说白了,就是要搞一个超级无敌牢靠的设备绑定功能。以前那个绑定流程,用的是老掉牙的Wi-Fi配置,用户体验烂就算了,关键是安全性,跟没有一样。产品经理那帮人,天天被用户骂,终于有一天,老板拍了桌子,说:“必须搞个新的!要像红绳系着一样,一旦绑上,谁也解不开!”
需求咋来的,我们咋接招
刚接到这个需求,我当时就想骂娘。因为这个“红绳”听着是浪漫,做起来是地狱。这个功能是给我们的新一代智能锁配套的,安卓应用必须在拿到锁的授权后,才能控制开关。以前那种Wi-Fi配对,只要换个路由器,或者网络抽风,它就断了,崩了,失联了。用户半夜被锁在门外,投诉电话能把我们前台的耳朵震聋。
我们组开了三天会,烟灰缸堆得像小山一样高。刚开始,有人提议用NFC,但不是所有手机都有,而且用户反馈手贴在锁上太蠢。又有人说用二维码,但二维码容易被拍照,安全性还是不行。我一拍大腿,说:“咱们走混合模式!主要靠低功耗蓝牙(BLE)做通道,但绑定认证机制要彻底重写!”
之所以这么急着把这玩意儿定下来,是因为我们组里有个哥们,就是负责老系统维护的,前段时间辞职了。走的时候撂下一句话,说老系统太烂,修不好了。他一走,所有的烂摊子就全堆我身上了。老婆天天催我早点回去带娃,我不想再因为一个破App被困在公司里,所以这回我就卯足了劲,一定要搞个一劳永逸的方案,赶紧把我的时间解放出来。
撸起袖子干,详细过程开始爬坑
确定了“BLE通道+服务端唯一密钥”的方案,我们就开始了漫长的爬坑之旅。我主要负责安卓客户端,硬件组负责锁的固件,后端组负责生成“红绳”密钥。
小编温馨提醒:本站只提供游戏介绍,下载游戏请前往89游戏主站,89游戏提供真人恋爱/绅士游戏/3A单机游戏大全,点我立即前往》》》绅士游戏下载专区
我这边的实践记录,主要有这几步:
- 第一步:稳定地搜到设备。 BLE扫描这块儿,安卓系统版本碎片化得厉害。我们不能用最简单的扫描方式,因为那样太耗电,而且容易搜到一堆不相干的设备。我硬着头皮去查了好多资料,决定用ScanFilter,只过滤我们自己厂商标识的服务UUID。光是这一个小小的筛选,就折腾了我整整两天,不停地在不同品牌手机上测试、抓包、调试。
- 第二步:建立安全的通信通道。 搜到了,就要连。我写了一套新的连接逻辑,用上了GATT协议栈。连接成功后,重点来了——获取和写入特征值。锁的固件老是改它的UUID和特征值,我隔三岔五就要跟硬件那帮人打电话对骂。他们说改了是为了省电,我说改了你爹我就要重写代码。来回拉锯了起码五次。
- 第三步:传递“红绳”密钥。 这是核心步骤。我的App先向服务端发起请求,让它生成一个独一无二的64位加密密钥,这就是我们的“红绳”。然后App通过BLE通道,把这个密钥加密后推给智能锁。锁那边收到后,再用App的临时Session Key解密,永久存储在自己的保险区域。
- 第四步:App存储凭证。 锁存储完密钥,会给我的App一个确认信号。我的App拿到这个信号后,再把这个密钥的简短凭证(比如一个Token)存到本地,并且更新给服务端。这样,App、锁、服务端就三点一线,彻底绑定了。
整个过程,我光是处理BLE连接断开后的重试和自动恢复逻辑,就写了超过1000行代码。那时候我晚上都没睡半夜做梦都在看日志。
怎么实现的,效果怎么样
那段时间,我真是焦头烂额,几乎每天都在骂街。有一天晚上,都已经凌晨三点了,我终于在我的主力测试机上,看到了那个绿色的“绑定成功”提示。当时我整个人都瘫在了椅子上,感觉魂儿都快飞了。
我们这个“红绳安卓”最终的效果是:
绑定过程虽然多了一两步,但它巨稳。 用户只需要在App上点几下,App就自己去扫、去连、去推密钥,整个过程对用户是透明的,只看到一个进度条在走。一旦成功,这个绑定关系就牢不可破。即使锁换了电池,App重装,甚至换了手机,只要用同一个账号登录,App就能通过服务端重新确认这个“红绳”凭证,依然可以控制。用户再也不会半夜被锁在门外了。
这个项目算是彻底解决了我们长期以来的信任危机。做完这个,我终于可以挺直腰板跟老婆说:“这个周末,我一定能陪你和孩子了。”至于那个辞职的哥们,我后来听说他去了一家小公司,还在维护他口中“一坨屎”的老系统。我摇摇头,现在想想,一个人把事情做深,做彻底,少说点废话,才是最省时间的。

