Search code examples
androidbluetooth-lowenergyuuidweb-bluetoothfido

How to fix "DOMException" error in Web Bluetooth API?


I'm setting up a Bluetooth LE GATT Server in Android, and want to use Web Bluetooth API in Chrome as a GATT client to check if it properly works. Actually, this is my first step to build a FIDO Authenticator in Android later on.

Firstly, I tried to set my service's uuid is 0000fffd-0000-1000-8000-00805f9b34fb in my Android app. Something like this:

// 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
// ...

Then, I executed the following Javascript code in Chrome to check whether the connection can be established.

navigator.bluetooth.requestDevice({ 
filters: [{ services: ['0000fffd-0000-1000-8000-00805f9b34fb'] }] })
.then(device => { console.log(device); })
.catch(error => { console.log(error); });

However, I only got the exception as below

DOMException

When I changed the uuid to another one such as 62893031-5e68-4a71-94e4-01fb81f16818 in my Android code, then it worked! (I mean it was able to connect to my phone and I could see my device info in Chrome's console)

I didn't know what exactly the problem. What was the problem with my former uuid? How can I debug it to know the root cause?

Thank you for checking!


Solution

  • You can try

    console.log(error.messsage);
    

    in stead of

    console.log(error);
    

    You will see

    requestDevice() called with a filter containing a blocklisted UUID. https://webbluetoothcg.github.io/web-bluetooth/#attacks-on-devices

    Check it out to see the security reason.