Hi, everyone.
We have confirmed that Web Bluetooth via Web Assembly does not function properly on Chromebooks managed by Google Workspace. We have confirmed that it functions properly on Chromebooks not managed by Google Workspace and without restrictions.
SUMMARY
I’m building an app using Microsoft’s Blazor to create a WebAssembly application, which then uses JavaScript to access Web Bluetooth.
I have confirmed it runs without issues on my Chromebook development environment.
However, when running this app on a Chromebook in a Japanese school environment using Google Workspace with functional restrictions, the connect operation completes successfully and Characteristics are retrieved. But when sending a Request, the code freezes at that point.
(Note: The transmission itself succeeds, and the Bluetooth device receives the command.)
MINIMAL REPRODUCTION
const serviceFilter = { services: ["service GUID"] };
const option = { filters: [serviceFilter], optionalServices: ["allow GUID"] };
const device = await navigator.bluetooth.requestDevice(option);
const server = await device.gatt.connect();
const service = await server.getPrimaryServices();
const characteristics = await service[0].getCharacteristics();
const characteristic = characteristics.find(x => x.uuid == "f7fce511-7a0b-4b89-a675-a79137223e2c");
const buffer = new ArrayBuffer(1);
const byteBuffer = new Uint8Array(buffer);
byteBuffer[0] = 180;
try {
await characteristic.writeValueWithoutResponse(byteBuffer); // Freeze!
}
catch (error) {
console.log(error);
}
finally {
server.disconnect();
}
DEPLOYMENT
- Created with Microsoft Blazor (Web Assembly)
- Runs on Chromebook
- Issues occurred while restrictions were in place in Google Workspace administration.
- Bluetooth is enabled in Google Workspace.
- Communication uses BLE
- No pairing required
WHAT HAPPENS
- When attempting to send data using web bluetooth’s writeValueWithoutResponse, the process freezes.
- The data transmission itself is being performed.
- When you turn off the device’s power to forcibly disconnect the connection, the error “GATT Server is disconnected. Cannot retrieve services. (Re)connect first with device.gatt.connect” occurs shortly after disconnection.
- No issues on Chromebooks outside of Google Workspace management
WHAT I HAVE VERIFIED
- Functionality verified with minimal code
- Functionality verified for both writeValueWithoutResponse and writeValueWithResponse
- Verify on multiple devices
CONCLUSION
The portion responsible for receiving responses via Web Bluetooth may be restricted in some way.
REQUEST
I want to know which Google Workspace settings might restrict web Bluetooth.
Or I would like to know how to avoid this phenomenon.