狠狠撸
Submit Search
iBeacon tips(potatotips27)
?
Download as PPTX, PDF
?
1 like
?
1,837 views
光 佐藤
Follow
iBeacon Tips
Read less
Read more
1 of 26
Download now
Download to read offline
More Related Content
iBeacon tips(potatotips27)
1.
iBeacon Tips potatotips-27 佐藤 光 iOS
App Developer
2.
佐藤 光 @SatoHikaruDev iOSアプリのプログラミングと、少しのサーバーサイドjavaやAndroidアプリの プログラミングをしています。 自己紹介
3.
目次 ? iBeaconとは ? 颈叠别补肠辞苍利用时に必要な条件 ?
実装 ? よいと思ったところ ? 悪いと思ったところ
4.
颈叠别补肠辞苍とは?
5.
? Beaconと呼ばれる発信機から出て いるBluetooth Low
Energy(BLE) の信号を受信する機能。
6.
? 近くのお店のクーポンや商品情報 を通知にするのに利用されている 。
7.
? iOS7に搭載されて、2014年ぐら いに話題になったが、いまだあまり 多くに浸透はしていないように感じ ている(似たような技術のNFCに比 べて)。
8.
? だが、アイデア次第では今後ブレイ クの可能性はまだまだあるのでは? と思って、今回の題材にしました。
9.
颈叠别补肠辞苍利用时に必要な条件
10.
? Beacon機器(aplix、estimote、Gimbalなど) ? 1個300円?3000円くらい ?
iPhoneやMacでもOK ? iOS7以降 ? Bluetoothが搭載されたiPhone/iPad/iPodなど
11.
実装
12.
Beacon監視開始 locationManager = CLLocationManager() locationManager.delegate
= self //iBeaconは位置情報「常に利用」の許可が必要。info.plistにもNSLocationAlwaysUsageDescriptionを追加しておく。 if locationManager.respondsToSelector("requestAlwaysAuthorization") { locationManager.requestAlwaysAuthorization() } //ビーコン領域を生成 let uuidString = "EBEFD083-70A2-47C8-9837-E7B5634DF524" let beaconIdentifier = "sample_iBeacon" let beaconUUID = NSUUID(UUIDString: uuidString)! let beaconRegion = CLBeaconRegion(proximityUUID: beaconUUID, identifier: beaconIdentifier) //let beaconRegion = CLBeaconRegion(proximityUUID: beaconUUID, major: 3, minor: 1, identifier: beaconIdentifier) //beacon領域に入ったときのdelegateからの通知がいらないときはfalse。defaultはtrue //beaconRegion.notifyOnEntry = false //beacon領域に入ったときのdelegateからの通知がいらないときはfalse。defaultはtrue //beaconRegion.notifyOnExit = false //iPhoneのロック解除ボタンが押されて、ロック中画面が表示されたときにBeaconの状態(内側にいるか外側にいるか)を確認するかど うか。defaultはfalse beaconRegion.notifyEntryStateOnDisplay = true //Beaconの領域IN/OUTの監視開始 //これで、locationManager:didEnterRegion や //locationManager:didExitRegionが通知される(アプリが起動していない時でも) //20個(uuidString/major/minorの組み合わせ)のbeaconRegionまで監視可能 locationManager.startMonitoringForRegion(beaconRegion)
13.
Beacon領域IN/OUTを検知(delegate) //以下のdelegeteはアプリが起動していなくてもコールされる(その際、AppDelegateのdidFinishLaunchingWithOptionsがコールさ れた後に、以下のdelegateメソッドがコールされる) /** * beaconの領域に入った */ func locationManager(manager:
CLLocationManager, didEnterRegion region: CLRegion) { manager.startRangingBeaconsInRegion(region as! CLBeaconRegion) manager.startUpdatingLocation() //結構感度が良い } /** * beaconの領域から出た */ func locationManager(manager: CLLocationManager, didExitRegion region: CLRegion) { //didEnterRegionに比べて感度が悪い } /** * beaconRegion.notifyEntryStateOnDisplay = true時に、iPhoneのロック解除ボタンが押されて、ロック中画面が表示された時、コ ールされる。 */ func locationManager(manager: CLLocationManager, didDetermineState state: CLRegionState, forRegion region: CLRegion) { //現在、対象Beaconの内側/外側/どちらかかわらないかが、stateで取得できる }
14.
Beacon領域IN/OUTのエラー検知(delegate) /** * beacon監視でエラー。 */ func locationManager(manager:
CLLocationManager, monitoringDidFailForRegion region: CLRegion?, withError error: NSError) { //ex) 監視するbeaconが無効、beaconを21種類以上登録した場合など }
15.
Beaconデータの受信開始 locationManager.delegate = self //Beaconデータの受信開始。Beaconデータ(CLBeacon)には //uuid/major/minor/CLProximity(すぐ近く/近い/遠い)/rssi(信号強度)が入っている locationManager.startRangingBeaconsInRegion(beaconRegion)
16.
Beaconデータ受信を検知(delegate) /** * Beaconデータ受信処理 */ func locationManager(manager:
CLLocationManager, didRangeBeacons beacons: [CLBeacon], inRegion region: CLBeaconRegion) { //Beaconデータ受信時は何度もコールされる。CLBeaconには uuid/major/minor/CLProximity(すぐ近く/近い/遠い)/rssi(信号強度) が入っている //Beacon範囲に入っている時はbeaconsリストにCLBeaconオブジェクトが入っているが 、 //Beacon範囲から出てもしばらくbeaconsリストが空でコールされる。 }
17.
Beaconデータ受信のエラー検知(delegate) func locationManager(manager: CLLocationManager, rangingBeaconsDidFailForRegion
region: CLBeaconRegion, withError error: NSError) { //beaconデータ受信でエラー。 //ex) 監視するbeaconが無効など }
18.
よいと思ったところ
19.
? iPhoneのロック解除ボタンを押した時にも Beacon検知タイミングがあるところ。 ? ローカル通知したいときに、ユーザーの目に つきそう
20.
? Beacon検知している時、ロック画面左下に アプリのアイコンが表示される。 by スマートフォンECラボ(http://smartphone-ec.net/)
21.
? 省電力 ? iBeaconの方が、GPSを利用した領域観測 (iOSの別機能)に比べて電池が長持ちしそう ?
Beacon機器は乾電池2本でほとんどのもの が1年以上は持つ。
22.
悪いと思ったところ
23.
? iPhoneの電源ONにした直後1?5 分くらいBeaconを検知できない時 間がある。
24.
? Beacon領域OUTの検知が遅いので、そ れを早めに検知したい時は工夫が必要 そう。 ? Beaconデータ受信検知で受信データが 空になった時と組み合わるなど
25.
まとめ ? 実装はかなり簡単。 ? アプリを起動していなくても、起動できるトリガ ーが多い(Beacon
IN/OUT検知、ロック画面表示 時)。 ? まだ流行ってはいないが、日本でも徐々に iBeaconサービスが出てきているので、今後普及 するかも?
26.
佐藤 光 @SatoHikaruDev http://qiita.com/HIkaruSato ご静聴ありがとうございました。
Download