Wybierz odpowiedni interfejs API do komunikacji z wybranym urządzeniem sprzętowym.
Z tego przewodnika dowiesz się, jak wybrać najlepszy interfejs API do komunikacji z urządzeniem sprzętowym (np. kamerą internetową, mikrofonem itp.) w internecie. Przez „najlepszy” mam na myśli to, że zapewnia wszystko, czego potrzebujesz, przy minimalnym nakładzie pracy. Innymi słowy, masz świadomość ogólnego przypadku użycia, który chcesz rozwiązać (np. dostęp do filmu), ale nie wiesz, którego interfejsu API użyć lub zastanawiasz się, czy istnieje inny sposób rozwiązania tego problemu.
Jednym z problemów, z którymi często spotykam się w przypadku deweloperów stron internetowych, jest to, że od razu sięgają po interfejsy API niskiego poziomu, nie poznając wcześniej interfejsów API wyższego poziomu, które są łatwiejsze do wdrożenia i zapewniają lepszy interfejs użytkownika. Dlatego w tym przewodniku najpierw zalecamy interfejsy API wyższego poziomu, ale wspominamy też o interfejsach API niższego poziomu na wypadek, gdyby okazało się, że interfejs API wyższego poziomu nie spełnia Twoich potrzeb.
🕹 Odbieranie zdarzeń wejściowych z tego urządzenia
Spróbuj nasłuchiwać zdarzeń Keyboard i Pointer. Jeśli to urządzenie jest kontrolerem do gier, użyj interfejsu Gamepad API, aby dowiedzieć się, które przyciski są wciśnięte i które osie są przesunięte.
Jeśli żadna z tych opcji nie zadziała, 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 na tym urządzeniu
Aby uzyskać strumienie audio i wideo na żywo z tego urządzenia, użyj metody MediaDevices.getUserMedia(). Dowiedz się więcej o przechwytywaniu dźwięku i obrazu. Możesz też sterować przesuwaniem, pochylaniem i powiększaniem obrazu w kamerze oraz innymi ustawieniami aparatu, takimi jak jasność i kontrast, a nawet robić zdjęcia. Web Audio możesz używać do dodawania efektów do dźwięku, tworzenia wizualizacji dźwięku lub stosowania efektów przestrzennych (np. panoramowania). Dowiedz się też, jak profilować wydajność aplikacji Web Audio w Chrome.
Jeśli żadna z tych opcji nie zadziała, możesz użyć interfejsu API niskiego poziomu. Aby rozpocząć, przeczytaj artykuł Jak komunikować się z urządzeniem.
🖨 Drukowanie na tym urządzeniu
Użyj funkcji window.print(), aby otworzyć okno przeglądarki, które pozwala użytkownikowi 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 na niskim poziomie. Aby rozpocząć korzystanie z urządzenia, zapoznaj się z artykułem Jak komunikować się z urządzeniem.
🔐 Uwierzytelnienie na tym urządzeniu
Używaj WebAuthn do tworzenia silnych, poświadczonych i ograniczonych do źródła danych kluczy publicznych za pomocą tego urządzenia zabezpieczającego, aby uwierzytelniać użytkowników. Obsługuje uwierzytelnianie za pomocą Bluetootha, NFC i pełnomocnika U2F lub FIDO2 (zwanego też kluczem bezpieczeństwa) w ramach roamingu USB, a także uwierzytelnianie na platformie, które pozwala użytkownikom uwierzytelniać się za pomocą odcisków palców lub blokad ekranu. Zapoznaj się z artykułem Tworzenie pierwszej aplikacji WebAuthn.
Jeśli to urządzenie to inny rodzaj urządzenia zabezpieczającego (np. portfel kryptowalut), rozwiązaniem może być interfejs API na niskim poziomie. Aby rozpocząć, dowiedz się, jak komunikować się z urządzeniem.
🗄 Dostęp do plików na tym urządzeniu
Użyj interfejsu File System API, aby odczytywać i zapisywać zmiany bezpośrednio w plikach i folderach 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 z okna przeglądarki, a następnie odczytać ich zawartość.
Jeśli żadna z tych opcji nie zadziała, 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, aby odczytywać nieprzetworzone wartości czujników ruchu (np. akcelerometru lub żyroskopu) i czujników środowiskowych (np. czujnika jasności otoczenia lub magnetometru). Jeśli nie są dostępne, użyj zdarzeń DeviceMotion i DeviceOrientation, aby uzyskać dostęp do wbudowanego akcelerometru, żyroskopu i kompasu na urządzeniach mobilnych.
Jeśli to nie zadziała, rozwiązaniem może być interfejs API na niższym poziomie. Aby rozpocząć korzystanie z urządzenia, zapoznaj się z artykułem Dowiedz się, 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 to nie zadziała, rozwiązaniem może być interfejs API na niższym poziomie. Aby rozpocząć korzystanie z urządzenia, zapoznaj się z artykułem Jak komunikować się z urządzeniem.
🔋 Sprawdź baterię na tym urządzeniu
Użyj Battery API, aby uzyskać informacje o poziomie naładowania baterii hosta i otrzymać powiadomienie, gdy zmieni się poziom naładowania lub stan ładowania.
Jeśli to nie zadziała, rozwiązaniem może być interfejs API na niższym poziomie. Aby rozpocząć korzystanie z urządzenia, zapoznaj się z artykułem Jak komunikować się z urządzeniem.
📞 komunikować się z tym urządzeniem przez sieć,
W sieci lokalnej możesz użyć interfejsu API odtwarzania zdalnego, aby przesyłać dźwięk lub wideo na urządzenie zdalne (np. telewizor smart TV lub głośnik bezprzewodowy), albo użyć interfejsu Presentation API, aby renderować stronę internetową na drugim ekranie (np. dodatkowym wyświetlaczu połączonym kablem HDMI lub telewizorze smart TV połączonym bezprzewodowo).
Jeśli to urządzenie udostępnia serwer internetowy, użyj interfejsu Fetch API lub WebSockets, aby pobrać dane z tego urządzenia, korzystając z odpowiednich punktów końcowych. Mimo że gniazda TCP i UDP nie są dostępne w internecie, 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
Decyzja, którego interfejsu API na niskim poziomie należy użyć, zależy od rodzaju fizycznego połączenia z urządzeniem. Jeśli jest to urządzenie bezprzewodowe, sprawdź Web NFC, aby uzyskać informacje o krótkodystansowych połączeniach bezprzewodowych, oraz Web Bluetooth lub Web Serial, aby uzyskać informacje o urządzeniach bezprzewodowych w pobliżu.
Web NFC umożliwia odczytywanie i zapisywanie danych na urządzeniu, gdy znajduje się ono w pobliżu urządzenia użytkownika (zwykle w odległości 5–10 cm). Narzędzia takie jak NFC TagInfo przez NXP umożliwiają przeglądanie zawartości tego urządzenia w celu odwrotnego inżynierii.
Za pomocą Web Bluetooth połącz się z tym urządzeniem przez Bluetooth Low Energy. Komunikacja z urządzeniem powinna być łatwa, ponieważ korzysta ono ze standardowych usług Bluetooth GATT (takich jak usługa baterii), których działanie jest dobrze udokumentowane. W przeciwnym razie musisz znaleźć dokumentację sprzętową tego urządzenia lub przeprowadzić inżynierię wsteczną. Możesz 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 autorstwa Uri Shaked. Pamiętaj, że urządzenia Bluetooth mogą też używać protokołów HID lub szeregowych.Dzięki protokołowi szeregowemu przez Bluetooth możesz komunikować się z usługami RFCOMM na sparowanych urządzeniach Bluetooth Classic, takich jak standardowy profil portu szeregowego (SPP). W przypadku niestandardowych usług na podstawie RFCOMM musisz sprawdzić dokumentację dostawcy urządzenia, aby dowiedzieć się, jaki UUID należy przekazać do
requestPort()
.
Jeśli masz połączenie przewodowe, sprawdź te interfejsy API w podanej kolejności:
W przypadku WebHID zrozumienie raportów HID i opisów raportów w kolekcjach jest kluczowe dla 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 odwrotnej analizie. Aby wyodrębnić informacje o urządzeniach HID w formacie zrozumiałym dla człowieka, możesz też użyć aplikacji internetowej HID Explorer.
W przypadku Web Serial bez dokumentacji dostawcy dotyczącej tego urządzenia i obsługiwanych przez nie poleceń trudno jest to zrobić, ale można spróbować zgadnąć. Odwrotną inżynierię tego urządzenia można przeprowadzić, przechwytując surowy ruch USB za pomocą narzędzi takich jak Wireshark. Jeśli urządzenie korzysta z czytelnego dla człowieka protokołu, możesz też eksperymentować z nim za pomocą aplikacji internetowej Serial Terminal.
W przypadku interfejsu WebUSB bez przejrzystej dokumentacji na temat tego urządzenia i obsługiwanych przez nie poleceń USB trudno jest określić, które z nich są obsługiwane, ale można spróbować zgadnąć. Obejrzyj prezentację Exploring WebUSB and its exciting potential (Poznawanie WebUSB i jego ekscytujących możliwości) autorstwa Suz Hinton. Możesz też przeprowadzić inżynierię wstecz tego urządzenia, przechwytując ruch w formie surowych danych USB i sprawdzając opisy urządzeń USB za pomocą zewnętrznych narzędzi, 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 Grant, Thomasowi Steinerowi i Kayce Basques za sprawdzenie tego artykułu.
Zdjęcie autorstwa Darya Tryfanava z Unsplash.