دسترسی به دستگاه‌های سخت‌افزاری در وب

API مناسب را برای برقراری ارتباط با دستگاه سخت‌افزاری موردنظرتان انتخاب کنید.

François Beaufort
François Beaufort

هدف این راهنما کمک به شما در انتخاب بهترین API برای برقراری ارتباط با دستگاه سخت‌افزاری (مثل وب‌بین، میکروفون، و غیره) در وب است. منظورم از «بهترین» این است که هر چیزی را که نیاز دارید با کمترین میزان کار به شما می‌دهد. به‌عبارت دیگر، مورد استفاده کلی را که می‌خواهید حل کنید می‌دانید (مثلاً دسترسی به ویدیو) اما نمی‌دانید از کدام میانای برنامه‌سازی کاربردی استفاده کنید یا می‌خواهید بدانید آیا راه دیگری برای دستیابی به آن وجود دارد یا نه.

One problem that I commonly see web developers fall into is jumping into low-level APIs without learning about the higher-level APIs that are easier to implement and provide a better UX. بنابراین، این راهنما ابتدا توصیه می‌کند میاناهای برنامه‌سازی کاربردی سطح بالاتر را در اولویت قرار دهید، اما به میاناهای برنامه‌سازی کاربردی سطح پایین‌تر نیز اشاره می‌کند تا درصورتی‌که تشخیص دادید میانای برنامه‌سازی کاربردی سطح بالاتر نیازهای شما را برآورده نمی‌کند، از آن‌ها استفاده کنید.

🕹 دریافت رویدادهای ورودی از این دستگاه

سعی کنید به رویدادهای صفحه‌کلید و اشاره‌گر گوش دهید. اگر این دستگاه کنترل‌کننده بازی است، از Gamepad API استفاده کنید تا بدانید کدام دکمه‌ها فشار داده شده‌اند و کدام محورها حرکت کرده‌اند.

اگر هیچ‌کدام از این گزینه‌ها برای شما کار نمی‌کند، یک API سطح پایین ممکن است راه‌حل باشد. برای شروع سفرتان، با نحوه برقراری ارتباط با دستگاهتان آشنا شوید.

📸 دسترسی به صدا و ویدیو از این دستگاه

از MediaDevices.getUserMedia() برای دریافت جاری‌سازی‌های زنده صوتی و ویدیویی از این دستگاه استفاده کنید و درباره ضبط صدا و ویدیو بیشتر بدانید. همچنین می‌توانید حرکت، کج کردن، و بزرگ‌نمایی دوربین و سایر تنظیمات دوربین مانند روشنایی و کنتراست را کنترل کنید و حتی تصاویر ثابت بگیرید. از Web Audio می‌توان برای افزودن جلوه به صدا، ایجاد تجسم‌های صوتی، یا اعمال جلوه‌های فضایی (مانند حرکت افقی) استفاده کرد. نحوه نمایه کردن عملکرد برنامه‌های Web Audio را نیز در Chrome بررسی کنید.

اگر هیچ‌کدام از این گزینه‌ها برای شما کار نمی‌کند، یک API سطح پایین ممکن است راه‌حل باشد. برای شروع سفرتان، با نحوه برقراری ارتباط با دستگاهتان آشنا شوید.

🖨 چاپ در این دستگاه

از window.print() برای باز کردن کادر گفتگوی مرورگر استفاده کنید تا کاربر بتواند این دستگاه را به‌عنوان مقصد چاپ سند فعلی انتخاب کند.

اگر این روش برای شما کارساز نبود، یک API سطح پایین ممکن است راه‌حل باشد. برای شروع سفرتان، با نحوه برقراری ارتباط با دستگاهتان آشنا شوید.

🔐 اصالت‌سنجی با این دستگاه

از WebAuthn برای ایجاد اعتبارنامه کلید عمومی قوی، گواهی‌شده، و با دامنه مبدأ با این دستگاه امنیتی سخت‌افزاری برای اصالت‌سنجی کاربران استفاده کنید. این API از استفاده از اصالت‌سنج‌های U2F یا FIDO2 با قابلیت رومینگ USB، NFC، و بلوتوث (که به‌عنوان کلیدهای امنیتی نیز شناخته می‌شوند) و همچنین اصالت‌سنج پلاتفرم پشتیبانی می‌کند که به کاربران اجازه می‌دهد با اثر انگشت یا قفل صفحه اصالت‌سنجی کنند. ساختن اولین برنامه WebAuthn را بررسی کنید.

اگر این دستگاه نوع دیگری از دستگاه امنیتی سخت‌افزاری است (مثلاً کیف پول رمزارز)، ای‌پی‌آی سطح پایین می‌تواند راه‌حل باشد. برای شروع سفرتان، با نحوه برقراری ارتباط با دستگاهتان آشنا شوید.

🗄 دسترسی به فایل‌های موجود در این دستگاه

از File System Access API برای خواندن و ذخیره کردن مستقیم تغییرات در فایل‌ها و پوشه‌های دستگاه کاربر استفاده کنید. اگر دردسترس نیست، از File API استفاده کنید تا از کاربر بخواهید فایل‌های محلی را از کادر گفتگوی مرورگر انتخاب کند و سپس محتوای آن فایل‌ها را بخواند.

اگر هیچ‌کدام از این گزینه‌ها برای شما کار نمی‌کند، یک API سطح پایین ممکن است راه‌حل باشد. برای شروع سفرتان، با نحوه برقراری ارتباط با دستگاهتان آشنا شوید.

🧲 دسترسی به حسگرهای این دستگاه

از Generic Sensor API برای خواندن مقادیر خام حسگر از حسگرهای حرکتی (مثل شتاب‌سنج یا ژیروسکوپ) و حسگرهای محیطی (مثل نور محیط، مغناطیس‌سنج) استفاده کنید. اگر دردسترس نیست، از رویدادهای DeviceMotion و DeviceOrientation استفاده کنید تا به شتاب‌سنج، ژیروسکوپ، و قطب‌نمای داخلی دستگاه‌های همراه دسترسی پیدا کنید.

اگر این روش برای شما کارساز نبود، یک API سطح پایین ممکن است راه‌حل باشد. برای شروع سفرتان، با نحوه برقراری ارتباط با دستگاهتان آشنا شوید.

🛰 دسترسی به مختصات GPS در این دستگاه

از Geolocation API برای دریافت طول و عرض جغرافیایی موقعیت فعلی کاربر در این دستگاه استفاده کنید.

اگر این روش برای شما کارساز نبود، یک API سطح پایین ممکن است راه‌حل باشد. برای شروع سفرتان، با نحوه برقراری ارتباط با دستگاهتان آشنا شوید.

🔋 باتری این دستگاه را بررسی کنید

از Battery API برای دریافت اطلاعات میزبان درباره سطح شارژ باتری و مطلع شدن از تغییر سطح باتری یا وضعیت شارژ استفاده کنید.

اگر این روش برای شما کارساز نبود، یک API سطح پایین ممکن است راه‌حل باشد. برای شروع سفرتان، با نحوه برقراری ارتباط با دستگاهتان آشنا شوید.

📞 برقراری ارتباط با این دستگاه ازطریق شبکه

در شبکه محلی، از Remote Playback API برای همه‌فرستی صدا و/یا ویدیو در دستگاه بازپخش ازراه‌دور (مثلاً تلویزیون هوشمند یا بلندگوی بی‌سیم) استفاده کنید یا از Presentation API برای ارائه صفحه وب در صفحه‌نمایش دوم (مثلاً نمایشگر ثانویه متصل با کابل HDMI یا تلویزیون هوشمند متصل به‌صورت بی‌سیم) استفاده کنید.

اگر این دستگاه سرور وب را درمعرض دید قرار می‌دهد، از Fetch API و/یا WebSockets استفاده کنید تا با زدن نقاط پایانی مناسب، برخی‌از داده‌ها را از این دستگاه واکشی کنید. درحالی‌که سوکت‌های TCP و UDP در وب دردسترس نیستند، WebTransport را برای مدیریت اتصالات شبکه تعاملی، دوطرفه، و چندگانه بررسی کنید. توجه داشته باشید که WebRTC همچنین می‌تواند برای تبادل داده‌ها به‌صورت هم‌زمان با مرورگرهای دیگر بااستفاده از پروتکل همتا به همتا استفاده شود.

🧱 با نحوه برقراری ارتباط با دستگاهتان آشنا شوید

تصمیم‌گیری درباره اینکه از کدام میانای برنامه‌سازی کاربردی سطح پایین باید استفاده کنید براساس ماهیت اتصال فیزیکی شما به دستگاه تعیین می‌شود. اگر بی‌سیم است، Web NFC را برای اتصالات بی‌سیم با برد بسیار کوتاه و Web Bluetooth یا Web Serial را برای دستگاه‌های بی‌سیم اطراف بررسی کنید.

  • با NFC وب، وقتی این دستگاه در مجاورت دستگاه کاربر قرار دارد (معمولاً ۵ تا ۱۰ سانتی‌متر، ۲ تا ۴ اینچ)، در آن بخوانید و بنویسید. ابزارهایی مانند NFC TagInfo by NXP به شما امکان می‌دهند محتوای این دستگاه را برای اهداف مهندسی معکوس مرور کنید.

  • با بلوتوث وب، ازطریق اتصال «بلوتوث کم‌مصرف» به این دستگاه متصل شوید. اگر دستگاه از سرویس‌های استانداردشده Bluetooth GATT (مثل سرویس باتری) استفاده کند، برقراری ارتباط با آن باید بسیار آسان باشد زیرا رفتار آن‌ها به‌خوبی مستند شده است. اگر نه، در این مرحله، یا باید اسناد سخت‌افزاری برای این دستگاه پیدا کنید یا آن را مهندسی معکوس کنید. برای این کار می‌توانید از ابزارهای خارجی مانند nRF Connect for Mobile و ابزارهای مرورگر داخلی مانند صفحه داخلی about://bluetooth-internals در مرورگرهای مبتنی بر Chromium استفاده کنید. مهندسی معکوس لامپ بلوتوث از Uri Shaked را بررسی کنید. توجه داشته باشید که دستگاه‌های بلوتوث ممکن است از پروتکل‌های HID یا سریال نیز استفاده کنند.

  • با سریال ازطریق بلوتوث، با سرویس‌های RFCOMM در دستگاه‌های «بلوتوث کلاسیک» جفت‌شده مثل «نمایه درگاه سریال» (SPP) استانداردشده ارتباط برقرار کنید. اما برای سرویس‌های سفارشی مبتنی بر RFCOMM، باید به مستندات فروشنده دستگاه برای UUID سرویس مراجعه کنید تا به requestPort() ارسال شود.

اگر سیمی است، این میاناهای برنامه‌سازی کاربردی را به‌ترتیب زیر بررسی کنید:

  1. با WebHID، درک گزارش‌های HID و توصیف‌کننده‌های گزارش ازطریق مجموعه‌ها کلید درک شما از این دستگاه است. این کار بدون اسناد فروشنده برای این دستگاه می‌تواند چالش‌برانگیز باشد. ابزارهایی مانند Wireshark می‌توانند به شما در مهندسی معکوس آن کمک کنند. همچنین می‌توانید از برنامه وب HID Explorer برای انتقال اطلاعات دستگاه‌های HID به قالبی قابل‌خواندن برای انسان استفاده کنید.

  2. با Web Serial، بدون اسناد فروشنده برای این دستگاه و اینکه این دستگاه از چه فرمان‌هایی پشتیبانی می‌کند، این کار دشوار است اما با حدس‌های شانسی همچنان امکان‌پذیر است. مهندسی معکوس این دستگاه را می‌توان با ضبط ترافیک خام USB با ابزارهایی مانند Wireshark انجام داد. اگر این دستگاه از پروتکل قابل‌خواندن برای انسان استفاده می‌کند، می‌توانید از برنامه وب Serial Terminal نیز برای آزمایش آن استفاده کنید.

  3. با WebUSB، بدون مستندات واضح برای این دستگاه و اینکه این دستگاه از چه فرمان‌های USB پشتیبانی می‌کند، این کار دشوار است اما همچنان با حدس‌های شانسی امکان‌پذیر است. کاوش WebUSB و پتانسیل هیجان‌انگیز آن از سوز هینتون را تماشا کنید. همچنین می‌توانید با ضبط ترافیک USB خام و بررسی توصیف‌کننده‌های USB با ابزارهای خارجی مانند Wireshark و ابزارهای مرورگر داخلی مانند صفحه داخلی about://usb-internals در مرورگرهای مبتنی بر Chromium، این دستگاه را مهندسی معکوس کنید.

تصدیق‌نامه‌ها

از Reilly Grant، Thomas Steiner، و Kayce Basques برای بازبینی این مقاله سپاس‌گزاریم.