React本机蓝牙设备身份验证

7eumitmz  于 2023-01-31  发布在  React
关注(0)|答案(1)|浏览(105)

bounty将在3天后过期。回答此问题可获得+150声望奖励。AWE希望引起更多人关注此问题。

我正在尝试与蓝牙LE设备通信,但被告知需要进行“身份验证”才能读写数据。硬件开发人员告诉我,设备会向接收方发送密钥,我需要使用12000000000000000000000000进行回复。他已使用NRF Connect桌面应用程序成功测试了此功能(但我需要在react native中复制此功能)。
我尝试过使用下面的代码在连接到设备后立即将12000000000000000000000000(转换为base64)发送到设备的notify特性:

const Buffer = require("buffer").Buffer;
            const loginString = "12000000000000000000000000";
            const hexToBase64 = Buffer.from(loginString).toString("base64");

            characteristics[0].writeWithResponse(hexToBase64).then(()=>...)

但是,即使代码执行正确(没有捕获错误),我还是不断得到"GATT exception from MAC address C7:7A:16:6B:1F:56, with type BleGattOperation{description='CHARACTERISTIC_WRITE'}"
我已经看过了react-native-ble-plx文档,仍然没有找到解决我的问题的方法,任何帮助都将是感激的!

rsl1atfo

rsl1atfo1#

如果BLE设备运行Authorization Control Service(ASC)(UUID 0x 183 D),您的应用程序将扮演客户端角色。在ACS中,客户端可以写入两个特征:“ACS数据输入”(UUID 0x 2B 30)和“ACS控制点”(UUID 0x 2B 3D),而只有“ACS数据输出通知”特征(UUID 0x 2B 31)具有将由服务器发起但由客户端启用的通知属性。基本上,这些特征中的数据结构在有效载荷中是小端字节序,并且在写操作之前将密钥转换为little-endian可能会起作用。这些是我最近研究BLE文档时了解到的,希望这些能有所帮助。

相关问题