Learning about Web Bluetooth

Web Bluetooth allows you to view and control Bluetooth devices from a web page.

There’s a great introduction by Niels Leenheer at Smashing Magazine. Niels is heavily into browser based solutions and has also presented about Web Bluetooth at many conferences. Visit his talks page, scroll down to ‘Fun with Bluetooth’ and click on the presentation or video icons.

Web Bluetooth only works with some browsers:

While Niels concentrates on communicating with consumer goods such as lightbulbs, robots and drones, Web Bluetooth also has uses for businesses and organisations. Web interfaces can be used to control beacons or any Bluetooth LE devices.

On Android, when created as a Progressive Web App (PWA) it behaves like an app but is created using web technologies. There’s no app packaging or signing and it can work offline. It can be optionally installed in the mobile operating system where it will look and act like any other app.

Apple’s PWA implementation doesn’t (yet) work with Bluetooth. Indeed, Apple is behind when it comes to PWA.

Web Bluetooth Updates

Web Bluetooth, the mechanism by which web sites can access Bluetooth devices, has been updated to make it easier for end users.

The main changes are two new experimental function calls getDevices() and watchAdvertisements(). Previously, permission prompts have been a pain point using the Web Bluetooth API with users having to ok the permission prompt on every visit to the site. This is especially troublesome when there are many Bluetooth devices as each permission has to be granted one device at a time. Bluetooth.getDevices() method returns a list of Bluetooth device that have already been granted by the user. The Bluetooth.watchAdvertisements() function allows observing when device is in range and broadcasting advertisement packets.

Being experimental, these new features are currently hidden behind Chrome flags:

The APIs are behind the
chrome://flags/#enable-experimental-web-platform-features
chrome flag and persistent device permissions are behind the chrome://flags/#enable-web-bluetooth-new-permissions-backend
flag that exposes the Bluetooth devices a device is allowed to access.

There is more information on the getDevices() Chrome flag and documentation.