iBeacon体験講座(iOS):iOS開発者向け
ドリームコア 1F モバイル・コア 10月25日
!(合)わふう 上原 昭宏
(有)トリガーデバイス 佐藤 忠彦
目次
• iBeaconのデモンストレーション
• Bluetooth Low Energyって?
• iOSアプリのビーコンの発信と受信
• Passbookとの連携
デモンストレーション
• Passbookとの連携
• サンプルiOSアプリケーションを動かす
今回の資料• サンプルソースコード • https://github.com/reinforce-lab/
CoreBluetooth_samples
• スライド • http://www.slideshare.net/reinforcelab/
• 解説(ブログ記事)
• http://reinforce-lab.github.io/blog/2013/10/21/ibeacon/
Passbookとの連携
• できること • ロック画面表示時にパスを表示
• デモンストレーション • パスを入手 • ビーコンの表示
iPhoneの設定
iPhoneの設定
iPhoneの設定
Passbookの入手(2/2)
Passbookの入手(2/2)
Passbookの入手(2/2)
Passbookの入手(2/2)
Passbookの入手(2/2)
Passbookの入手(2/2)
Passbookの入手(2/2)
Passbookの入手(2/2)
Passbookの入手(2/2)
Passbookの入手(2/2)
Passbookの入手(2/2)
Passbookの入手(2/2)
Passbookの入手(2/2)
表示確認
表示確認位置アイコンが表示されます
表示確認位置アイコンが表示されます
iOSアプリケーション
• 役割とできること • 発信、ビーコン • 受信、領域監視と距離推定
• デモンストレーション • アプリケーションを起動
アプリのインストール
• ソースコード • https://db.tt/S0Wp3U8q (Dropbox zip形式)
• http://goo.gl/8DqaVK (Github)
• インストール • iBeacon/simpleBeacon.xcodeproj
• Xcode5でシミュレータのBLEサポートなくなる
ビーコン(発信) ビーコンの受信 Bluetooth LE のアドバタイズメント
のダンプ
メソッド呼び出しのダンプ
ビーコン(発信) ビーコンの受信 Bluetooth LE のアドバタイズメント
のダンプ
ビーコン(発信)
パスを入手は、パスのリンク先 ビーコンのSWで、ビーコン発信
ビーコン(発信)
パスを入手は、パスのリンク先 ビーコンのSWで、ビーコン発信
ビーコン(発信)
パスを入手は、パスのリンク先 ビーコンのSWで、ビーコン発信
ビーコン(発信)
パスを入手は、パスのリンク先 ビーコンのSWで、ビーコン発信
ビーコン(発信) ビーコンの受信 Bluetooth LE のアドバタイズメント
のダンプ
ビーコンの受信
• ReginをON
• 位置の利用を許可 • RangingをON
• どなたか、ビーコン発信?
!
• ビーコン:UUID/Major/Minor
• Proximity:おおよその距離
• RSSI 受信信号(対数 dBm)
• Accuracy:だいたいの精度(m)
ビーコンの受信
• ReginをON
• 位置の利用を許可 • RangingをON
• どなたか、ビーコン発信?
!
• ビーコン:UUID/Major/Minor
• Proximity:おおよその距離
• RSSI 受信信号(対数 dBm)
• Accuracy:だいたいの精度(m)
ビーコンの受信
• ReginをON
• 位置の利用を許可 • RangingをON
• どなたか、ビーコン発信?
!
• ビーコン:UUID/Major/Minor
• Proximity:おおよその距離
• RSSI 受信信号(対数 dBm)
• Accuracy:だいたいの精度(m)
ビーコンの受信
• ReginをON
• 位置の利用を許可 • RangingをON
• どなたか、ビーコン発信?
!
• ビーコン:UUID/Major/Minor
• Proximity:おおよその距離
• RSSI 受信信号(対数 dBm)
• Accuracy:だいたいの精度(m)
ビーコンの受信
• ReginをON
• 位置の利用を許可 • RangingをON
• どなたか、ビーコン発信?
!
• ビーコン:UUID/Major/Minor
• Proximity:おおよその距離
• RSSI 受信信号(対数 dBm)
• Accuracy:だいたいの精度(m)
ビーコンの受信
• ReginをON
• 位置の利用を許可 • RangingをON
• どなたか、ビーコン発信?
!
• ビーコン:UUID/Major/Minor
• Proximity:おおよその距離
• RSSI 受信信号(対数 dBm)
• Accuracy:だいたいの精度(m)
ビーコン(発信) ビーコンの受信 Bluetooth LE のアドバタイズメント
のダンプ
Bluetooth LE のアドバタイズメント
のダンプ
• Bluetooth LEの生パケット
• ビーコンの情報はフィルタ • 30ミリ秒ごとにでているので
Bluetooth LE のアドバタイズメント
のダンプ
• Bluetooth LEの生パケット
• ビーコンの情報はフィルタ • 30ミリ秒ごとにでているので
Bluetooth Low Energy
Bluetoothの歴史
Bluetoothの歴史
Bluetoothの歴史
2007 V2.1 EDR
Bluetoothの歴史
2007 V2.1 EDR
2009 V3.0 High Speed
Bluetoothの歴史
2007 V2.1 EDR
2009 V3.0 High Speed
2010 V4.0 Low Energy
Bluetoothの歴史
2007 V2.1 EDR
2009 V3.0 High Speed
2010 V4.0 Low Energy
2004 Bluetooth Low End Extension
Bluetoothの歴史
2007 V2.1 EDR
2009 V3.0 High Speed
2010 V4.0 Low Energy
2004 Bluetooth Low End Extension
2006 Wibree
Bluetoothの歴史
2007 V2.1 EDR
2009 V3.0 High Speed
2010 V4.0 Low Energy
2004 Bluetooth Low End Extension
2006 Wibree
2010 V4.0 Low Energy
!= 3.0 + LE
!!!!!
Bluetoothの歴史
2007 V2.1 EDR
2009 V3.0 High Speed
2010 V4.0 Low Energy
2004 Bluetooth Low End Extension
2006 Wibree
2010 V4.0 Low Energy
!= 3.0 + LE
!!!!!
Low Energy
Bluetooth SMART ロゴ
• SMART / SMART READY
ペリフェラルの発見
• アドバタイズメント • パケットを送信 • 20ミリ秒~1.3秒周期
• デバイス名などの情報
Ad
Ad
Ad
Ad
Ad
t
tAd
Ad
Ad
Ad
ペリフェラル
セントラル
Ad
t受信
tAd
Ad
Ad
Ad
ペリフェラル
セントラル
Ad Ad
t受信
tAd
Ad
Ad
Ad
ペリフェラル
セントラル
Ad Ad
t受信
tAd
Ad
Ad
Ad
ペリフェラル
セントラル
Ad Ad
t受信
tAd
Ad
Ad
Ad
接続処理
ペリフェラル
セントラル
• 消費電力
Ad Ad
t受信
tAd
Ad
Ad
Ad
接続処理
ペリフェラル
セントラル
• 消費電力• 受信はとても食う
Ad Ad
t受信
tAd
Ad
Ad
Ad
接続処理
ペリフェラル
セントラル
• 消費電力• 受信はとても食う• 受信の時間が長い
Ad Ad
t受信
tAd
Ad
Ad
Ad
接続処理
ペリフェラル
セントラル
• 消費電力• 受信はとても食う• 受信の時間が長い• セントラルの役目
Ad Ad
t受信
tAd
Ad
Ad
Ad
接続処理
ペリフェラル
セントラル
CoreLocation
バックグラウンド・モード
UUIDの生成
• Mac OSで、uuidgen コマンド
リージョン監視DetectorViewController.m
リージョン監視DetectorViewController.m
リージョン監視• 監視対象
• UUIDでフィルタリング、major/minorは任意
• アプリあたり20が上限値 (iOS 7.0.2)
• 監視開始時にビーコン範囲内 → in通知がこない
• 通知は、領域を”またいだ時”に発生する
• ビーコンの領域からでると、exit通知
• 20秒以上、200m以上のエリア移動、実際35~50秒位
バックグラウンド動作• バックグラウンド・モード • 領域に入る/出るの通知 (10秒の処理時間)
• 電力を消費し続ける (4sだと1日で50%)
• ビーコン領域監視のスタート • 地理的な領域監視 (最も荒いモードで)
• Passbook連携、アプリがフォアグラウンド
レンジングDetectorViewController.m
レンジング• 監視対象
• UUIDおよびmajor/minorでフィルタリング
• 上限は不明(180は登録できた)
• 振る舞い • 1秒ごとに、検出したビーコンの配列を通知
• 同じビーコンでも、1秒後のインスタンスは別物
• 同じビーコンの通知が2つあることが稀にあるらしい
• ランダムアドレスでアドレス値が変更するため
start/stopの呼び出し順番
• レンジングの通知が止まらない • リージョン監視の開始 → (リージョンに入る) → レンジングの開始 → レンジングの停止 → リージョン監視の停止
• 問題ない • リージョン監視、レンジングを、どちらかだけ利用 • リージョン監視の開始 → (リージョンに入る) → レンジングの開始 → リージョン監視の停止 → レンジングの停止
Passbook
Passbookでの利用• Passbook Package Format Reference
• https://developer.apple.com/library/ios/documentation/UserExperience/Reference/PassKit_Bundle/Chapters/Introduction.html
Passbookでの利用• Passbook Package Format Reference
• https://developer.apple.com/library/ios/documentation/UserExperience/Reference/PassKit_Bundle/Chapters/Introduction.html
• UUID/major/minor
• ロック画面表示名 • いくつでも
!
• http://passkit.com
ビーコン
パケット構造
パケット構造
パケット構造
パケット構造
• 02 01 1A
• AD Type 0x01, flag,
• General Discoverable Mode,
• Simultaneous LE and BR/EDR to Same Device Capable (Controller)
• Simultaneous LE and BR/EDR to Same Device Capable (Host)
パケット構造
!
• 1A FF 4C 00 02 15 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 EC 4A 17 A5 C5
• AD Type|会社ID | 不明 | UUID |major| minior|RSSI
• UUID, major, minor, RSSIはビッグエンディアン
• RSSIはデフォルト値-59dBm (1m離れたところでのRSSI)
バックグラウンド動作
• 無理
ハードウェア
http://estimote.com
https://www.sticknfind.com