Dostęp do urządzeń w internecie

Wybierz odpowiedni interfejs API do komunikacji z wybranym urządzeniem.

François Beaufort
François Beaufort

Z tego przewodnika dowiesz się, jak wybrać najlepszy interfejs API do komunikacji z urządzeniem (np. kamerą internetową, mikrofonem itp.) w internecie. „Najlepszy” oznacza, że zapewnia wszystko, czego potrzebujesz, przy najmniejszym nakładzie pracy. Innymi słowy, znasz ogólny przypadek użycia, który chcesz rozwiązać (np. dostęp do filmu), ale nie wiesz, jakiego interfejsu API użyć, lub zastanawiasz się, czy istnieje inny sposób, aby to osiągnąć.

Częstym błędem popełnianym przez twórców stron internetowych jest przechodzenie do interfejsów API niskiego poziomu bez zapoznania się z interfejsami API wysokiego poziomu, które są łatwiejsze do wdrożenia i zapewniają lepsze wrażenia użytkownika. Dlatego w tym przewodniku najpierw zalecamy interfejsy API wyższego poziomu, ale wspominamy też o interfejsach API niższego poziomu, jeśli uznasz, że interfejs API wyższego poziomu nie spełnia Twoich potrzeb.

🕹 Odbieraj zdarzenia wejściowe z tego urządzenia

Spróbuj nasłuchiwać zdarzeń klawiatury i wskaźnika. Jeśli urządzenie jest kontrolerem do gier, użyj interfejsu Gamepad API, aby dowiedzieć się, które przyciski są naciskane i które osie są przesuwane.

Jeśli żadna z tych opcji nie jest dla Ciebie odpowiednia, rozwiązaniem może być interfejs API niskiego poziomu. Aby rozpocząć, przeczytaj artykuł Jak komunikować się z urządzeniem.

📸 Dostęp do dźwięku i obrazu z tego urządzenia

Użyj MediaDevices.getUserMedia(), aby uzyskać strumienie audio i wideo na żywo z tego urządzenia, i dowiedz się więcej o przechwytywaniu dźwięku i obrazu. Możesz też sterować przesuwaniem, pochylaniem i powiększaniem kamery oraz innymi ustawieniami, takimi jak jasność i kontrast, a nawet robić zdjęcia. Web Audio można używać do dodawania efektów do dźwięku, tworzenia wizualizacji dźwiękowych lub stosowania efektów przestrzennych (takich jak panoramowanie). Dowiedz się też, jak profilować wydajność aplikacji Web Audio w Chrome.

Jeśli żadna z tych opcji nie jest dla Ciebie odpowiednia, rozwiązaniem może być interfejs API niskiego poziomu. Aby rozpocząć, przeczytaj artykuł Jak komunikować się z urządzeniem.

🖨 Drukuj na tym urządzeniu

Użyj window.print(), aby otworzyć okno przeglądarki, w którym użytkownik może wybrać to urządzenie jako miejsce docelowe do wydrukowania bieżącego dokumentu.

Jeśli to nie zadziała, rozwiązaniem może być interfejs API niskiego poziomu. Aby rozpocząć, przeczytaj artykuł Jak komunikować się z urządzeniem.

🔐 Uwierzytelnianie za pomocą tego urządzenia

Użyj WebAuthn, aby utworzyć silne, atestowane i ograniczone do źródła dane logowania z kluczem publicznym za pomocą tego sprzętowego urządzenia zabezpieczającego do uwierzytelniania użytkowników. Obsługuje on korzystanie z uwierzytelniaczy U2F lub FIDO2 przez Bluetooth, NFC i USB (nazywanych też kluczami bezpieczeństwa) oraz uwierzytelniacza platformy, który umożliwia użytkownikom uwierzytelnianie za pomocą odcisków palców lub blokad ekranu. Zapoznaj się z artykułem Tworzenie pierwszej aplikacji WebAuthn.

Jeśli to urządzenie jest innym typem sprzętowego urządzenia zabezpieczającego (np. portfelem kryptowalutowym), rozwiązaniem może być interfejs API niskiego poziomu. Aby rozpocząć, dowiedz się, jak komunikować się z urządzeniem.

🗄 Dostęp do plików na tym urządzeniu

Używaj interfejsu File System Access API do odczytywania i zapisywania zmian bezpośrednio w plikach i folderach w systemie plików na urządzeniu użytkownika. Jeśli nie jest dostępny, użyj interfejsu File API, aby poprosić użytkownika o wybranie plików lokalnych w oknie przeglądarki, a następnie odczytaj zawartość tych plików.

Jeśli żadna z tych opcji nie jest dla Ciebie odpowiednia, rozwiązaniem może być interfejs API niskiego poziomu. Aby rozpocząć, przeczytaj artykuł Jak komunikować się z urządzeniem.

🧲 Dostęp do czujników na tym urządzeniu

Używaj interfejsu Generic Sensor API do odczytywania nieprzetworzonych wartości z czujników ruchu (np. akcelerometru lub żyroskopu) i czujników środowiskowych (np. jasności otoczenia, magnetometru). Jeśli nie jest dostępny, użyj zdarzeń DeviceMotion i DeviceOrientation, aby uzyskać dostęp do wbudowanego akcelerometru, żyroskopu i kompasu w urządzeniach mobilnych.

Jeśli nie działa, rozwiązaniem może być interfejs API niskiego poziomu. Aby rozpocząć, przeczytaj artykuł Jak komunikować się z urządzeniem.

🛰️ Dostęp do współrzędnych GPS na tym urządzeniu

Użyj interfejsu Geolocation API, aby uzyskać szerokość i długość geograficzną bieżącej pozycji użytkownika na tym urządzeniu.

Jeśli nie działa, rozwiązaniem może być interfejs API niskiego poziomu. Aby rozpocząć, przeczytaj artykuł Jak komunikować się z urządzeniem.

🔋 Sprawdź baterię na tym urządzeniu

Użyj interfejsu Battery API, aby uzyskać informacje o poziomie naładowania baterii i otrzymywać powiadomienia o zmianie poziomu baterii lub stanu ładowania.

Jeśli nie działa, rozwiązaniem może być interfejs API niskiego poziomu. Aby rozpocząć, przeczytaj artykuł Jak komunikować się z urządzeniem.

📞 Komunikacja z tym urządzeniem przez sieć

W sieci lokalnej użyj interfejsu Remote Playback API, aby przesyłać dźwięk lub obraz na urządzenie do zdalnego odtwarzania (np. telewizor smart TV lub głośnik bezprzewodowy), albo interfejsu Presentation API, aby renderować stronę internetową na drugim ekranie (np. dodatkowym wyświetlaczu podłączonym kablem HDMI lub telewizorze smart TV połączonym bezprzewodowo).

Jeśli to urządzenie udostępnia serwer WWW, użyj interfejsu Fetch API lub WebSockets, aby pobrać z niego dane, odpytując odpowiednie punkty końcowe. Gniazda TCP i UDP nie są dostępne w internecie, ale możesz użyć WebTransport do obsługi interaktywnych, dwukierunkowych i multipleksowanych połączeń sieciowych. Pamiętaj, że WebRTC może też służyć do przesyłania danych w czasie rzeczywistym do innych przeglądarek za pomocą protokołu peer-to-peer.

🧱 Jak komunikować się z urządzeniem

Wybór interfejsu API niskiego poziomu zależy od rodzaju fizycznego połączenia z urządzeniem. Jeśli jest to połączenie bezprzewodowe, sprawdź Web NFC w przypadku połączeń bezprzewodowych o bardzo krótkim zasięgu oraz Web Bluetooth lub Web Serial w przypadku urządzeń bezprzewodowych w pobliżu.

  • Web NFC umożliwia odczytywanie i zapisywanie danych na tym urządzeniu, gdy znajduje się ono w bliskości urządzenia użytkownika (zwykle 5–10 cm, 2–4 cale). Narzędzia takie jak NFC TagInfo by NXP umożliwiają przeglądanie zawartości tego urządzenia na potrzeby analizowania wstecznego.

  • Dzięki Web Bluetooth możesz połączyć się z tym urządzeniem przez Bluetooth Low Energy. Komunikacja z nim powinna być dość łatwa, jeśli korzysta on ze standardowych usług Bluetooth GATT (takich jak usługa baterii), ponieważ ich działanie jest dobrze udokumentowane. Jeśli nie, musisz znaleźć dokumentację sprzętu dla tego urządzenia lub przeprowadzić analizę wsteczną. Możesz w tym celu użyć narzędzi zewnętrznych, takich jak nRF Connect for Mobile, oraz wbudowanych narzędzi przeglądarki, takich jak strona wewnętrzna about://bluetooth-internals w przeglądarkach opartych na Chromium. Zapoznaj się z artykułem Reverse-Engineering a Bluetooth Lightbulb (Analizowanie wsteczne żarówki Bluetooth) autorstwa Uriego Shakeda. Pamiętaj, że urządzenia Bluetooth mogą też obsługiwać protokoły HID lub szeregowe.

  • Szeregowa transmisja danych przez Bluetooth umożliwia komunikację z usługami RFCOMM na sparowanych urządzeniach z klasycznym Bluetooth, takimi jak standardowy profil portu szeregowego (SPP). W przypadku niestandardowych usług opartych na RFCOMM musisz jednak sprawdzić w dokumentacji dostawcy urządzenia identyfikator UUID usługi, który chcesz przekazać do metody requestPort().

Jeśli używasz połączenia przewodowego, sprawdź te interfejsy API w tej kolejności:

  1. W przypadku WebHID zrozumienie raportów HID i deskryptorów raportów za pomocą kolekcji jest kluczem do zrozumienia tego urządzenia. Może to być trudne bez dokumentacji dostawcy dotyczącej tego urządzenia. Narzędzia takie jak Wireshark mogą pomóc w analizowaniu wstecznym. Możesz też użyć aplikacji internetowej HID Explorer, aby zrzucić informacje o urządzeniach HID do formatu zrozumiałego dla człowieka.

  2. W przypadku Web Serial, bez dokumentacji dostawcy dotyczącej tego urządzenia i obsługiwanych przez nie poleceń, jest to trudne, ale możliwe, jeśli będziemy mieć szczęście. Analizę wsteczną tego urządzenia można przeprowadzić, przechwytując nieprzetworzony ruch USB za pomocą narzędzi takich jak Wireshark. Możesz też użyć aplikacji internetowej Serial Terminal, aby poeksperymentować z tym urządzeniem, jeśli używa ono protokołu zrozumiałego dla człowieka.

  3. W przypadku WebUSB, bez jasnej dokumentacji dotyczącej tego urządzenia i obsługiwanych przez nie poleceń USB, jest to trudne, ale możliwe, jeśli będziemy mieli szczęście. Obejrzyj film Suz Hinton Exploring WebUSB and its exciting potential (Poznaj WebUSB i jego ekscytujące możliwości). Możesz też przeprowadzić analizę wsteczną tego urządzenia, przechwytując nieprzetworzony ruch USB i sprawdzając deskryptory USB za pomocą narzędzi zewnętrznych, takich jak Wireshark, oraz wbudowanych narzędzi przeglądarki, takich jak strona wewnętrzna about://usb-internals w przeglądarkach opartych na Chromium.

Podziękowania

Dziękujemy Reilly'emu Grantowi, Thomasowi Steinerowi i Kayce Basques za sprawdzenie tego artykułu.