Web Bluetooth API: Origin не имеет доступа к сервису

Я использую веб-API Bluetooth для подключения устройства BLE. Он отлично работает на https://localhost. Но когда я пробую его на своем живом сервере, который также находится на https, или когда я пробую его на http://locahost, он проходит Мне эта ошибка «Origin не разрешен доступ к службе. Совет: добавьте UUID службы в 'optionalServices' в параметрах requestDevice ().». Код приведен ниже. Я уже добавил optionalServices.

      scanDevices () {
            if(navigator.bluetooth) {
                navigator.bluetooth.requestDevice({
                    acceptAllDevices: true,
                    optionalService: ['0000fee0-0000-1000-8000-00805f9b34fb', '0000fee1-0000-1000-8000-00805f9b34fb']
                })
                .then(device => {
                    // save the device returned so you can disconnect later:
                    this.device = device;
                    this.device.addEventListener('gattserverdisconnected', this.onDisconnected);
                    // connect to the device once you find it:
                    return this.connect();
                })
                .then((server) => {
                    this.server = server;
                    return server;
                })
                .catch(function(error) {
                    // catch any errors:
                    console.error('Connection failed!', error);
                });
            } else {
                this.errorMessage = 'Your browser does not support web bluetooth API.';
            }

        },
        connect(){
            let connection = this.device.gatt.connect();
            console.log('Connected', connection);
            return connection;
        },
        readData (){
            this.isLoader = true;
            console.log('get the primary service:');
            console.log(this.server);
            this.server.getPrimaryService(this.parsedService)
            .then((service) => {
                console.log('get the  characteristic:');
                return service.getCharacteristic(this.parsedCharacteristic);
            })
            .then(characteristic => {
                return characteristic.readValue();
            })
            .then(value => {
                console.log(value);
                this.isLoader = false;
                let decoder = new TextDecoder('utf-8');
                console.log(decoder.decode(value));
            })
            .catch(error => {
                this.isLoader = false;
                this.errorMessage = error.message;
            });
        },

person fazalerabbi    schedule 07.10.2019    source источник


Ответы (2)


Похоже, что у optionalService отсутствует буква «s». Он должен быть optionalServices в соответствии с https://webbluetoothcg.github.io/web-bluetooth/#dom-requestdeviceoptions-optionalservices

person François Beaufort    schedule 08.10.2019

Загрузите приложение nRF из игрового магазина и подключитесь к устройству BLE, и после подключения вы сможете получить все основные службы и их UUID. Получите UUID первичной службы и поместите его на optionalServices[0xFEE0], получите характеристики основных служб (перечисленные внутри основных служб) и поместите на service.getCharacteristic(0x2A2B).

Эти коды относятся к группе MI BAND для получения времени и даты.

person stillKonfuzed    schedule 12.01.2020