Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

18,008 views

Published on

GMOインターネット次世代システム研究室の勉強会発表資料。

2014年9月作成。
2014年7月-9月の調査と検証の結果を記載。

Published in: Technology
  • Login to see the comments

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

  1. 1. iBeaconを利用した サービス開発のポイント 2014年9月 GMOインターネット 次世代システム研究室 松井、佐藤、折田、塚元、宮尾
  2. 2. アジェンダ [iBeaconのキホン] 1.iBeaconとは 2.基本機能 3.利用可能端末 4.NFCとの比較 5.サービス事例 [技術的なポイント] 1.iOS, Android アプリ実装の違い 2.消費電力 3.セキュリティ
  3. 3. 1.iBeaconとは • Appleの商標 • Location and Proximity Detection Technology 「位置と近接検出技術」
  4. 4. 1.iBeaconとは Bluetooth Low Energy(BLE)を 利用してシグナルを発信する機器
  5. 5. BLEとは • 近距離無線通信技術Bluetoothの拡張仕様 • 極低電力で通信が可能なもの • 2010年7月に発表されたBluetooth 4.0規格 • 免許なく使える2.4GHz帯(ISMバンド)の電波を用 い、最大1Mbpsの通信が可能。 • 対応チップは従来の1/3程度の電力で動作する ことができ • ボタン電池一つで数年稼働することができるとさ れている。
  6. 6. 1.iBeaconとは シグナルはスマホで受信可能(Android、iOS)
  7. 7. 1.iBeaconとは シグナルが50m先まで届く。 スマホで距離を観測できる。
  8. 8. 結論 • BLE利用。 • 広範囲に電波が届く。 • スマホで受信可能。
  9. 9. アジェンダ [iBeaconのキホン] 1.iBeaconとは 2.基本機能 3.利用可能端末 4.NFCとの比較 5.サービス事例 [技術的なポイント] 1.iOS, Android アプリ実装の違い 2.消費電力 3.セキュリティ
  10. 10. 2.基本機能 A.構成 ・ブロードキャスター・オブザーバー型 ・セントラル・ペリフェラル型 B.機能 ・Beaconから送られてくる信号 ・スマホができること
  11. 11. 2.基本機能 オブザーバー (スマホ) ブロードキャスター (Beacon端末) 発信のみ 受信のみ
  12. 12. 2.基本機能 ペリフェラル セントラル 読み書き (今回は対象外)
  13. 13. 2.基本機能 1.UUID 2.Major 3.Minor 4.RSSI Beaconから送られる信号
  14. 14. Beaconから送られる信号 UUID 128ビット識別子 12345678-A1B3-B2C4-C3D5-EF567GH942E2 Major 16ビットの符号なし整数。 0~65535 Minor 16ビットの符号なし整数。 0 ~ 65535
  15. 15. 使い道 UUID 128ビット識別子 サービスで1個 Major 16ビットの符号なし整数。 ショップなどの単位で1個 Minor 16ビットの符号なし整数。 売り場、ビルの階層、支店などの小概念で1個
  16. 16. RSSI • Received Signal Strength Indicator • 受信信号強度 • マイナスの値 • 小さいほど近い状態を表す
  17. 17. Beaconを受信する機器が できること(スマホ) 1.リージョン観測 2.レンジング観測
  18. 18. リージョン観測 •入った •出た
  19. 19. リージョン観測 入った!!! 出た!!!
  20. 20. レンジング観測 RSSI 電波強度からおおよその距離を図る (調整可能) Immediate (すごく近い) 50cm以内 Near (誓い) 50cm~6m Far (遠い) 6m~20m Unknown (不明) ???
  21. 21. レンジング観測 近 遠
  22. 22. 結論 • ブロードキャスターオブザーバー構成で サービス開発。 • UUID、Major、Minorでビーコンを認識できる。 • 領域出入 + 距離 を利用できる。
  23. 23. アジェンダ [iBeaconのキホン] 1.iBeaconとは 2.基本機能 3.利用可能端末 4.NFCとの比較 5.サービス事例 [技術的なポイント] 1.iOS, Android アプリ実装の違い 2.消費電力 3.セキュリティ
  24. 24. 3.利用可能端末 A.iBeacon端末 B.iOS , Android
  25. 25. iBeacon端末 • StickNFind社
  26. 26. iBeacon端末 • Aplix社 MyBeacon
  27. 27. iBeacon端末 • Estimote社
  28. 28. iBeacon端末 • shopbeacon
  29. 29. Estimote StickNFind Aplix shopbeacon 価格 3500円 3500円 1000円 4000円 技適 ○ ○ ○ × 電池 2年 1年 1年 5年 その他 デザイ ンが おしゃ れ サイズが 小さい。 探し物ア プリを販 売。 安い。 セキュリ ティ機能 が強い。 米国の 百貨店 Macy’s 実績アリ
  30. 30. 技適マーク(ぎてきまーく)とは ⇒技適マークが付いていない無線機は、 「免許を受けられない/違法になる」恐れが ありますので無線機を購入・使用する際は 十分ご注意下さい。 技術基準適合証明と 技術基準適合認定のいずれか あるいは両者の認証が なされていることを 表示するマークで、 総務省令に定められたものである。
  31. 31. 3.利用可能端末 スマホ [iOS] Ver.7以降 • iPhone 4s ~ • iPad 第3世代~(mini,Airは可能) [Android] Ver.4.3以降
  32. 32. Bluetoothの大分類 • Bluetooth Smart : BLEのみ • Bluetooth Smart Ready :BLE+クラシック • Bluetooth :クラシックのみ
  33. 33. Beaconの誤解 • 対応端末でも Bluetooth OFF では使えない。 iPhoneでは 位置情報も必要
  34. 34. 結論 • 現状はAplix社のビーコンがよい。 • iOS 7 , Android 4.3
  35. 35. アジェンダ [iBeaconのキホン] 1.iBeaconとは 2.基本機能 3.利用可能端末 4.NFCとの比較 5.サービス事例 [技術的なポイント] 1.iOS, Android アプリ実装の違い 2.消費電力 3.セキュリティ
  36. 36. NFCとは? • 近距離無線通信技術 • 「かざす」ことで通信可能 • 低速なデータ通信
  37. 37. 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
  38. 38. 結論 • NFCは能動的 • iBeaconは受動的 • 要件に応じて利用する
  39. 39. アジェンダ [iBeaconのキホン] 1.iBeaconとは 2.基本機能 3.利用可能端末 4.NFCとの比較 5.サービス事例 [技術的なポイント] 1.iOS, Android アプリ実装の違い 2.消費電力 3.セキュリティ
  40. 40. 5.サービス事例 [アメリカ] ・Masy’s ・MLB [日本] ・スマポ ・スマート座布団
  41. 41. Macy’s(アメリカのデパート) 来店客の アプリへ 商品情報、 クーポンを 通知
  42. 42. MLB x iBeacon 20のスタジアム (全体の3分の2) 各スタジアム 100 個のビーコン設置
  43. 43. MLB x iBeacon 座席案内
  44. 44. MLB x iBeacon 利用回数 カウント ホットドッグの クーポン配布
  45. 45. スマポ x iBeacon 来店するとポイントが 貯められるサービス 来店時に通知を発火させる 仕組みで iBeacon を利用 (近づくと通知される) ※ポイント付与は音波
  46. 46. スマート座布団 座布団の下に デバイス設置。 座った重みで ビーコンが発火。
  47. 47. スマート座布団 空席情報を管理。 カフェの 混雑状況を ログ取得し データ解析可能。
  48. 48. 結論 • 情報発信、クーポン配布を PUSHできるアプリの事例が 多い。
  49. 49. 検証アプリを 開発しました
  50. 50. 出社アプリ セルリアンタワー 12Fにビーコンを設置 座席に近づくと ビーコン信号を スマホがキャッチ ⇒ アプリで出社できる!
  51. 51. サーバ構成 12Fビーコン スマホ Webサーバ ⇒ TimeProを叩いて出社!
  52. 52. 出社アプリ
  53. 53. デモ
  54. 54. リージョン観測 入った!!!
  55. 55. レンジング観測 近 遠 「近い」で出社可能になる
  56. 56. デモのまとめ バックグラウンドリージョン観測 ⇒ 範囲内ビーコン検知 ⇒ ローカル通知発火 レンジング観測 ⇒ 距離観測(Far⇒Near)
  57. 57. 無事動くものができた!
  58. 58. サービス開発のキモ • アプリが起動していない状態でもビーコンは 検知されるか? • Bluetoothでバッテリーは食わないか? • 不正は行われないか?
  59. 59. アジェンダ [iBeaconのキホン] 1.iBeaconとは 2.基本機能 3.利用可能端末 4.NFCとの比較 5.サービス事例 [技術的なポイント] 1.iOS, Android アプリ実装の違い 2.消費電力 3.セキュリティ
  60. 60. iOS, Android アプリ実装の違い A.iOS向けアプリ実装 B.Android向けアプリ実装 C.iOS、Androidの比較
  61. 61. iOS実装の流れ 1.UUID定義 2.リージョン観測 3.レンジング観測 4.バックグラウンドタスク
  62. 62. 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 )
  63. 63. リージョン観測 入った!!!
  64. 64. リージョン観測 //UUIDを指定して観測スタート locationManager = CLLocationManager() locationManager!.delegate = self locationManager!. startMonitoringForRegion(beaconRegion)
  65. 65. LocationManager デリゲートメソッド 開始 didStartMonitoringForRegion 入った! didEnterRegion 出た! didExitRegion 失敗! monitoringDidFailForRegion:withError
  66. 66. 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) }) }
  67. 67. レンジング監視 近 遠
  68. 68. レンジングデリゲートメソッド 今の状態 didRangeBeacons:inRegion エラー rangingBeaconsDidFailForRegion:withError:
  69. 69. 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) } } }
  70. 70. 値 内容 proximityUUID UUID major major minor minor proximity ビーコンとの距離 accuracy 近接値の精度 rssi 受信強度 値がすぐ取れる。 Android と異なる点
  71. 71. 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 } }) })
  72. 72. iOSのポイント 1.CoreLocationを使う。 ※CoreBluetoothは明示的に使わなくてよい。 2.UUIDを指定する。UUIDはMAX20件。 1UUIDにつき、65535*65535通りのIDを持てる。 3.バックグラウンドでリージョン観測。 ⇒これによりアプリ未起動でも挙動。 サービスの課題をクリア
  73. 73. Androidアプリ実装 • リージョン観測とタイムアウト • スキャンした情報の加工
  74. 74. 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"/>
  75. 75. Bluetoothマネージャの初期化 BluetoothManager mBluetoothManager = (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE); mBluetoothAdapter = mBluetoothManager.getAdapter();
  76. 76. リージョン観測とタイムアウト (iOSとの違い) //Blutooth ON 時、バックグラウンドで常に動かす private void connect() { mHandler.postDelayed(new Runnable() { @Override public void run() { mBluetoothAdapter.stopLeScan(BleActivity.this); }}, 5000); // タイムアウトを設定 // スキャン開始 mBluetoothAdapter.startLeScan(this); }
  77. 77. リージョン観測後の情報の取得 private BluetoothAdapter.LeScanCallback mLeScanCallback = new BluetoothAdapter.LeScanCallback() { @Override public void onLeScan(final BluetoothDevice device, int rssi,byte[] scanRecord) { //UUID,major,miner,RSSIの判定処理 } }
  78. 78. 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); } }
  79. 79. 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 の補数)
  80. 80. Androidのポイント • 自分で書かないといけない部分が多い。 1.リージョン監視のタイムアウト制御 2.scanRecordの中身解析 (とくにレンジングは自分でRSSIで 距離のあたりをつける) めんどくささ or 柔軟性?
  81. 81. アビダルマ • Aplix社推奨のライブラリ。 • 2次的著作物に無料で利用可能。 • iOSに近い処理をラッパーして実現。
  82. 82. アビダルマの利点 その1 省電力実装 アプリ画面がフォアグラウンドにない、 またはディスプレイが 消灯している。 ⇒15秒周期で 5秒間ずつリージョン観測実行。 対象UUIDの絞込み ⇒不要な通信を発生させない。 デフォルトでは0.1秒ごとにスキャンを実行し続けるので 非常に電池を食いやすい。
  83. 83. アビダルマの利点 その2 デバイス不具合対応 • AQUOS Xx 304SH、Nexus4、 Nexus7 不具合 ⇒内部的にカバーしている。 • GALAXY S5 にて通知される受信 RSSI が他機 種と比較して低い。
  84. 84. 他のライブラリ Android Beacon Library https://github.com/AltBeacon/android-beacon-library
  85. 85. iOS Android 利用者 ver.7以上 90%強 ver.4.3以上 20%弱 OS設定・ パーミッション Bluetooth 位置情報 バックグラウンド Bluetooth 観測対象 UUID指定必須 UUID指定自由 リージョン観測 頻度OS依存 UUID指定必須 頻度実装可能 UUID指定自由 レンジング観測 バックグラウンド タスクMax180秒 実装者に依存
  86. 86. サービス開発のキモ • アプリが起動していない状態でも ビーコンは検知されるか? ⇒なんとかバックグラウンドでやれそう • Bluetoothでバッテリーは食わないか? • 不正は防げるか?
  87. 87. アジェンダ [iBeaconのキホン] 1.iBeaconとは 2.基本機能 3.利用可能端末 4.NFCとの比較 5.サービス事例 [技術的なポイント] 1.iOS, Android アプリ実装の違い 2.消費電力 3.セキュリティ
  88. 88. 消費電力 iBeacon端末本体 ⇒ これはそもそも 低電力になっているので問題ない
  89. 89. 消費電力 ・AisleLabsによる調査 ・Android, iOSのBLE消費電力比較実験 http://www.aislelabs.com/reports/ibeacon-battery-phones/ http://www.aislelabs.com/reports/ibeacon-battery-drain-iphones/
  90. 90. バッテリーに与える影響 ・周囲のビーコン個数 ・スキャン回数 (リージョン観測回数)
  91. 91. 周囲のビーコン個数 ・0個 ・7個 ・10個 個数が多いほどスマホ電池消費が増える。
  92. 92. スキャンのインターバル ・0.1秒スキャン+0.1秒休む ・1秒スキャン+1秒休む ・2秒スキャン+2秒休む 頻度が狭いとスマホバッテリーを消費する。
  93. 93. スキャンのインターバル ・1秒スキャン+9秒休む ・5秒スキャン+5秒休む スキャン時間が長いとバッテリーを消費する。
  94. 94. バッテリーに与える影響 • ビーコン個数 : 少ないほうがいい • スキャン回数 : 少ないほうがいい ある意味当たり前の結果!
  95. 95. Android側の実装の現実解 アビダルマの実装 ⇒5秒スキャン + 15秒インターバル ※デフォルト1秒10回スキャンより はこちらのほうがよい
  96. 96. いままでAndroid実装の めんどくささが 目立っていたが。。。
  97. 97. iOS7はなぜAndroidに劣るのか? iOS側が自動的にリージョン監視 ⇒Android側は頻度を実装できるので、 消費電力を意識して頻度を抑えることができる。 iOS7.1以降は改善された?!? ビーコン端末の性能に左右?!?
  98. 98. iOS Android 利用者 ver.7以上 90%強 ver.4.3以上 20%弱 OS設定・ パーミッション Bluetooth 位置情報 バックグラウンド Bluetooth 観測対象 UUID指定必須 UUID指定自由 リージョン観測 頻度OS依存 UUID指定必須 頻度実装可能 UUID指定自由 レンジング観測 バックグラウンド タスクMax180秒 実装者に依存 消費電力 良 新デバイス:優
  99. 99. サービス開発のキモ • アプリが起動していない状態でも ビーコンは検知されるか? ⇒なんとかバックグラウンドでやれそう • Bluetoothでバッテリーは食わないか? ⇒実装上の工夫(+新機種)で大丈夫 • 不正は防げるか?
  100. 100. アジェンダ [iBeaconのキホン] 1.iBeaconとは 2.基本機能 3.利用可能端末 4.NFCとの比較 5.サービス事例 [技術的なポイント] 1.iOS, Android アプリ実装の違い 2.消費電力 3.セキュリティ
  101. 101. セキュリティ • 偽ビーコンを作成できる問題 本物であることを検証し保証する仕組みが必要
  102. 102. 偽ビーコンの例 UUID、Major、Minorが バレてしまうと 自宅のMacから出社可能 (Macでビーコン発信可能)
  103. 103. 偽ビーコンの例 店舗に行かなくても ポイントが自在に取得できる 店舗
  104. 104. 「本物のビーコンとの通信ですよ」 を保証する仕組みが必要!!!
  105. 105. セキュリティ GPSを利用して Aplix社サーバ
  106. 106. セキュリティ 乱数を利用 ビーコンを2個仕込むためデバイスの電池の消費が少し早い。 Aplix社の認証サーバを利用するコストが発生する。 Aplix社サーバ
  107. 107. まとめ • アプリが起動していない状態でも ビーコンは検知されるか? ⇒なんとかバックグラウンドでやれそう • Bluetoothでバッテリーは食わないか? ⇒実装上の工夫(+新機種)で大丈夫 • 不正は防げるか? ⇒Aplix社の認証機構を利用する(or 自力で実装)
  108. 108. ご清聴ありがとうございました。

×