まーぽんって誰がつけたの?

iOS→Scala→インフラなおじさん技術メモ

SwiftでバックグラウンドでもiBeaconを検知する方法

Swfitの練習のためにiBeaconのサンプル作って練習してみました。

iBeaconをバックグラウンドでも受信するポイントは、

  • Info.plistにNSLocationAlwaysUsageDescriptionを追加
  • CapabilitiesでBackground Modesでの位置情報の更新の設定を追加

f:id:masato47744:20141206132237p:plain

  • バックグランド時には位置情報更新をする
// アプリがバックグラウンド状態の場合は位置情報のバックグラウンド更新をする
// これをしないとiBeaconの範囲に入ったか入っていないか検知してくれない
let appStatus = UIApplication.sharedApplication().applicationState
let isBackground = appStatus == .Background || appStatus == .Inactive
if isBackground {
    self.locationManager.startUpdatingLocation()
}
  • 位置情報を利用することをコードでリクエストする
// 位置情報を使うためのユーザーへの認証が必要になる
// 認証を依頼するためにコードでリクエストを出すないといけない
func locationManager(manager: CLLocationManager!, didChangeAuthorizationStatus status: CLAuthorizationStatus) {
    if status == .NotDetermined {
        self.locationManager.requestAlwaysAuthorization()
    }
}

このあたりがちょっとしたはまりどころな気がする。

Swiftも大分慣れてきて楽しくなってきた!