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 tips(potatotips27)

1,235 views

Published on

iBeacon Tips

Published in: Technology
  • Be the first to comment

  • Be the first to like this

iBeacon tips(potatotips27)

  1. 1. iBeacon Tips potatotips-27 佐藤 光 iOS App Developer
  2. 2. 佐藤 光 @SatoHikaruDev iOSアプリのプログラミングと、少しのサーバーサイドjavaやAndroidアプリの プログラミングをしています。 自己紹介
  3. 3. 目次 • iBeaconとは • iBeacon利用時に必要な条件 • 実装 • よいと思ったところ • 悪いと思ったところ
  4. 4. iBeaconとは?
  5. 5. • Beaconと呼ばれる発信機から出て いるBluetooth Low Energy(BLE) の信号を受信する機能。
  6. 6. • 近くのお店のクーポンや商品情報 を通知にするのに利用されている 。
  7. 7. • iOS7に搭載されて、2014年ぐら いに話題になったが、いまだあまり 多くに浸透はしていないように感じ ている(似たような技術のNFCに比 べて)。
  8. 8. • だが、アイデア次第では今後ブレイ クの可能性はまだまだあるのでは? と思って、今回の題材にしました。
  9. 9. iBeacon利用時に必要な条件
  10. 10. • Beacon機器(aplix、estimote、Gimbalなど) ✓ 1個300円〜3000円くらい ✓ iPhoneやMacでもOK • iOS7以降 • Bluetoothが搭載されたiPhone/iPad/iPodなど
  11. 11. 実装
  12. 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. 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. 14. Beacon領域IN/OUTのエラー検知(delegate) /** * beacon監視でエラー。 */ func locationManager(manager: CLLocationManager, monitoringDidFailForRegion region: CLRegion?, withError error: NSError) { //ex) 監視するbeaconが無効、beaconを21種類以上登録した場合など }
  15. 15. Beaconデータの受信開始 locationManager.delegate = self //Beaconデータの受信開始。Beaconデータ(CLBeacon)には //uuid/major/minor/CLProximity(すぐ近く/近い/遠い)/rssi(信号強度)が入っている locationManager.startRangingBeaconsInRegion(beaconRegion)
  16. 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. 17. Beaconデータ受信のエラー検知(delegate) func locationManager(manager: CLLocationManager, rangingBeaconsDidFailForRegion region: CLBeaconRegion, withError error: NSError) { //beaconデータ受信でエラー。 //ex) 監視するbeaconが無効など }
  18. 18. よいと思ったところ
  19. 19. • iPhoneのロック解除ボタンを押した時にも Beacon検知タイミングがあるところ。 ✓ ローカル通知したいときに、ユーザーの目に つきそう
  20. 20. • Beacon検知している時、ロック画面左下に アプリのアイコンが表示される。 by スマートフォンECラボ(http://smartphone-ec.net/)
  21. 21. • 省電力 ✓ iBeaconの方が、GPSを利用した領域観測 (iOSの別機能)に比べて電池が長持ちしそう ✓ Beacon機器は乾電池2本でほとんどのもの が1年以上は持つ。
  22. 22. 悪いと思ったところ
  23. 23. • iPhoneの電源ONにした直後1〜5 分くらいBeaconを検知できない時 間がある。
  24. 24. • Beacon領域OUTの検知が遅いので、そ れを早めに検知したい時は工夫が必要 そう。 ✓ Beaconデータ受信検知で受信データが 空になった時と組み合わるなど
  25. 25. まとめ • 実装はかなり簡単。 • アプリを起動していなくても、起動できるトリガ ーが多い(Beacon IN/OUT検知、ロック画面表示 時)。 • まだ流行ってはいないが、日本でも徐々に iBeaconサービスが出てきているので、今後普及 するかも?
  26. 26. 佐藤 光 @SatoHikaruDev http://qiita.com/HIkaruSato ご静聴ありがとうございました。

×