※ 2020-02-24 最新状況を調べ直したのと、jins-meme-pluginの記述を削除しました
#はじめに
BLE(Bluetooth Low Energy)のプラグインの状況をまとめてみました。結論から言うと、cordova-plugin-ble-central/cordova-plugin-ble-peripheralとcordova-plugin-bluetoothleは使用上の差は殆どないので好きな方を使ってくださいになりますが、多少cordova-plugin-bluetoothleのほうが高機能なので、新しく触る方はcordova-plugin-bluetoothleをオススメします。
#前提知識(1)~BLEのP2PとBroadcast
BLE(Bluetooth Low Energy)には接続方式としてそもそも2種類(1対1通信、Broadcast)あります。ここでは1対1通信に特化して説明していきます。この2つの違いですが以下の記事が詳しいので参照してみてください。Broadcastはその名の通り暗号化せず内容を垂れ流すものですので、重要なデータを扱うデバイスではあまり使用されていないと思うので、ここでは1対1通信に特化して説明していきます。
Bluetooth Low Energy(BLE)/ iBeaconとは
#前提知識(2)~CentralとPeripheral
1対1通信の場合役割が明確に決まっており、BLE接続する機器は必ずどちらかがCentralになり、どちらかがPeripheralになります。通常スマホがCentralとなりデータを受け取ることが多いですが、スマホがPeripheralとなれるプラグインも公開されています。
#プラグイン
それではプラグインを3つ紹介させていただきます。
##cordova-plugin-ble-central
- 対応OS: iOS/Android
- 対応モード: centralのみ
- 概要: サンプルが揃っていて使いやすいプラグインです。私も個人的にRealtime Running Dashboard LiteというアプリでBLE心拍計を使用しましたが、とても簡単にインテグレーションできました。
##cordova-plugin-ble-peripheral
- 対応OS: iOS
- 対応モード: peripheralのみ
- 概要: 通常スマホをCentralにすることがほとんどなので、「なぜわざわざスマホをPeripheralにするんだ?」という疑問が湧くかもしれません。その問いに関して「やってみたいから」以外の明確な答えが出せないのですがw、例えば「XXのデバイスのフリをさせる」みたいなことをやろうとしたけどハードウェアは大抵configurableではないので、そういうものをエミュレーションする用途に使用したりします。
##cordova-plugin-bluetoothle
- 対応OS: iOS/Android/Windows10UWP
- 対応モード: CentralとPeripheralの両方
- 概要: かなり高機能なプラグインで、CentralとPeripheralの両方になることができます。
制約
##Central共通(cordova-plugin-ble-central/cordova-plugin-bluetoothle)
- Android: Bondingをしていないデバイスで接続済みのデバイスを取得することはできない(ネイティブ機能ではLEではないクラスで実施できます)
- iOS: MACアドレスは取れない(ネイティブ機能でも取れません)
##Peripheral共通(cordova-plugin-ble-peripheral/cordova-plugin-bluetoothle)
- Android: 独自のServiceUUIDを割り当ててアドバタイズすることはできない
#おまけ1~プラグインを使わないという選択肢(Web Bluetooth API)
- 対応ブラウザ: Can I use
- 対応モード: centralのみ
- 概要: まだ出始めたものなのでサポートブラウザは少ないのですが、ブラウザのみ・プラグイン不要で使う技が出始めています。Web技術の進歩は本当にすごいですね。
- 参考資料
Web Bluetooth
#おまけ2~Capacitorではどうなの?
IonicがCapacitorへの置き換えを進めている状況ですので、Capacitorでの状況も気になるところです。今の所、Capacitorで使えるプラグインは以下になります。
BluetoothLEClient
現在はWebとAndroidにのみ対応とのことです。