質問: iBeacon端末に近づくとLocal Notificationを飛ばすアプリを開発しております。 iOS8から位置情報取得の設定が3種類となり、 * Never * WhenInUse * Always バックグラウンドでのiBeaconの観測については、Alwaysを使用するという認識でしたが クライアントから「可能であればWhenInUseで」という要望があり調べていたところ、 こちらのサイトでWhenInUseでもビーコンのレンジングは可能という表記がありました。 didRangeBeaconsがコールされて、 ビーコン端末のメジャー,マイナーさえ取得できれば処理は可能なのですが、 WhenInUseを指定すると、アプリ起動時/バックグラウンド時かまわずdidRangeBeaconが呼ばれません。 WhenInUse許可時のiBeaconのレンジングはどのように取得するかご存知のかたいらっしゃいますでしょうか。
回答: WhenInUseでの許可時はリンク先のとおり、領域検知ができないので`didEnterRegion` や`didDetermineState`内でのレンジングが開始できません。なので、アプリが 立ち上がったタイミング等でBluetoothの状態を確認し、`startRangingBeaconsInRegion` を実行してレンジングを開始するような形になるかと思います。 ただしBeacon信号を受けたタイミングでLocal Notificationを実施するアプリ には領域検知が必須なように思いますので、Alwaysで許可をもらうようにする 必要があるかと思います。