我正在Android上设置Bluetooth LE GATT服务器,并想在Chrome中将Web Bluetooth API用作GATT客户端,以检查其是否正常运行。实际上,这是我稍后在Android中构建FIDO Authenticator的第一步。
首先,我尝试在Android应用中将服务的uuid设置为0000fffd-0000-1000-8000-00805f9b34fb
。像这样:
// start gatt server
bluetoothGattServer = bluetoothManager.openGattServer(this, callback);
bluetoothGattServer.addService(
new BluetoothGattService(UUID.fromString("0000fffd-0000-1000-8000-00805f9b34fb"),
BluetoothGattService.SERVICE_TYPE_PRIMARY));
// start advertising
// ...
然后,我在Chrome中执行了以下Javascript代码,以检查是否可以建立连接。
navigator.bluetooth.requestDevice({
filters: [{ services: ['0000fffd-0000-1000-8000-00805f9b34fb'] }] })
.then(device => { console.log(device); })
.catch(error => { console.log(error); });
但是,我只有以下异常
DOMException
当我在Android代码中将uuid更改为另一个62893031-5e68-4a71-94e4-01fb81f16818
时,它就起作用了! (我是说它能够连接到手机,并且可以在Chrome的控制台中看到设备信息)
我不知道到底是什么问题。我以前的uuid有什么问题?如何调试它以了解根本原因?
谢谢您的检查!
答案 0 :(得分:1)
您可以尝试
console.log(error.messsage);
代替
console.log(error);
您将看到
使用包含阻止列表的UUID的过滤器调用requestDevice()。 https://webbluetoothcg.github.io/web-bluetooth/#attacks-on-devices
检查一下以查看安全原因。