iOS/AndroidでiBeaconを扱うTitaniumモジュールについて調べてみた
Titaniumで、iOSとAndroid両方でiBeaconを扱うアプリを作ってみようかと思い、それらしいモジュールを探してみました。
さらに、どうせTitaniumでやるのであれば、なるべく処理を共通化できると良いなということで、まずはそれぞれで提供されているAPIを比較してみることに。
対象モジュール
今回使おうとしているのは以下のモジュールです。
プラットフォーム | モジュール | バージョン | オリジナル |
---|---|---|---|
iOS | Sensimity/TiBeacons | 0.11.1 | jbeuckm/TiBeacons |
Android | Sensimity/android-altbeacon-module | 1.4.0 | dwk5123/android-altbeacon-module |
探していたところ、どちらも Sensimity というBeacon Management Systemのサービスを提供している会社の GitHub で公開されているものに行き着きました。
どちらのモジュールもオリジナルは別の人が開発したものなのですが、それらをフォークして改善が加わっているバージョンが公開されていて、さらにBeacon Managementしている会社のものであれば信頼性も高いのではということで、これを使ってみることにしました。
APIを比較
それぞれのモジュールに用意されているAPIを比較。
主要なAPIは同じ構成になっているので、挙動の差異が少なければ、共通化できそう。
それ以外は、直接iBeaconを扱えないAndroid用モジュールに、そのあたりをカバーするためのAPIが用意されている感じ。
API | TiBeacons | android-altbeacon-module | 関連イベント |
---|---|---|---|
アドバタイズ開始 | TiBeacons.startAdvertisingBeacon() | Altbeacon.startBeaconAdvertisement() ※1 | advertisingStatus |
アドバタイズ停止 | TiBeacons.stopAdvertisingBeacon() | Altbeacon.stopBeaconAdvertisement() ※1 | - |
モニタリング開始 | TiBeacons.startMonitoringForRegion() | Altbeacon.startMonitoringForRegion() | enteredRegion, exitedRegion, determinedRegionState |
全てのモニタリング停止 | TiBeacons.stopMonitoringAllRegions() | Altbeacon.stopMonitoringAllRegions() | - |
ビーコンとの距離測定 | TiBeacons.startRangingForBeacons() | Altbeacon.startRangingForBeacons() (Altbeacon.startRangingForRegion()) |
beaconRanges, beaconProximity |
全ての距離測定を停止 | TiBeacons.stopRangingForAllBeacons() | Altbeacon.stopRangingForAllBeacons() | - |
BLEサポート有無 | TiBeacons.isBLESupported() | Altbeacon.isBLESupported() | - |
BLE有効無効 | - | Altbeacon.checkAvailability() | - |
Bluetoothの状態確認 | TiBeacons.requestBluetoothStatus() | - | bluetoothStatus |
Beaconサービスへ接続 | - | Altbeacon.bindBeaconService() | - |
Beaconサービスへの接続を解除 | - | Altbeacon.unbindBeaconService() | - |
Beaconサービスとの接続状態確認 | - | Altbeacon.beaconServiceIsBound() | - |
バックグラウンド動作設定 | - | Altbeacon.setBackgroundMode() | - |
ビーコンレイアウト追加 | - | Altbeacon.addBeaconLayout() | - |
ビーコンレイアウト削除 | - | Altbeacon.removeBeaconLayout() | - |
距離測定間隔設定 | - | Altbeacon.setProximityBounds() | - |
自動測定を有効化 | ※2 | Altbeacon.enableAutoRanging() | - |
自動測定を無効化 | ※2 | Altbeacon.disableAutoRanging() | - |
自動測定の有効無効 | - | Altbeacon.setAutoRange(boolean autoRange) | - |
サービス内動作設定 | - | Altbeacon.setRunInService(boolean runInService) | - |
サービス内動作確認 | - | Altbeacon.isRunInService() | - |
測定間隔の設定 | - | Altbeacon.setScanPeriods(scanPeriods) | - |
補足
- ※1 Altbeacon.start(stop)BeaconAdvertisement() は完全にテストされていないもよう
- ※2 TiBeacons.enable(disable)AutoRanging() はあったが0.8で廃止されたもよう(APIだけ残っている)
イベント
iBeaconを扱う際に発生するイベントは以下のとおり。
イベント名は双方同じものを使っているようなので、この点も挙動の差異次第で共通化できそう。
イベント | 内容 |
---|---|
advertisingStatus | アドバタイズ状態 |
bluetoothStatus | iOSのみ。Bluetooth状態 |
enteredRegion | 領域侵入 |
exitedRegion | 領域退出 |
determinedRegionState | 領域状態を測定 |
beaconRanges | 領域検出 |
beaconProximity | ビーコンとの距離測定結果 |
changeAuthorizationStatus | iOSのみ。パーミッション状態の変化 |
まとめ
当然細かい挙動は違ってくるのだと思いますが、API構成などはほぼ同じようなので、基本的な流れは共通化できそうな印象。
次は実際に組み込んでみて検証してみる予定。
- 作者: 上原昭宏
- 発売日: 2014/03/25
- メディア: Kindle版
- この商品を含むブログを見る