LoginSignup
13
10

More than 5 years have passed since last update.

Chrome OSにおけるWeb Bluetoothの実装状況

Last updated at Posted at 2015-11-25

はじめに

Web Bluetoothで遊んでいてChrome OSでうまく動作しなかったのでcrbug.comの関連バグに書き込んだりしてたらFrançoisがハングアウトで色々と教えてくれた。日本語の情報もまだあまりないと思うので、せっかくだからメモとして共有します。

注意:あくまで個人の趣味で調べた情報です。間違った点、曖昧な点も含まれることをご了承ください。

chrome://flags/#enable-web-bluetooth

利用の際にはフラグをオンにする必要があります。このフラグを立てていると最初にブラウザを起動した際に、危険なフラグが有効になっている旨を伝えるメッセージが表示されるようになります。これは後述のChooser UIが実装されていない事に起因するものかと思われます。ウェブサイト上でボタンクリック等のユーザアクションを起こした際、一切の通知なしにBLEデバイスにアクセスが発生するリスクがありますので、その点を理解した上で利用してください。

requestDevice()

Chrome 47 (Beta)

このバージョンではnameとnamePrefixが使えないようです。services: [UUID]形式のフィルタでマッチさせる必要があります。この際の注意点ですが(もしかしたら、デバイス依存の話かもしれないのですが)Chrome OSレベルでデバイスをペアリングさせておく必要があります。シェルフのBluetoothメニューにBLEデバイスも列挙されているはずなので、事前にクリックしてペアリングした状態でAPIを呼ぶ必要があります。

2015/12/2 補足: konashi2.0.0がアドバタイズしているデータがサービスのUUIDを含んでいないのが理由でペアリングが必要となっています。konashi.jsからOTA Updateを使って2015/10/30に提供されたkonashi2.1.3-rc3にアップデートする事でサービスのUUIDがアドバタイズされるようです。

Chrome 48 (Dev)

nameとnamePrefixでマッチできるようになっています。name、namePrefixで探す場合に限ってはOSレベルでのペアリングは不要です。

OSレベルでのペアリングはリクエストが返してくるBluetoothDeviceオブジェクトにも影響しているようで、ペアリングしていればBluetoothDevice.uuidsにデバイスが提供しているサービスの配列が格納されます。ペアリングしていなければ配列は空。この違いもあってUUIDでのマッチングはペアリング必須になっている気がします。

2015/12/2 補足: この時点で返ってくるBluetoothDeviceオブジェクトが持つ情報は、アドバタイズされている情報に依存しているようです。

共通の問題

Chooser UIと呼ばれる、requestDevice()時に現れるデバイス選択UIが実装されていません。フィルタにかかるデバイスが唯一の時にはUIなしで該当デバイスの情報が帰ってきます。複数のデバイスがマッチする状況では試していません。セキュリティ的には穴がある状況ですが、色々と実験コードを書くにはむしろ好都合というか、テスト時の工程が減るので楽です。

Notifications

Chrome 48以降に限定ですがnotificationsが動作しているようです。AndroidではAPIは見えているけど動作はしない(イベントが一切通知されない)状況なので、この点に関してはChrome OSが一番実装が進んでいます。

まとめ

以上、簡単ですが利用の際における注意点のまとめでした。オフィシャルな情報はGitHub上にスペックと一緒にまとめられていますので、英語ですが参考になるかと思います。

13
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
10