वेब के लिए सेंसर

डिवाइस पर मौजूद एक्सलरोमीटर, जाइरोस्कोप, और मैग्नेटोमीटर जैसे सेंसर का ऐक्सेस पाने के लिए, जेनेरिक Sensor API का इस्तेमाल करें.

फ़िलहाल, कई प्लैटफ़ॉर्म के हिसाब से बने ऐप्लिकेशन में सेंसर डेटा का इस्तेमाल किया जाता है. ऐसा इसलिए किया जाता है, ताकि इमर्सिव गेमिंग, फ़िटनेस ट्रैकिंग, और ऑगमेंटेड या वर्चुअल रिएलिटी जैसे ऐप्लिकेशन में मदद मिल सके. क्या प्लैटफ़ॉर्म-विशिष्ट और वेब ऐप्लिकेशन के बीच के अंतर को कम करना अच्छा नहीं होगा? वेब के लिए, जेनेरिक सेंसर एपीआई डालें!

जेनेरिक सेंसर एपीआई क्या है?

जेनेरिक Sensor API इंटरफ़ेस का एक सेट है, जो सेंसर डिवाइस को वेब प्लैटफ़ॉर्म पर दिखाता है. इस एपीआई में, बेस Sensor इंटरफ़ेस और सबसे ऊपर बनाई गई कंक्रीट सेंसर क्लास का एक सेट शामिल होता है. बेस इंटरफ़ेस होने से, कंक्रीट सेंसर क्लास के लिए उसे लागू करने और उससे जुड़ी खास जानकारी की प्रक्रिया को आसान बनाया जा सकता है. उदाहरण के लिए, Gyroscope क्लास पर एक नज़र डालें. यह बहुत छोटा है! मुख्य फ़ंक्शन, बेस इंटरफ़ेस से तय होता है. साथ ही, Gyroscope, कोणीय वेग को दिखाने वाले तीन एट्रिब्यूट के साथ इसे बढ़ाता है.

कुछ सेंसर क्लास के इंटरफ़ेस से असल हार्डवेयर सेंसर, जैसे कि एक्सलरोमीटर या जाइरोस्कोप क्लास का पता चलता है. इन्हें लो-लेवल सेंसर कहा जाता है. अन्य सेंसर जिन्हें फ़्यूज़न सेंसर कहा जाता है. ये कई लो लेवल सेंसर से डेटा को मर्ज करते हैं, ताकि स्क्रिप्ट की गणना करने के लिए ज़रूरी जानकारी दिखाई जा सके. उदाहरण के लिए, AbsoluteOrientation सेंसर, एक्सलरोमीटर, जाइरोस्कोप, और मैग्नेटोमीटर से मिले डेटा के आधार पर इस्तेमाल के लिए चार-चार रोटेशन मैट्रिक्स उपलब्ध कराता है.

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

मौजूदा इंटरफ़ेस की तुलना में, जेनेरिक Sensor API के कई फ़ायदे हैं:

  • जेनेरिक Sensor API एक सेंसर फ़्रेमवर्क है, जिसे नए सेंसर क्लास की मदद से आसानी से बढ़ाया जा सकता है और इनमें से हर क्लास सामान्य इंटरफ़ेस को बनाए रखेगी. किसी एक तरह के सेंसर के लिए लिखे गए क्लाइंट कोड को बहुत कम बदलावों के साथ दूसरे के लिए फिर से इस्तेमाल किया जा सकता है!
  • सेंसर को कॉन्फ़िगर किया जा सकता है. उदाहरण के लिए, अपने ऐप्लिकेशन की ज़रूरतों के हिसाब से, सैंपलिंग की फ़्रीक्वेंसी सेट की जा सकती है.
  • यह पता लगाया जा सकता है कि प्लैटफ़ॉर्म पर सेंसर मौजूद है या नहीं.
  • सेंसर रीडिंग में टाइमस्टैंप बहुत ज़्यादा सटीक होते हैं, जिससे आपके ऐप्लिकेशन में मौजूद अन्य गतिविधियों के साथ बेहतर सिंकिंग होती है.
  • सेंसर डेटा मॉडल और कोऑर्डिनेट सिस्टम को साफ़ तौर पर बताया गया है. इससे ब्राउज़र वेंडर, इंटरऑपरेबल (दूसरे सिस्टम के साथ काम करने वाले) समाधान लागू कर पाते हैं.
  • जेनरिक सेंसर पर आधारित इंटरफ़ेस, डीओएम से नहीं जुड़े होते. इसका मतलब है कि ये navigator और window ऑब्जेक्ट नहीं हैं. इस वजह से, आने वाले समय में इन्हें इस्तेमाल करने के मौके मिलते हैं. इनमें सर्विस वर्कर में एपीआई का इस्तेमाल किया जा सकता है या बिना ग्राफ़िक यूज़र इंटरफ़ेस वाले ब्राउज़र (जैसे, एम्बेड किए गए डिवाइस) में इसे लागू किया जा सकता है.
  • जेनेरिक सेंसर एपीआई के लिए, सुरक्षा और निजता से जुड़ी जानकारी सबसे अहम है. इससे, पुराने सेंसर एपीआई के मुकाबले बेहतर सुरक्षा मिलती है. अनुमतियां एपीआई के साथ इंटिग्रेशन है.
  • Accelerometer, Gyroscope, LinearAccelerationSensor, AbsoluteOrientationSensor, RelativeOrientationSensor, और Magnetometer के लिए, स्क्रीन कोऑर्डिनेट के साथ अपने-आप सिंक होने की सुविधा उपलब्ध है.

उपलब्ध सामान्य सेंसर एपीआई

लिखते समय, ऐसे कई सेंसर होते हैं जिनका इस्तेमाल करके एक्सपेरिमेंट किया जा सकता है.

मोशन सेंसर:

  • Accelerometer
  • Gyroscope
  • LinearAccelerationSensor
  • AbsoluteOrientationSensor
  • RelativeOrientationSensor
  • GravitySensor

एनवायरमेंटल सेंसर:

  • AmbientLightSensor (Chromium में #enable-generic-sensor-extra-classes फ़्लैग के पीछे.)
  • Magnetometer (Chromium में #enable-generic-sensor-extra-classes फ़्लैग के पीछे.)

सुविधा की पहचान करने की सुविधा

हार्डवेयर एपीआई की सुविधा का पता लगाना मुश्किल है. ऐसा इसलिए, क्योंकि आपको यह पता लगाना पड़ता है कि ब्राउज़र, बताए गए इंटरफ़ेस के साथ काम करता है या नहीं. और यह भी पता लगाना पड़ता है कि डिवाइस में उससे जुड़ा सेंसर है या नहीं. यह जांचना आसान है कि ब्राउज़र किसी इंटरफ़ेस के साथ काम करता है या नहीं. (Accelerometer को ऊपर बताए गए किसी भी अन्य इंटरफ़ेस से बदलें.)

if ('Accelerometer' in window) {
  // The `Accelerometer` interface is supported by the browser.
  // Does the device have an accelerometer, though?
}

सुविधा की पहचान करने के काम का नतीजा पाने के लिए, आपको सेंसर से भी कनेक्ट करना होगा. इस उदाहरण में इसे करने का तरीका बताया गया है.

let accelerometer = null;
try {
  accelerometer = new Accelerometer({ frequency: 10 });
  accelerometer.onerror = (event) => {
    // Handle runtime errors.
    if (event.error.name === 'NotAllowedError') {
      console.log('Permission to access sensor was denied.');
    } else if (event.error.name === 'NotReadableError') {
      console.log('Cannot connect to the sensor.');
    }
  };
  accelerometer.onreading = (e) => {
    console.log(e);
  };
  accelerometer.start();
} catch (error) {
  // Handle construction errors.
  if (error.name === 'SecurityError') {
    console.log('Sensor construction was blocked by the Permissions Policy.');
  } else if (error.name === 'ReferenceError') {
    console.log('Sensor is not supported by the User Agent.');
  } else {
    throw error;
  }
}

पॉलीफ़िल

जेनेरिक सेंसर एपीआई के साथ काम न करने वाले ब्राउज़र के लिए, polyfill की सुविधा उपलब्ध होती है. पॉलीफ़िल आपको सिर्फ़ काम के सेंसर को लागू करने की अनुमति देता है.

// Import the objects you need.
import { Gyroscope, AbsoluteOrientationSensor } from './src/motion-sensors.js';

// And they're ready for use!
const gyroscope = new Gyroscope({ frequency: 15 });
const orientation = new AbsoluteOrientationSensor({ frequency: 60 });

ये सभी सेंसर क्या हैं? मैं उनका इस्तेमाल कैसे करूं?

सेंसर एक ऐसा क्षेत्र है जिसके बारे में कम शब्दों में जानकारी दी जा सकती है. अगर आपको सेंसर के बारे में जानकारी है, तो सीधे हैंड-ऑन कोडिंग सेक्शन पर जाएं. नहीं तो, आइए हर काम करने वाले सेंसर के बारे में विस्तार से जानते हैं.

एक्सलरोमीटर और लीनियर ऐक्सेलरेशन सेंसर

एक्सलरोमीटर सेंसर की माप

Accelerometer सेंसर, सेंसर को होस्ट करने वाले डिवाइस की रफ़्तार को तीन ऐक्सिस (X, Y, और Z) पर मापता है. यह सेंसर एक इनर्शियल सेंसर है. इसका मतलब है कि जब डिवाइस लीनियर फ़्री फ़ॉल में होता है, तो रिकॉर्ड किया गया कुल त्वरण 0 m/s2 होगा और जब कोई डिवाइस टेबल पर सपाट होता है, तो उसके ऊपर की दिशा में त्वरण (Z ऐक्सिस), पृथ्वी के गुरुत्वाकर्षण (जी ऐक्सिस) के बराबर होगा यानी टेबल को g ≈ +9.8 मी॰ ऊपर की ओर बढ़ाएगा. अगर डिवाइस को दाईं तरफ़ पुश किया जाता है, तो X ऐक्सिस पर त्वरण पॉज़िटिव या नेगेटिव होगा. ऐसा तब होगा, जब डिवाइस को दाईं से बाईं ओर तेज़ी से बढ़ाया जाएगा.

एक्सलरोमीटर का इस्तेमाल इन कामों के लिए किया जा सकता है: कदमों की गिनती करना, मोशन का पता लगाना या डिवाइस की दिशा का आसानी से आकलन करना. आम तौर पर, ओरिएंटेशन सेंसर जैसे फ़्यूज़न सेंसर बनाने के लिए, एक्सलरोमीटर मेज़रमेंट को दूसरे सोर्स से मिले डेटा के साथ जोड़ा जाता है.

LinearAccelerationSensor, सेंसर को होस्ट करने वाले डिवाइस पर लागू किए जाने वाले त्वरण को मापता है. हालांकि, इसमें गुरुत्वाकर्षण के योगदान को शामिल नहीं किया जाता. जब कोई डिवाइस ऐक्टिव नहीं होता है, जैसे कि टेबल पर लेटना, तो सेंसर तीन ऐक्सिस पर ≈ 0 m/s2 ऐक्सेलरेशन मेज़र करेगा.

ग्रेविटी सेंसर

उपयोगकर्ताओं के लिए पहले से ही मैन्युअल रूप से Accelerometer और LinearAccelerometer रीडिंग की जांच करके, ग्रैविटी सेंसर के आस-पास की रीडिंग लेना संभव है. हालांकि, यह काम बोझिल हो सकता है और यह इस बात पर निर्भर करता है कि सेंसर से मिली वैल्यू कितनी सटीक है. Android जैसे प्लैटफ़ॉर्म, ऑपरेटिंग सिस्टम के हिस्से के तौर पर ग्रैविटी रीडिंग दे सकते हैं. यह हिसाब लगाने के लिहाज़ से सस्ता होना चाहिए, उपयोगकर्ता के हार्डवेयर के आधार पर ज़्यादा सटीक वैल्यू देना चाहिए, और एपीआई एर्गोनॉमिक के डेटा में इस्तेमाल में आसान होना चाहिए. GravitySensor, डिवाइस के X, Y, और Z ऐक्सिस पर गुरुत्वाकर्षण की वजह से तेज़ी से होने वाले असर को दिखाता है.

जाइरोस्कोप

जाइरोस्कोप सेंसर माप

Gyroscope सेंसर, डिवाइस के स्थानीय X, Y, और Z ऐक्सिस के चारों ओर रेडियन प्रति सेकंड में ऐंग्युलर वेलोसिटी को मापता है. उपभोक्ता वाले ज़्यादातर डिवाइसों में मैकेनिकल (MEMS) जाइरोस्कोप होते हैं, जो इनर्शियल सेंसर होते हैं. ये इनर्शियल कोरिऑलिस फ़ोर्स के आधार पर, रोटेशन रेट को मापते हैं. एमईएमएस जीरोस्कोप जाइरोस्कोप, तुलनात्मक रूप से ज़्यादा फ़्रीक्वेंसी पर हिलते-डुलते नहीं हैं, जैसे कि 10 किलोहर्ट्ज़ (kHz) के आस-पास और इस वजह से, दूसरे सेंसर की तुलना में ज़्यादा बैटरी खर्च हो सकती है.

ओरिएंटेशन सेंसर

ऐब्सलूट ओरिएंटेशन सेंसर मेज़रमेंट

AbsoluteOrientationSensor एक फ़्यूज़न सेंसर है, जो Earth के कोऑर्डिनेट सिस्टम के हिसाब से किसी डिवाइस के रोटेशन को मेज़र करता है. वहीं, RelativeOrientationSensor, स्थिर रेफ़रंस निर्देशांक सिस्टम के हिसाब से, मोशन सेंसर होस्ट करने वाले डिवाइस के रोटेशन का डेटा दिखाता है.

सभी मॉडर्न 3D JavaScript फ़्रेमवर्क, रोटेशन को दिखाने के लिए क्वाटर्नियन और रोटेशन मैट्रिक्स के साथ काम करते हैं. हालांकि, अगर सीधे WebGL का इस्तेमाल किया जाता है, तो OrientationSensor में quaternion प्रॉपर्टी और populateMatrix() तरीका, दोनों ही आसानी से मिल जाते हैं. यहां कुछ स्निपेट दिए गए हैं:

three.js

let torusGeometry = new THREE.TorusGeometry(7, 1.6, 4, 3, 6.3);
let material = new THREE.MeshBasicMaterial({ color: 0x0071c5 });
let torus = new THREE.Mesh(torusGeometry, material);
scene.add(torus);

// Update mesh rotation using quaternion.
const sensorAbs = new AbsoluteOrientationSensor();
sensorAbs.onreading = () => torus.quaternion.fromArray(sensorAbs.quaternion);
sensorAbs.start();

// Update mesh rotation using rotation matrix.
const sensorRel = new RelativeOrientationSensor();
let rotationMatrix = new Float32Array(16);
sensor_rel.onreading = () => {
  sensorRel.populateMatrix(rotationMatrix);
  torus.matrix.fromArray(rotationMatrix);
};
sensorRel.start();

बेबीलॉन

const mesh = new BABYLON.Mesh.CreateCylinder('mesh', 0.9, 0.3, 0.6, 9, 1, scene);
const sensorRel = new RelativeOrientationSensor({ frequency: 30 });
sensorRel.onreading = () => mesh.rotationQuaternion.FromArray(sensorRel.quaternion);
sensorRel.start();

WebGL

// Initialize sensor and update model matrix when new reading is available.
let modMatrix = new Float32Array([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]);
const sensorAbs = new AbsoluteOrientationSensor({ frequency: 60 });
sensorAbs.onreading = () => sensorAbs.populateMatrix(modMatrix);
sensorAbs.start();

// Somewhere in rendering code, update vertex shader attribute for the model
gl.uniformMatrix4fv(modMatrixAttr, false, modMatrix);

ओरिएंटेशन सेंसर, इस्तेमाल के कई उदाहरण उपलब्ध कराते हैं. जैसे, इमर्सिव गेमिंग, ऑगमेंटेड रिएलिटी (एआर), और वर्चुअल रिएलिटी वाले सेंसर.

मोशन सेंसर, बेहतर इस्तेमाल के उदाहरण, और ज़रूरी शर्तों के बारे में ज़्यादा जानकारी के लिए, मोशन सेंसर के बारे में जानकारी देने वाला दस्तावेज़ देखें.

स्क्रीन निर्देशांकों के साथ सिंक्रोनाइज़ेशन

डिफ़ॉल्ट रूप से, स्पेशल सेंसर की रीडिंग, डिवाइस से जुड़े लोकल निर्देशांक सिस्टम में हल की जाती हैं और स्क्रीन ओरिएंटेशन को खाते में नहीं लेती हैं.

डिवाइस निर्देशांक सिस्टम
डिवाइस का कोऑर्डिनेट सिस्टम

हालांकि, गेम या ऑगमेंटेड और वर्चुअल रिएलिटी जैसे इस्तेमाल के कई मामलों में सेंसर रीडिंग को ऐसे कोऑर्डिनेट सिस्टम में हल करने की ज़रूरत होती है जो सिर्फ़ स्क्रीन ओरिएंटेशन से जुड़ा हो.

स्क्रीन कोऑर्डिनेट सिस्टम
स्क्रीन कोऑर्डिनेट सिस्टम

पहले, स्क्रीन निर्देशांकों पर सेंसर रीडिंग को फिर से मैप करने की ज़रूरत JavaScript में पड़ती थी. यह तरीका काम का नहीं है और इससे वेब ऐप्लिकेशन कोड की जटिलता भी बढ़ जाती है. वेब ऐप्लिकेशन को स्क्रीन ओरिएंटेशन में बदलाव होते देखने चाहिए और सेंसर रीडिंग के लिए निर्देशांक बदलने चाहिए, जो यूलर कोणों या क्वाटर्नियन के लिए कोई छोटा काम नहीं है.

जेनेरिक सेंसर वाला एपीआई ज़्यादा आसान और भरोसेमंद समाधान देता है! लोकल निर्देशांक सिस्टम, स्पेशल सेंसर की सभी क्लास के लिए कॉन्फ़िगर किया जा सकता है: Accelerometer, Gyroscope, LinearAccelerationSensor, AbsoluteOrientationSensor, RelativeOrientationSensor, और Magnetometer. referenceFrame विकल्प को सेंसर ऑब्जेक्ट कंस्ट्रक्टर को पास करके, उपयोगकर्ता यह तय करता है कि जो रीडिंग मिलेगी, उसे डिवाइस या स्क्रीन कोऑर्डिनेट में जाकर ठीक किया जाएगा.

// Sensor readings are resolved in the Device coordinate system by default.
// Alternatively, could be RelativeOrientationSensor({referenceFrame: "device"}).
const sensorRelDevice = new RelativeOrientationSensor();

// Sensor readings are resolved in the Screen coordinate system. No manual remapping is required!
const sensorRelScreen = new RelativeOrientationSensor({ referenceFrame: 'screen' });

चलिए कोड करते हैं!

जेनेरिक Sensor API को इस्तेमाल करना बहुत आसान है! सेंसर इंटरफ़ेस में, सेंसर की स्थिति को कंट्रोल करने के start() और stop() तरीके हैं. साथ ही, सेंसर को चालू करने, गड़बड़ियों, और नई उपलब्ध रीडिंग के बारे में सूचनाएं पाने के लिए, कई इवेंट हैंडलर भी हैं. कंक्रीट सेंसर की क्लास, आम तौर पर अपनी रीडिंग एट्रिब्यूट को बेस क्लास में जोड़ती हैं.

डेवलपमेंट एनवायरमेंट

डेवलपमेंट के दौरान आप localhost के ज़रिए सेंसर का इस्तेमाल कर सकेंगे. अगर आप मोबाइल डिवाइस के लिए डेवलप कर रहे हैं, तो अपने स्थानीय सर्वर के लिए पोर्ट फ़ॉरवर्डिंग सेट अप करें और आप धूम मचाने के लिए तैयार हैं!

जब आपका कोड तैयार हो, तो उसे ऐसे सर्वर पर डिप्लॉय करें जो एचटीटीपीएस पर काम करता हो. GitHub पेज, एचटीटीपीएस पर दिखाए जाते हैं. इस वजह से, यह आपके डेमो शेयर करने की बेहतरीन जगह है.

3D मॉडल रोटेशन

इस आसान उदाहरण में, हम 3D मॉडल के रोटेशन क्वाटर्नियन में बदलाव करने के लिए, ऐब्सलूट ओरिएंटेशन सेंसर के डेटा का इस्तेमाल करते हैं. model तीन.js Object3D क्लास का इंस्टेंस है, जिसमें एक quaternion प्रॉपर्टी है. ओरिएंटेशन फ़ोन के डेमो से मिले कोड स्निपेट में, यह दिखाया गया है कि किसी 3D मॉडल को घुमाने के लिए, ऐब्सलूट ओरिएंटेशन सेंसर का इस्तेमाल कैसे किया जा सकता है.

function initSensor() {
  sensor = new AbsoluteOrientationSensor({ frequency: 60 });
  sensor.onreading = () => model.quaternion.fromArray(sensor.quaternion);
  sensor.onerror = (event) => {
    if (event.error.name == 'NotReadableError') {
      console.log('Sensor is not available.');
    }
  };
  sensor.start();
}

डिवाइस का ओरिएंटेशन, WebGL के व्यू में 3D model रोटेशन में दिखेगा.

सेंसर, 3D मॉडल का ओरिएंटेशन अपडेट करता है
3D मॉडल का सेंसर, ओरिएंटेशन को अपडेट करता है

पंचमीटर

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

this.maxSpeed = 0;
this.vx = 0;
this.ax = 0;
this.t = 0;

/* … */

this.accel.onreading = () => {
  let dt = (this.accel.timestamp - this.t) * 0.001; // In seconds.
  this.vx += ((this.accel.x + this.ax) / 2) * dt;

  let speed = Math.abs(this.vx);

  if (this.maxSpeed < speed) {
    this.maxSpeed = speed;
  }

  this.t = this.accel.timestamp;
  this.ax = this.accel.x;
};

मौजूदा वेग की गणना त्वरण फ़ंक्शन के समाकलन के अनुमान के रूप में की जाती है.

पंच स्पीड मापने के लिए डेमो वेब ऐप्लिकेशन
पंच स्पीड का मेज़रमेंट

Chrome DevTools की मदद से डीबग करना और सेंसर बदलना

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

Chrome DevTools का इस्तेमाल, वर्चुअल फ़ोन के ओरिएंटेशन (स्क्रीन की दिशा) वाले डेटा को बदलने के लिए किया जाता है
Chrome DevTools की मदद से डिवाइस ओरिएंटेशन सिम्युलेट करना

निजता और सुरक्षा

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

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

जेनेरिक सेंसर एपीआई एक असरदार सुविधा है. इसलिए, ब्राउज़र इसे सिर्फ़ सुरक्षित कॉन्टेक्स्ट पर ही अनुमति देता है. इसका मतलब है कि जेनेरिक सेंसर एपीआई का इस्तेमाल करने के लिए, आपको अपना पेज एचटीटीपीएस के ज़रिए ऐक्सेस करना होगा. डेवलपमेंट के दौरान, http://localhost की मदद से ऐसा किया जा सकता है. हालांकि, प्रोडक्शन के लिए आपको अपने सर्वर पर एचटीटीपीएस की ज़रूरत होगी. सबसे सही तरीकों और दिशा-निर्देशों के लिए, सुरक्षित तरीके से कलेक्शन देखें.

अनुमतियों से जुड़ी नीति का इंटिग्रेशन

जेनेरिक सेंसर एपीआई में अनुमति नीति इंटिग्रेशन की मदद से, किसी फ़्रेम के लिए सेंसर डेटा के ऐक्सेस को कंट्रोल किया जाता है.

डिफ़ॉल्ट रूप से, Sensor ऑब्जेक्ट सिर्फ़ मुख्य फ़्रेम या एक ही ऑरिजिन वाले सबफ़्रेम में बनाए जा सकते हैं. इस वजह से, क्रॉस-ऑरिजिन iframe, सेंसर डेटा को बिना अनुमति के नहीं पढ़ पाते. इस डिफ़ॉल्ट कार्रवाई को नीति से कंट्रोल की जाने वाली सुविधाओं को साफ़ तौर पर चालू या बंद करके, बदला जा सकता है.

नीचे दिया गया स्निपेट क्रॉस-ऑरिजिन iframe के लिए एक्सलरोमीटर डेटा का ऐक्सेस देता है. इसका मतलब है कि अब वहां Accelerometer या LinearAccelerationSensor ऑब्जेक्ट बनाए जा सकते हैं.

<iframe src="https://third-party.com" allow="accelerometer" />

सेंसर की रीडिंग की डिलीवरी को निलंबित किया जा सकता है

सेंसर की रीडिंग, सिर्फ़ दिखने वाले वेब पेज से ही ऐक्सेस किया जा सकता है. उदाहरण के लिए, जब उपयोगकर्ता असल में उस वेब पेज से इंटरैक्ट कर रहा हो. इसके अलावा, अगर उपयोगकर्ता का फ़ोकस क्रॉस-ऑरिजिन सबफ़्रेम पर फ़ोकस करने पर, पैरंट फ़्रेम को सेंसर डेटा नहीं दिया जाएगा. इससे पैरंट फ़्रेम को उपयोगकर्ता के इनपुट का पता नहीं चलता.

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

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

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

आप मदद कर सकते हैं!

सेंसर की खास जानकारी, उम्मीदवार के लिए सुझाव के तौर पर उपलब्ध होने के लिए तय लेवल पर पहुंच गई है. इसलिए, वेब और ब्राउज़र डेवलपर के सुझाव, राय या शिकायत हमारे लिए काफ़ी अहमियत रखते हैं. हमें बताएं कि किन सुविधाओं को जोड़ना अच्छा होगा या मौजूदा एपीआई में कुछ ऐसा है जिसमें आपको बदलाव करना है.

कृपया Chrome लागू करने से जुड़ी खास जानकारी के साथ-साथ bugs की शिकायत करें.

रिसॉर्स

स्वीकार हैं

इस लेख की समीक्षा जो मेडली और केएस बास्क ने की है. हीरो इमेज, जिसे मिस्को ने Wikiमीडिया कॉमंस के ज़रिए अपलोड किया है.