iBeacon を利用したサービス開発のポイント
Upcoming SlideShare
Loading in...5
×
 

iBeacon を利用したサービス開発のポイント

on

  • 499 views

iBeacon を利用したサービス開発のポイント

iBeacon を利用したサービス開発のポイント

Statistics

Views

Total Views
499
Views on SlideShare
484
Embed Views
15

Actions

Likes
8
Downloads
14
Comments
0

3 Embeds 15

https://twitter.com 8
http://recruit.gmo.jp 6

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

iBeacon を利用したサービス開発のポイント iBeacon を利用したサービス開発のポイント Presentation 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 Energy(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.基本機能 Beaconから送られる信号 1.UUID 2.Major 3.Minor 4.RSSI
  • 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~6m Far (遠い) 6m~20m Unknown (不明) ???
  • レンジング観測 近遠
  • 結論 • ブロードキャスターオブザーバー構成で サービス開発。 • 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社MyBeacon
  • 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 8 Android 2.3 iOS 7 Android 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 = self locationManager!. startMonitoringForRegion(beaconRegion)
  • LocationManager デリゲートメソッド 開始didStartMonitoringForRegion 入った! didEnterRegion 出た! didExitRegion 失敗! monitoringDidFailForRegion:withError
  • didEnterRegion func locationManager( manager: CLLocationManager!, didEnterRegion region: CLRegion!) { dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_P RIORITY_DEFAULT, 0), { // 境界に入ったので、レンジング観測を開始 manager.startRangingBeaconsInRegion(region as CLBeaconRegion) }) }
  • レンジング監視 近遠
  • レンジングデリゲートメソッド 今の状態didRangeBeacons:inRegion エラーrangingBeaconsDidFailForRegion:withError:
  • didRangeBeacons func 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) } } }
  • 値がすぐ取れる。Android と異なる点 値内容 proximityUUID UUID major major minor minor proximity ビーコンとの距離 accuracy 近接値の精度 rssi 受信強度
  • 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、Minor if(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 flag 4 2 ブロック目のバイト数 5 メーカー固有のAD type データ 6,7 会社コード(0x004C がApple の会社コード) 8 データのタイプ(0×02 がiBeacon) 9 連なるiBeacon データのバイト数 10~25 UUID 26,27 major 28,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 Library https://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社サーバ
  • セキュリティ乱数を利用 Aplix社サーバ ビーコンを2個仕込むためデバイスの電池の消費が少し早い。 Aplix社の認証サーバを利用するコストが発生する。
  • まとめ • アプリが起動していない状態でも ビーコンは検知されるか? ⇒なんとかバックグラウンドでやれそう • Bluetoothでバッテリーは食わないか? ⇒実装上の工夫(+新機種)で大丈夫 • 不正は防げるか? ⇒Aplix社の認証機構を利用する(or 自力で実装)
  • ご清聴ありがとうございました。