如何修复Web Bluetooth API中的“ DOMException”错误?

时间:2019-06-01 09:01:37

标签: android bluetooth-lowenergy uuid web-bluetooth fido

我正在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有什么问题?如何调试它以了解根本原因?

谢谢您的检查!

1 个答案:

答案 0 :(得分:1)

您可以尝试

console.log(error.messsage);

代替

console.log(error);

您将看到

  使用包含阻止列表的UUID的过滤器调用

requestDevice()。   https://webbluetoothcg.github.io/web-bluetooth/#attacks-on-devices

检查一下以查看安全原因。