ibeacon を利用したサービス開発のポイント
DESCRIPTION
iBeacon を利用したサービス開発のポイントTRANSCRIPT
iBeacon を利用したサービス開発のポイント
GMO インターネット次世代システム研究室
松井、佐藤、折田、塚元、宮尾
アジェンダ[iBeacon のキホン ]1. iBeacon とは2.基本機能3.利用可能端末4. NFC との比較5.サービス事例
[ 技術的なポイント ]1. iOS, Android アプリ実装の違い2.消費電力3.セキュリティ
1. iBeacon とは• Apple の商標• Location and Proximity Detection Technology
「位置と近接検出技術」
1. iBeacon とはBluetooth Low Ene r gy ( BLE )を利用してシグナルを発信する機器
BLE とは• 近距離無線通信技術 Bluetoothの拡張仕様• 極低電力で通信が可能なもの• 2010 年 7 月に発表された Bluetooth 4.0 規格• 免許なく使える 2.4GHz帯(ISM バンド ) の電波を
用い、最大 1Mbpsの通信が可能。• 対応チップは従来の 1/3 程度の電力で動作する
ことができ• ボタン電池一つで数年稼働することができると
されている。
1. iBeacon とはシグナルはスマホで受信可能( Android 、
iOS )
1. iBeacon とはシグナルが 50m 先まで届く。スマホで距離を観測できる。
結論
• BLE 利用。• 広範囲に電波が届く。• スマホで受信可能。
アジェンダ[iBeacon のキホン ]1. iBeacon とは2.基本機能3.利用可能端末4. NFC との比較5.サービス事例
[ 技術的なポイント ]1. iOS, Android アプリ実装の違い2.消費電力3.セキュリティ
2.基本機能A .構成・ブロードキャスター・オブザーバー型・セントラル・ペリフェラル型
B .機能・ Beacon から送られてくる信号・スマホができること
2.基本機能オブザーバー(スマホ)ブロードキャスター
( Beacon 端末)発信のみ
受信のみ
2.基本機能
ペリフェラル セントラル読み書き(今回は対象外)
2.基本機能
1. UUID2. Major3. Minor4. RSSI
Beacon から送られる信号
Beacon から送られる信号UUID 128 ビット識別子 12345678-A1B3-B2C4-C3D5-EF567GH942E2
Major 16 ビットの符号なし整数。 0 ~ 65535
Minor 16 ビットの符号なし整数。 0 ~ 65535
使い道UUID 128 ビット識別子 サービスで 1 個
Major 16 ビットの符号なし整数。 ショップなどの単位で 1 個
Minor 16 ビットの符号なし整数。 売り場、ビルの階層、支店などの小概念で
1 個
RSSI
• Received Signal Strength Indicator• 受信信号強度• マイナスの値• 小さいほど近い状態を表す
Beacon を受信する機器ができること(スマホ)
1.リージョン観測
2.レンジング観測
リージョン観測
•入った•出た
リージョン観測
入った!!!
出た!!!
レンジング観測RSSI 電波強度からおおよその距離を図る(調整可能)
Immediate (すごく近い) 50cm以内Near (誓い) 50cm~6mFar (遠い) 6m~20mUnknown (不明) ???
レンジング観測
近 遠
結論• ブロードキャスターオブザーバー構成で サービス開発。• UUID 、 Major 、 Minor でビーコンを認識
できる。• 領域出入 + 距離 を利用できる。
アジェンダ[iBeacon のキホン ]1. iBeacon とは2.基本機能3.利用可能端末4. NFC との比較5.サービス事例
[ 技術的なポイント ]1. iOS, Android アプリ実装の違い2.消費電力3.セキュリティ
3.利用可能端末
A . iBeacon 端末B . iOS , Android
iBeacon 端末• StickNFind 社
iBeacon 端末• Aplix 社 M y Beacon
iBeacon 端末• Estimote 社
iBeacon 端末• shopbeacon
Estimote StickNFind Aplix shopbeacon
価格 3500 円 3500 円 1000 円 4000 円技適 ○ ○ ○ ×
電池 2 年 1 年 1 年 5 年その他 デザイ
ンがおしゃれ
サイズが小さい。探し物アプリを販売。
安い。セキュリティ機能が強い。
米国の百貨店 Macy’s 実績アリ
技適マーク(ぎてきまーく)とは
⇒ 技適マークが付いていない無線機は、「免許を受けられない/違法になる」恐れがありますので無線機を購入・使用する際は十分ご注意下さい。
技術基準適合証明と技術基準適合認定のいずれかあるいは両者の認証がなされていることを表示するマークで、総務省令に定められたものである。
3.利用可能端末スマホ
[iOS]Ver.7 以降• iPhone 4s ~• iPad 第 3 世代~( mini,Air は可能)
[Android]Ver.4.3 以降
Bluetooth の大分類• Bluetooth Smart : BLE のみ• Bluetooth Smart Ready : BLE+クラシック• Bluetooth :クラシックのみ
Beacon の誤解• 対応端末でも Bluetooth OFF では使えない。 iPhone では
位置情報も必要
結論
•現状は Aplix 社のビーコンがよい。• iOS 7 , Android 4.3
アジェンダ[iBeacon のキホン ]1. iBeacon とは2.基本機能3.利用可能端末4. NFC との比較5.サービス事例
[ 技術的なポイント ]1. iOS, Android アプリ実装の違い2.消費電力3.セキュリティ
NFC とは?• 近距離無線通信技術
• 「かざす」ことで通信可能
• 低速なデータ通信
NFC と iBeacon の比較NFC iBeacon
最大距離 20cm 50m
検知 タッチ(能動的)
Bluetooth ON でPUSH 受信(受動的)
対応 iOS 8Android 2.3
iOS 7Android 4.3
価格 100 円 1000 円~電池 不要 1 年~通信 424kbps 1024kbps
同時接続 1 対 1 N 対 N
結論
•NFC は能動的• iBeacon は受動的•要件に応じて利用する
アジェンダ[iBeacon のキホン ]1. iBeacon とは2.基本機能3.利用可能端末4. NFC との比較5.サービス事例
[ 技術的なポイント ]1. iOS, Android アプリ実装の違い2.消費電力3.セキュリティ
5.サービス事例
[ アメリカ ] ・ Masy’s ・ MLB
[日本 ] ・スマポ ・スマート座布団
Macy’s (アメリカのデパート)
来店客のアプリへ商品情報、クーポンを通知
MLB x iBeacon
20 のスタジアム(全体の 3分の 2 )
各スタジアム100 個のビーコン設
置
MLB x iBeacon
座席案内
MLB x iBeacon
利用回数カウント
ホットドッグのクーポン配布
スマポ x iBeacon
来店するとポイントが貯められるサービス
来店時に通知を発火させる仕組みで iBeacon を利用(近づくと通知される)※ポイント付与は音波
スマート座布団座布団の下にデバイス設置。
座った重みでビーコンが発火。
スマート座布団空席情報を管理。
カフェの混雑状況をログ取得しデータ解析可能。
結論
•情報発信、クーポン配布をPUSH できるアプリの事例が多い。
検証アプリを開発しました
出社アプリ
セルリアンタワー 12F にビーコンを設置
座席に近づくとビーコン信号をスマホがキャッチ
⇒ アプリで出社できる!
サーバ構成12F ビーコン スマホ
Web サーバ
⇒ TimePro を叩いて出社!
出社アプリ
デモ
リージョン観測
入った!!!
レンジング観測
近 遠
「近い」で出社可能になる
デモのまとめ
バックグラウンドリージョン観測 ⇒ 範囲内ビーコン検知 ⇒ ローカル通知発火
レンジング観測 ⇒ 距離観測( Far Near⇒ )
無事動くものができた!
サービス開発のキモ• アプリが起動していない状態でもビーコ
ンは検知されるか?• Bluetooth でバッテリーは食わないか?• 不正は行われないか?
アジェンダ[iBeacon のキホン ]1. iBeacon とは2.基本機能3.利用可能端末4. NFC との比較5.サービス事例
[ 技術的なポイント ]1. iOS, Android アプリ実装の違い2.消費電力3.セキュリティ
iOS, Android アプリ実装の違い
A.iOS向けアプリ実装B.Android向けアプリ実装C.iOS 、 Android の比較
iOS 実装の流れ
1. UUID定義2.リージョン観測3.レンジング観測4.バックグラウンドタ
スク
UUID定義// 観測対象の UUID と識別子を定義して、// CLBeaconRegion を作成するlet uuidString = “00000000-1234-A123-B456-E123C456D789”let beaconIdentifier = “gmo-beacon”let beaconUUID:NSUUID = NSUUID(UUIDString: uuidString)
let beaconRegion:CLBeaconRegion = CLBeaconRegion(proximityUUID: beaconUUID, identifier:
beaconIdentifier )
リージョン観測
入った!!!
リージョン観測//UUID を指定して観測スタートlocationManager = CLLocationManager()locationManager!.delegate = selflocationManager!.startMonitoringForRegion(beaconRegion)
LocationManager デリゲートメソッド
開始 didStartMonitoringForRegion入った! didEnterRegion出た! didExitRegion失敗! monitoringDidFailForRegion:withError
didEnterRegion
func locationManager( manager: CLLocationManager!, didEnterRegion region: CLRegion!) {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), {
// 境界に入ったので、レンジング観測を開始 manager.startRangingBeaconsInRegion(region as CLBeaconRegion) }) }
レンジング監視
近 遠
レンジングデリゲートメソッド今の状態 didRangeBeacons:inRegionエラー rangingBeaconsDidFailForRegion:withError:
didRangeBeaconsfunc locationManager( manager: CLLocationManager!, didRangeBeacons beacons: [CLBeacon]!, inRegion region: CLBeaconRegion!) { for beacon in beacons { // 指定範囲に入っていなければスキップ If (inRangeProximity.filter {$0 == beacon.proximity}).count == 0 { continue } // 同じ major,minor の最後の測定状態を取得 var arr: [CLBeacon] = [] for lb in lastBeacons { if lb.major == beacon.major { if lb.minor == beacon.minor{ arr.insert(lb, atIndex: arr.count) } } } let lastBeacon = arr }}
値 内容proximityUUID UUID
major major
minor minor
proximity ビーコンとの距離
accuracy 近接値の精度rssi 受信強度
値がすぐ取れる。 Android と異なる点
didEnterRegion時バックグラウンドタスク
// バックグラウンドだと 10 秒程度しか起動できないので、// バックグラウンドタスクを作成すると 180 秒程度、起動可能になる。
let app = UIApplication.sharedApplication()var bgTaskId: UIBackgroundTaskIdentifier? bgTaskId = app.beginBackgroundTaskWithExpirationHandler({ dispatch_async(dispatch_get_main_queue(), { if bgTaskId != UIBackgroundTaskInvalid { app.endBackgroundTask(bgTaskId!) bgTaskId = UIBackgroundTaskInvalid } }) })
iOS のポイント1. CoreLocation を使う。 ※CoreBluetooth は明示的に使わなくてよい。
2. UUID を指定する。 UUID は MAX20 件。 1UUID につき、 65535*65535 通りの ID を持てる。
3.バックグラウンドでリージョン観測。⇒これによりアプリ未起動でも挙動。 サービスの課題をクリア
Android アプリ実装
• リージョン観測とタイムアウト• スキャンした情報の加工
Android向けアプリ実装まずはパーミッション
<uses-permission android:name="android.permission.BLUETOOTH"/> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
BLE 対応端末のみインストールさせる <uses-feature android:name=“android.hardware.bruetooth_le” android:required="true"/>
Bluetooth マネージャの初期化BluetoothManager mBluetoothManager =(BluetoothManager)getSystemService(Context.BLUETOOTH_SERVICE);
mBluetoothAdapter = mBluetoothManager.getAdapter();
リージョン観測とタイムアウト( iOS との違い)
//Blutooth ON 時、バックグラウンドで常に動かすprivate void connect() { mHandler.postDelayed(new Runnable() { @Override public void run() { mBluetoothAdapter.stopLeScan(BleActivity.this); }}, 5000); // タイムアウトを設定 // スキャン開始 mBluetoothAdapter.startLeScan(this);}
リージョン観測後の情報の取得private BluetoothAdapter.LeScanCallback
mLeScanCallback = new BluetoothAdapter.LeScanCallback() { @Override public void onLeScan(final BluetoothDevice device, int rssi,byte[] scanRecord) { //UUID,major,miner,RSSI の判定処理 } }
UUID 、 Major 、 Minorif(scanRecord.length > 30){ //iBeacon の場合 6 byte 目から、 9 byte 目はこの値に固定されている。 if((scanRecord[5] == (byte)0x4c) && (scanRecord[6] == (byte)0x00) && (scanRecord[7] == (byte)0x02) && (scanRecord[8] == (byte)0x15)) { String uuid = IntToHex2(scanRecord[9] & 0xff) + IntToHex2(scanRecord[10] & 0xff) + IntToHex2(scanRecord[11] & 0xff) + IntToHex2(scanRecord[12] & 0xff) + "-" + IntToHex2(scanRecord[13] & 0xff) + IntToHex2(scanRecord[14] & 0xff) + "-” + IntToHex2(scanRecord[15] & 0xff) + IntToHex2(scanRecord[16] & 0xff) + "-” + IntToHex2(scanRecord[17] & 0xff) + IntToHex2(scanRecord[18] & 0xff) + "-” + IntToHex2(scanRecord[19] & 0xff) + IntToHex2(scanRecord[20] & 0xff) + IntToHex2(scanRecord[21] & 0xff) + IntToHex2(scanRecord[22] & 0xff) + IntToHex2(scanRecord[23] & 0xff) + IntToHex2(scanRecord[24] & 0xff); String major = IntToHex2(scanRecord[25] & 0xff) + IntToHex2(scanRecord[26] & 0xff); String minor = IntToHex2(scanRecord[27] & 0xff) + IntToHex2(scanRecord[28] & 0xff); } }
scanRecord Byte 数 説明
1 1 ブロック目のバイト数2,3 flag4 2 ブロック目のバイト数5 メーカー固有の AD type データ
6,7 会社コード (0x004C が Apple の会社コード )
8 データのタイプ (0×02 が iBeacon)
9 連なる iBeacon データのバイト数10~25 UUID26,27 major28,29 minor
30 校正された電波強度 ( 距離を求めるときの基準値、 2 の補数 )
Android のポイント• 自分で書かないといけない部分が多い。
1.リージョン監視のタイムアウト制御 2. scanRecord の中身解析 (とくにレンジングは自分で RSSI で 距離のあたりをつける)
めんどくささ or 柔軟性?
アビダルマ• Aplix 社推奨のライブラリ。• 2次的著作物に無料で利用可能。• iOS に近い処理をラッパーして実現。
アビダルマの利点 その1
省電力実装
アプリ画面がフォアグラウンドにない、 またはディスプレイが 消灯している。 ⇒15秒周期で 5秒間ずつリージョン観測実行。
対象 UUID の絞込み ⇒不要な通信を発生させない。
デフォルトでは 0.1秒ごとにスキャンを実行し続けるので非常に電池を食いやすい。
アビダルマの利点 その2
デバイス不具合対応• AQUOS Xx 304SH 、 Nexus4 、 Nexus7 不具合
⇒内部的にカバーしている。• GALAXY S5 にて通知される受信 RSSI が他
機種と比較して低い。
他のライブラリ
Android Beacon Libraryhttps://github.com/AltBeacon/android-beacon-library
iOS Android
利用者 ver.7 以上90%強
ver.4.3 以上20%弱
OS設定・パーミッション
Bluetooth位置情報バックグラウンド
Bluetooth
観測対象 UUID指定必須 UUID指定自由リージョン観測
頻度 OS依存UUID指定必須
頻度実装可能UUID指定自由
レンジング観測
バックグラウンドタスクMax180秒
実装者に依存
サービス開発のキモ• アプリが起動していない状態でも ビーコンは検知されるか?⇒なんとかバックグラウンドでやれそう
• Bluetooth でバッテリーは食わないか?• 不正は防げるか?
アジェンダ[iBeacon のキホン ]1. iBeacon とは2.基本機能3.利用可能端末4. NFC との比較5.サービス事例
[ 技術的なポイント ]1. iOS, Android アプリ実装の違い2.消費電力3.セキュリティ
消費電力
iBeacon 端末本体
⇒ これはそもそも低電力になっているので問題ない
消費電力
・ AisleLabs による調査・ Android, iOS の BLE 消費電力比較実験
http://www.aislelabs.com/reports/ibeacon-battery-phones/http://www.aislelabs.com/reports/ibeacon-battery-drain-iphones/
バッテリーに与える影響
・周囲のビーコン個数・スキャン回数(リージョン観測回数)
周囲のビーコン個数・0個・7個・10個
個数が多いほどスマホ電池消費が増える。
スキャンのインターバル・ 0.1秒スキャン +0.1秒休む・ 1秒スキャン +1秒休む・ 2秒スキャン +2秒休む
頻度が狭いとスマホバッテリーを消費する。
スキャンのインターバル・1秒スキャン+9秒休む ・5秒スキャン+5秒休む
スキャン時間が長いとバッテリーを消費する。
バッテリーに与える影響• ビーコン個数 : 少ないほうがいい• スキャン回数 : 少ないほうがいい
ある意味当たり前の結果!
Android側の実装の現実解
アビダルマの実装
⇒5秒スキャン + 15秒インターバル
※デフォルト 1秒 10 回スキャンよりはこちらのほうがよい
いままで Android 実装のめんどくささが目立っていたが。。。
iOS7 はなぜ Android に劣るのか?
iOS側が自動的にリージョン監視
⇒Android側は頻度を実装できるので、消費電力を意識して頻度を抑えることがで
きる。
iOS7.1 以降は改善された?!?
ビーコン端末の性能に左右?!?
iOS Android
利用者 ver.7 以上90%強
ver.4.3 以上20%弱
OS設定・パーミッション
Bluetooth位置情報バックグラウンド
Bluetooth
観測対象 UUID指定必須 UUID指定自由リージョン観測
頻度 OS依存UUID指定必須
頻度実装可能UUID指定自由
レンジング観測
バックグラウンドタスクMax180秒
実装者に依存
消費電力 良 新デバイス:優
サービス開発のキモ• アプリが起動していない状態でも ビーコンは検知されるか?⇒なんとかバックグラウンドでやれそう
• Bluetooth でバッテリーは食わないか?⇒実装上の工夫( +新機種)で大丈夫• 不正は防げるか?
アジェンダ[iBeacon のキホン ]1. iBeacon とは2.基本機能3.利用可能端末4. NFC との比較5.サービス事例
[ 技術的なポイント ]1. iOS, Android アプリ実装の違い2.消費電力3.セキュリティ
セキュリティ• 偽ビーコンを作成できる問題本物であることを検証し保証する仕組みが必要
偽ビーコンの例
UUID 、 Major 、 Minor がバレてしまうと自宅の Mac から出社可能( Mac でビーコン発信可能)
偽ビーコンの例店舗に行かなくてもポイントが自在に取得できる 店舗
「本物のビーコンとの通信ですよ」を保証する仕組みが必要!!!
セキュリティ GPS を利用して
Aplix 社サーバ
セキュリティ 乱数を利用
ビーコンを 2 個仕込むためデバイスの電池の消費が少し早い。Aplix 社の認証サーバを利用するコストが発生する。
Aplix 社サーバ
まとめ• アプリが起動していない状態でも ビーコンは検知されるか?⇒なんとかバックグラウンドでやれそう• Bluetooth でバッテリーは食わないか?⇒実装上の工夫( +新機種)で大丈夫• 不正は防げるか?⇒Aplix 社の認証機構を利用する( or 自力で実装)
ご清聴ありがとうございました。