JavaScript पर ब्लूटूथ डिवाइसों से संपर्क करना

Web Bluetooth API की मदद से, वेबसाइटें ब्लूटूथ डिवाइसों से कनेक्ट कर सकती हैं.

François Beaufort
François Beaufort

अगर हम आपको बताएं कि वेबसाइटें, आस-पास मौजूद ब्लूटूथ डिवाइसों के साथ सुरक्षित और निजता बनाए रखने वाले तरीके से, कम्यूनिकेट कर सकती हैं, तो क्या होगा? इस तरह, हार्ट रेट मॉनिटर, गाना बजाने वाले लाइटबल्ब, और यहां तक कि कछुए भी सीधे किसी वेबसाइट के साथ इंटरैक्ट कर सकते हैं.

अब तक, ब्लूटूथ डिवाइसों के साथ इंटरैक्ट करने की सुविधा, सिर्फ़ प्लैटफ़ॉर्म के हिसाब से बनाए गए ऐप्लिकेशन के लिए उपलब्ध थी. Web Bluetooth API का मकसद इसे बदलना है और इसे वेब ब्राउज़र पर भी उपलब्ध कराना है.

शुरू करने से पहले

इस दस्तावेज़ में यह माना गया है कि आपको ब्लूटूथ स्मार्ट (बीएलई) और जेनरिक एट्रिब्यूट प्रोफ़ाइल के काम करने के तरीके की बुनियादी जानकारी है.

वेब ब्लूटूथ एपीआई के लिए ज़रूरी शर्तें अभी तक तय नहीं हुई हैं. इसके बावजूद, खास जानकारी वाले लोग इस एपीआई को आज़माने के लिए, उत्साही डेवलपर की लगातार तलाश कर रहे हैं. वे खास जानकारी पर सुझाव और लागू करने के बारे में सुझाव दे रहे हैं.

Web Bluetooth API का सबसेट, ChromeOS, Android 6.0, Mac (Chrome 56), और Windows 10 (Chrome 70) के लिए उपलब्ध है. इसका मतलब है कि आपके पास आस-पास मौजूद ब्लूटूथ स्मार्ट डिवाइसों से कनेक्शन बनाने और उनसे कनेक्ट करने का विकल्प होगा. साथ ही, आपके पास ब्लूटूथ की विशेषताओं को पढ़ने/write, जीएटीटी सूचनाएं पाने, ब्लूटूथ डिवाइस के डिसकनेक्ट होने का पता लगाने, और ब्लूटूथ डिस्क्रिप्टर को पढ़ने और उनमें बदलाव करने का विकल्प भी होगा. ज़्यादा जानकारी के लिए, MDN की ब्राउज़र के साथ काम करने की सुविधा टेबल देखें.

Linux और Windows के पुराने वर्शन के लिए, about://flags में #experimental-web-platform-features फ़्लैग को चालू करें.

ऑरिजिन ट्रायल के लिए उपलब्ध है

फ़ील्ड में वेब ब्लूटूथ एपीआई का इस्तेमाल करने वाले डेवलपर से ज़्यादा से ज़्यादा सुझाव, शिकायत या राय पाने के लिए, Chrome ने पहले ही Chrome 53 में इस सुविधा को जोड़ दिया है. यह सुविधा, ChromeOS, Android, और Mac के लिए ऑरिजिन ट्रायल के तौर पर उपलब्ध है.

यह ट्रायल जनवरी 2017 में खत्म हो गया है.

सुरक्षा से जुड़ी ज़रूरी शर्तें

सुरक्षा से जुड़े समझौते को समझने के लिए, मेरा सुझाव है कि आप जेफ़री यास्किन की Web Bluetooth Security Model पोस्ट पढ़ें. जेफ़री, Chrome टीम के सॉफ़्टवेयर इंजीनियर हैं और वे Web Bluetooth API स्पेसिफ़िकेशन पर काम कर रहे हैं.

सिर्फ़ एचटीटीपीएस

यह एक्सपेरिमेंटल एपीआई, वेब पर जोड़ी गई एक नई और बेहतर सुविधा है. इसलिए, इसे सिर्फ़ सुरक्षित कॉन्टेक्स्ट के लिए उपलब्ध कराया गया है. इसका मतलब है कि आपको TLS को ध्यान में रखकर, ऐप्लिकेशन बनाना होगा.

उपयोगकर्ता के जेस्चर की ज़रूरत है

सुरक्षा सुविधा के तौर पर, navigator.bluetooth.requestDevice वाले ब्लूटूथ डिवाइसों को खोजने की सुविधा, उपयोगकर्ता के जेस्चर, जैसे कि टच या माउस क्लिक से ट्रिगर होनी चाहिए. हम pointerup, click, और touchend इवेंट को सुनने के बारे में बात कर रहे हैं.

button.addEventListener('pointerup', function(event) {
  // Call navigator.bluetooth.requestDevice
});

कोड डालें

वेब ब्लूटूथ एपीआई, JavaScript Promises पर काफ़ी निर्भर करता है. अगर आपको इनके बारे में जानकारी नहीं है, तो Promises ट्यूटोरियल देखें. एक और बात, () => {} हैं ECMAScript 2015 के ऐरो फ़ंक्शन.

ब्लूटूथ डिवाइसों के लिए अनुरोध करें

Web Bluetooth API स्पेसिफ़िकेशन के इस वर्शन की मदद से, सेंट्रल भूमिका में काम करने वाली वेबसाइटें, बीएलई कनेक्शन की मदद से रिमोट GATT सर्वर से कनेक्ट हो सकती हैं. यह उन डिवाइसों के बीच कम्यूनिकेशन की सुविधा देता है जिनमें ब्लूटूथ 4.0 या इसके बाद का वर्शन है.

जब कोई वेबसाइट navigator.bluetooth.requestDevice का इस्तेमाल करके, आस-पास मौजूद डिवाइसों का ऐक्सेस मांगती है, तो ब्राउज़र उपयोगकर्ता को डिवाइस चुनने वाला टूल दिखाता है. इस टूल की मदद से, उपयोगकर्ता किसी एक डिवाइस को चुन सकता है या अनुरोध रद्द कर सकता है.

ब्लूटूथ डिवाइस के लिए उपयोगकर्ता को दिया जाने वाला प्रॉम्प्ट.

navigator.bluetooth.requestDevice() फ़ंक्शन में एक ज़रूरी ऑब्जेक्ट होता है, जो फ़िल्टर तय करता है. इन फ़िल्टर का इस्तेमाल, सिर्फ़ उन डिवाइसों को दिखाने के लिए किया जाता है जो विज्ञापन में दिखाई गई कुछ ब्‍लूटूथ जीएटीटी सेवाओं और/या डिवाइस के नाम से मेल खाते हैं.

सेवाओं का फ़िल्टर

उदाहरण के लिए, ब्लूटूथ GATT बैटरी सेवा का विज्ञापन करने वाले ब्लूटूथ डिवाइसों का अनुरोध करने के लिए:

navigator.bluetooth.requestDevice({ filters: [{ services: ['battery_service'] }] })
.then(device => { /* … */ })
.catch(error => { console.error(error); });

अगर आपकी Bluetooth GATT सेवा, स्टैंडर्ड Bluetooth GATT सेवाओं की सूची में नहीं है, तो पूरा Bluetooth UUID या छोटा 16 या 32-बिट फ़ॉर्म दिया जा सकता है.

navigator.bluetooth.requestDevice({
  filters: [{
    services: [0x1234, 0x12345678, '99999999-0000-1000-8000-00805f9b34fb']
  }]
})
.then(device => { /* … */ })
.catch(error => { console.error(error); });

नाम के हिसाब से फ़िल्टर

name फ़िल्टर बटन का इस्तेमाल करके, विज्ञापन में दिखाए जा रहे डिवाइस के नाम के आधार पर भी ब्लूटूथ डिवाइसों का अनुरोध किया जा सकता है. इसके अलावा, namePrefix फ़िल्टर बटन का इस्तेमाल करके, इस नाम के प्रीफ़िक्स के आधार पर भी अनुरोध किया जा सकता है. ध्यान दें कि इस मामले में, आपको optionalServices कुंजी भी तय करनी होगी, ताकि सेवा फ़िल्टर में शामिल नहीं की गई किसी भी सेवा को ऐक्सेस किया जा सके. ऐसा न करने पर, उन्हें बाद में ऐक्सेस करने के दौरान आपको गड़बड़ी का मैसेज मिलेगा.

navigator.bluetooth.requestDevice({
  filters: [{
    name: 'Francois robot'
  }],
  optionalServices: ['battery_service'] // Required to access service later.
})
.then(device => { /* … */ })
.catch(error => { console.error(error); });

मैन्युफ़ैक्चरर का डेटा फ़िल्टर

manufacturerData फ़िल्टर बटन की मदद से, मैन्युफ़ैक्चरर के खास डेटा के आधार पर भी ब्लूटूथ डिवाइसों का अनुरोध किया जा सकता है. यह कुंजी, ऑब्जेक्ट का एक कलेक्शन है. इसमें companyIdentifier नाम की Bluetooth कंपनी आइडेंटिफ़ायर कुंजी ज़रूरी है. इसके अलावा, डेटा प्रीफ़िक्स भी जोड़ा जा सकता है, जो इससे शुरू होने वाले ब्लूटूथ डिवाइसों से मैन्युफ़ैक्चरर के डेटा को फ़िल्टर करता है. ध्यान दें कि सेवा फ़िल्टर में शामिल नहीं की गई किसी भी सेवा को ऐक्सेस करने के लिए, आपको optionalServices कुंजी भी तय करनी होगी. ऐसा न करने पर, बाद में उन्हें ऐक्सेस करने के दौरान आपको गड़बड़ी का मैसेज मिलेगा.

// Filter Bluetooth devices from Google company with manufacturer data bytes
// that start with [0x01, 0x02].
navigator.bluetooth.requestDevice({
  filters: [{
    manufacturerData: [{
      companyIdentifier: 0x00e0,
      dataPrefix: new Uint8Array([0x01, 0x02])
    }]
  }],
  optionalServices: ['battery_service'] // Required to access service later.
})
.then(device => { /* … */ })
.catch(error => { console.error(error); });

मैस्क का इस्तेमाल, डेटा प्रीफ़िक्स के साथ भी किया जा सकता है, ताकि मैन्युफ़ैक्चरर के डेटा में मौजूद कुछ पैटर्न से मैच किया जा सके. ज़्यादा जानने के लिए, Bluetooth डेटा फ़िल्टर के बारे में जानकारी देखें.

एक्सक्लूज़न फ़िल्टर

navigator.bluetooth.requestDevice() में मौजूद exclusionFilters विकल्प की मदद से, कुछ डिवाइसों को ब्राउज़र पिकर से बाहर रखा जा सकता है. इसका इस्तेमाल, ऐसे डिवाइसों को बाहर रखने के लिए किया जा सकता है जो बड़े फ़िल्टर से मैच करते हैं, लेकिन जिन पर यह सुविधा काम नहीं करती.

// Request access to a bluetooth device whose name starts with "Created by".
// The device named "Created by Francois" has been reported as unsupported.
navigator.bluetooth.requestDevice({
  filters: [{
    namePrefix: "Created by"
  }],
  exclusionFilters: [{
    name: "Created by Francois"
  }],
  optionalServices: ['battery_service'] // Required to access service later.
})
.then(device => { /* … */ })
.catch(error => { console.error(error); });

कोई फ़िल्टर नहीं

आखिर में, आस-पास मौजूद सभी ब्लूटूथ डिवाइसों को दिखाने के लिए, filters के बजाय acceptAllDevices बटन का इस्तेमाल करें. कुछ सेवाओं को ऐक्सेस करने के लिए, आपको optionalServices की भी तय करनी होगी. ऐसा न करने पर, उन्हें बाद में ऐक्सेस करने के दौरान आपको गड़बड़ी का मैसेज मिलेगा.

navigator.bluetooth.requestDevice({
  acceptAllDevices: true,
  optionalServices: ['battery_service'] // Required to access service later.
})
.then(device => { /* … */ })
.catch(error => { console.error(error); });

Bluetooth उपकरण से कनेक्‍ट करना

अब आपके पास BluetoothDevice है, तो आपको क्या करना चाहिए? आइए, ब्लूटूथ रिमोट GATT सर्वर से कनेक्ट करते हैं. इस सर्वर में, सेवा और विशेषता वाली परिभाषाएं होती हैं.

navigator.bluetooth.requestDevice({ filters: [{ services: ['battery_service'] }] })
.then(device => {
  // Human-readable name of the device.
  console.log(device.name);

  // Attempts to connect to remote GATT Server.
  return device.gatt.connect();
})
.then(server => { /* … */ })
.catch(error => { console.error(error); });

ब्लूटूथ की खासियत पढ़ें

यहां हम रिमोट ब्लूटूथ डिवाइस के GATT सर्वर से कनेक्ट करते हैं. अब हमें मुख्य GATT सेवा और इस सेवा से जुड़ी विशेषता पढ़नी है. उदाहरण के लिए, हम डिवाइस की बैटरी का मौजूदा चार्ज लेवल पढ़ने की कोशिश करते हैं.

यहां दिए गए उदाहरण में, battery_level स्टैंडर्ड बैटरी लेवल की विशेषता है.

navigator.bluetooth.requestDevice({ filters: [{ services: ['battery_service'] }] })
.then(device => device.gatt.connect())
.then(server => {
  // Getting Battery Service…
  return server.getPrimaryService('battery_service');
})
.then(service => {
  // Getting Battery Level Characteristic…
  return service.getCharacteristic('battery_level');
})
.then(characteristic => {
  // Reading Battery Level…
  return characteristic.readValue();
})
.then(value => {
  console.log(`Battery percentage is ${value.getUint8(0)}`);
})
.catch(error => { console.error(error); });

अगर कस्टम ब्लूटूथ GATT विशेषता का इस्तेमाल किया जाता है, तो service.getCharacteristic के लिए, पूरा ब्लूटूथ UUID या 16 या 32-बिट का छोटा फ़ॉर्म दिया जा सकता है.

ध्यान दें कि किसी विशेषता की वैल्यू पढ़ने के लिए, उस पर characteristicvaluechanged इवेंट लिसनर भी जोड़ा जा सकता है. Read Characteristic Value Changed Sample देखें. इससे आपको यह जानने में मदद मिलेगी कि आने वाले समय में मिलने वाली GATT सूचनाओं को कैसे मैनेज किया जा सकता है.


.then(characteristic => {
  // Set up event listener for when characteristic value changes.
  characteristic.addEventListener('characteristicvaluechanged',
                                  handleBatteryLevelChanged);
  // Reading Battery Level…
  return characteristic.readValue();
})
.catch(error => { console.error(error); });

function handleBatteryLevelChanged(event) {
  const batteryLevel = event.target.value.getUint8(0);
  console.log('Battery percentage is ' + batteryLevel);
}

ब्लूटूथ की खासियत के हिसाब से लिखना

ब्लूटूथ GATT विशेषता में डेटा लिखना उतना ही आसान है जितना उसे पढ़ना. इस बार, हमें हार्ट रेट कंट्रोल पॉइंट का इस्तेमाल करके, हार्ट रेट मॉनिटर डिवाइस पर, खर्च की गई ऊर्जा वाले फ़ील्ड की वैल्यू को 0 पर रीसेट करना है.

हम वादा करते हैं कि इसमें कोई जादू नहीं है. इस बारे में पूरी जानकारी, हार्ट रेट कंट्रोल के लिए उपलब्ध पॉइंट की विशेषता वाले पेज पर दी गई है.

navigator.bluetooth.requestDevice({ filters: [{ services: ['heart_rate'] }] })
.then(device => device.gatt.connect())
.then(server => server.getPrimaryService('heart_rate'))
.then(service => service.getCharacteristic('heart_rate_control_point'))
.then(characteristic => {
  // Writing 1 is the signal to reset energy expended.
  const resetEnergyExpended = Uint8Array.of(1);
  return characteristic.writeValue(resetEnergyExpended);
})
.then(_ => {
  console.log('Energy expended has been reset.');
})
.catch(error => { console.error(error); });

GATT सूचनाएं पाना

अब देखते हैं कि डिवाइस पर धड़कन की दर मापने की विशेषता बदलने पर, आपको इसकी सूचना कैसे दी जाए:

navigator.bluetooth.requestDevice({ filters: [{ services: ['heart_rate'] }] })
.then(device => device.gatt.connect())
.then(server => server.getPrimaryService('heart_rate'))
.then(service => service.getCharacteristic('heart_rate_measurement'))
.then(characteristic => characteristic.startNotifications())
.then(characteristic => {
  characteristic.addEventListener('characteristicvaluechanged',
                                  handleCharacteristicValueChanged);
  console.log('Notifications have been started.');
})
.catch(error => { console.error(error); });

function handleCharacteristicValueChanged(event) {
  const value = event.target.value;
  console.log('Received ' + value);
  // TODO: Parse Heart Rate Measurement value.
  // See https://github.com/WebBluetoothCG/demos/blob/gh-pages/heart-rate-sensor/heartRateSensor.js
}

सूचनाओं का सैंपल में, stopNotifications() की मदद से सूचनाएं पाने की सुविधा को बंद करने का तरीका बताया गया है. साथ ही, जोड़े गए characteristicvaluechanged इवेंट लिसनर को सही तरीके से हटाने का तरीका भी बताया गया है.

ब्लूटूथ डिवाइस से डिसकनेक्ट करना

उपयोगकर्ता को बेहतर अनुभव देने के लिए, डिसकनेक्ट होने के इवेंट को सुनें और उपयोगकर्ता को फिर से कनेक्ट करने का न्योता दें:

navigator.bluetooth.requestDevice({ filters: [{ name: 'Francois robot' }] })
.then(device => {
  // Set up event listener for when device gets disconnected.
  device.addEventListener('gattserverdisconnected', onDisconnected);

  // Attempts to connect to remote GATT Server.
  return device.gatt.connect();
})
.then(server => { /* … */ })
.catch(error => { console.error(error); });

function onDisconnected(event) {
  const device = event.target;
  console.log(`Device ${device.name} is disconnected.`);
}

अपने वेब ऐप्लिकेशन को ब्लूटूथ डिवाइस से डिसकनेक्ट करने के लिए, device.gatt.disconnect() को भी कहा जा सकता है. इससे, gattserverdisconnected इवेंट के मौजूदा Listener ट्रिगर हो जाएंगे. ध्यान दें कि अगर कोई दूसरा ऐप्लिकेशन पहले से ही ब्लूटूथ डिवाइस से कनेक्ट है, तो यह ब्लूटूथ डिवाइस के साथ कनेक्ट होने की सुविधा को बंद नहीं करेगा. ज़्यादा जानकारी के लिए, डिवाइस के डिसकनेक्ट होने का सैंपल और अपने-आप फिर से कनेक्ट होने का सैंपल देखें.

ब्लूटूथ डिस्क्रिप्टर को पढ़ना और उनमें बदलाव करना

ब्लूटूथ जीएटीटी डिस्क्रिप्टर ऐसे एट्रिब्यूट होते हैं जो किसी विशेषता की वैल्यू के बारे में बताते हैं. इन्हें ब्लूटूथ GATT विशेषताओं की तरह ही पढ़ा और लिखा जा सकता है.

उदाहरण के लिए, आइए देखें कि डिवाइस के हेल्थ थर्मामीटर के मेज़रमेंट इंटरवल के उपयोगकर्ता के ब्यौरे को कैसे पढ़ें.

नीचे दिए गए उदाहरण में, health_thermometer स्वास्थ्य से जुड़ी थर्मामीटर सेवा है, measurement_interval मेज़रमेंट इंटरवल की विशेषता है, और gatt.characteristic_user_description विशेषता के उपयोगकर्ता के ब्यौरे का डिस्क्रिप्टर है.

navigator.bluetooth.requestDevice({ filters: [{ services: ['health_thermometer'] }] })
.then(device => device.gatt.connect())
.then(server => server.getPrimaryService('health_thermometer'))
.then(service => service.getCharacteristic('measurement_interval'))
.then(characteristic => characteristic.getDescriptor('gatt.characteristic_user_description'))
.then(descriptor => descriptor.readValue())
.then(value => {
  const decoder = new TextDecoder('utf-8');
  console.log(`User Description: ${decoder.decode(value)}`);
})
.catch(error => { console.error(error); });

अब हम डिवाइस के हेल्थ थर्मामीटर के मेज़रमेंट इंटरवल के लिए, उपयोगकर्ता की दी गई जानकारी पढ़ चुके हैं. अब देखते हैं कि इसे अपडेट करने और अपनी पसंद के मुताबिक वैल्यू लिखने का तरीका क्या है.

navigator.bluetooth.requestDevice({ filters: [{ services: ['health_thermometer'] }] })
.then(device => device.gatt.connect())
.then(server => server.getPrimaryService('health_thermometer'))
.then(service => service.getCharacteristic('measurement_interval'))
.then(characteristic => characteristic.getDescriptor('gatt.characteristic_user_description'))
.then(descriptor => {
  const encoder = new TextEncoder('utf-8');
  const userDescription = encoder.encode('Defines the time between measurements.');
  return descriptor.writeValue(userDescription);
})
.catch(error => { console.error(error); });

सैंपल, डेमो, और कोड लैब

यहां दिए गए सभी वेब ब्लूटूथ सैंपल की जांच पूरी हो चुकी है. इन सैंपल को अच्छी तरह देखने के लिए, हमारा सुझाव है कि आप [BLE Peripheral Simulator Android App] इंस्टॉल करें. यह BLE वाले सहायक डिवाइस की तरह काम करता है, जैसे कि बैटरी, धड़कन की दर या हेल्थ थर्मामीटर सेवा.

बिगिनर लेवल

कई कार्रवाइयों को एक साथ करना

वेब ब्लूटूथ के चुनिंदा डेमो और वेब ब्लूटूथ के आधिकारिक कोडलैब भी देखें.

लाइब्रेरी

  • web-bluetooth-utils एक एनपीएम मॉड्यूल है, जो एपीआई में कुछ सुविधाजनक फ़ंक्शन जोड़ता है.
  • वेब ब्लूटूथ एपीआई शिम, noble में उपलब्ध है. यह Node.js BLE के सबसे लोकप्रिय सेंट्रल मॉड्यूल में से एक है. इससे, आपको वेबसोकेट सर्वर या अन्य प्लग इन के बिना, noble को वेबपैक/ब्राउज़रबाय करने की अनुमति मिलती है.
  • angular-web-bluetooth, Angular के लिए एक मॉड्यूल है. यह वेब ब्लूटूथ एपीआई को कॉन्फ़िगर करने के लिए ज़रूरी सभी बोइलरप्लेट को हटा देता है.

टूल

  • वेब ब्लूटूथ का इस्तेमाल शुरू करें एक आसान वेब ऐप्लिकेशन है. यह किसी ब्लूटूथ डिवाइस से इंटरैक्ट करने के लिए, सभी JavaScript बॉयलरप्लेट कोड जनरेट करता है. डिवाइस का नाम, सेवा, और विशेषता डालें. साथ ही, उसकी प्रॉपर्टी तय करें. इसके बाद, आपका काम हो जाएगा.
  • अगर आप पहले से ही ब्लूटूथ डेवलपर हैं, तो Web Bluetooth Developer Studio प्लग इन आपके ब्लूटूथ डिवाइस के लिए, वेब ब्लूटूथ JavaScript कोड भी जनरेट करेगा.

सलाह

Chrome में ब्लूटूथ इंटरनल पेज, about://bluetooth-internals पर उपलब्ध है. इससे, आस-पास मौजूद ब्लूटूथ डिवाइसों के बारे में हर चीज़ की जांच की जा सकती है: स्थिति, सेवाएं, विशेषताएं, और डिस्क्रिप्टर.

Chrome में ब्लूटूथ को डीबग करने के लिए, इंटरनल पेज का स्क्रीनशॉट
ब्लूटूथ डिवाइसों को डीबग करने के लिए, Chrome का इंटरनल पेज.

हमारा सुझाव है कि आप वेब ब्लूटूथ से जुड़ी गड़बड़ियों की शिकायत करने का तरीका वाला आधिकारिक पेज भी देखें. ऐसा इसलिए, क्योंकि ब्लूटूथ को डीबग करना कभी-कभी मुश्किल हो सकता है.

आगे क्या करना है

वेब ब्लूटूथ API के कौनसे हिस्से फ़िलहाल लागू किए जा रहे हैं, यह जानने के लिए सबसे पहले ब्राउज़र और प्लैटफ़ॉर्म पर लागू होने की स्थिति देखें.

हालांकि, यह सुविधा अभी पूरी तरह से तैयार नहीं है. इसलिए, यहां आपको इसकी झलक दी गई है कि आने वाले समय में आपको क्या-क्या मिलेगा:

  • navigator.bluetooth.requestLEScan() की मदद से, आस-पास मौजूद बीएलई विज्ञापनों को स्कैन किया जाएगा.
  • नया serviceadded इवेंट, खोजी गई नई ब्लूटूथ GATT सेवाओं को ट्रैक करेगा. वहीं, serviceremoved इवेंट हटाई गई ब्लूटूथ GATT सेवाओं को ट्रैक करेगा. जब किसी ब्लूटूथ GATT सेवा में कोई विशेषता और/या डिस्क्रिप्टर जोड़ा या हटाया जाएगा, तब एक नया servicechanged इवेंट ट्रिगर होगा.

एपीआई के लिए सहायता दिखाना

क्या आपको वेब ब्लूटूथ एपीआई का इस्तेमाल करना है? सार्वजनिक तौर पर सहायता करने से, Chrome टीम को सुविधाओं को प्राथमिकता देने में मदद मिलती है. साथ ही, इससे अन्य ब्राउज़र वेंडर को यह पता चलता है कि इन सुविधाओं को उपलब्ध कराना कितना ज़रूरी है.

हैशटैग #WebBluetooth का इस्तेमाल करके @ChromiumDev को ट्वीट भेजें और हमें बताएं कि उनका इस्तेमाल कहां और कैसे किया जा रहा है.

संसाधन

स्वीकार की गई

इस लेख की समीक्षा करने के लिए, Kayce Basques का धन्यवाद. Bulder, USA के SparkFun Electronics से हीरो इमेज.