iOS8の位置情報機能について

iOS8の位置情報機能で新しくできるようになること

・Visit Monitoring
ユーザーがいる場所に関しての滞在履歴を取得

・Indoor Positioning
ユーザーの屋内位置の情報を取得

・Location Authorization
位置情報の使用に関してユーザーに対して細かい許可を確認

それではひとつずつ見て行きます

Visit Monitoring

CLVisitはユーザーの滞在履歴を提供してくれます
まず試しに実装してみました

- (void)viewDidLoad{

     [super viewDidLoad];

    // CLLocationManagerの生成とデリゲートの設定
    self.manager = [CLLocationManager new];
    self.manager.delegate = self;

    //Visitの取得開始
    [self.manager startMonitoringVisits];

}

//Visitを受け取る
- (void)locationManager:(CLLocationManager *)manager didVisit:(CLVisit *)visit {
    
    NSDateFormatter *outputFormatter = [[NSDateFormatter alloc] init];    
    [outputFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
    
    NSString* arrivalDate = [outputFormatter stringFromDate:visit.arrivalDate];
    NSString* departureDate = [outputFormatter stringFromDate:visit.departureDate];
    NSString* latitude = [NSString stringWithFormat:@"%f",visit.coordinate.latitude];
    NSString* longitude = [NSString stringWithFormat:@"%f",visit.coordinate.longitude];
    
    //緯度経度・到着時間・出発時間をローカル通知で表示
    NSMutableString* message = [NSMutableString string];
    [message appendString:[NSString stringWithFormat:@"緯度:%@\n",latitude]];
    [message appendString:[NSString stringWithFormat:@"経度:%@\n",longitude]];
    [message appendString:[NSString stringWithFormat:@"到着時間:%@\n",arrivalDate]];
    [message appendString:[NSString stringWithFormat:@"出発時間:%@\n",departureDate]];
    
    self.label.text = message;

    [self sendNotification:message];
}

緯度:35.679736
経度:139.706670
到着時間:2014-07-10 09:44:07
出発時間:2014-07-10 22:00:37

この緯度経度はオフィスの位置です
9時44分にオフィスに到着して22時00分にオフィスを離れたことが分かります。
どのような条件でVisitの通知が来るかの情報はありませんでした。
ですが、オフィスの到着・出発の時間は正確です。
ちなみにランチなどの外出時にも持ち歩いていましたが、出勤・帰宅時のみ通知が来ました。
Visit Monitoringは今後もう少し調査が必要です。

Indoor Positioning

ユーザーの屋内位置情報を提供してくれます。
新しいクラスとしてはCLFloorが追加されました。
リファレンスには、
CLFloor object specifies the floor of the building on which the user is located. In places where floor information can be determined, a CLLocation object may include a floor object along with the regular location data.
CLFloorオブジェクトは、ユーザーがいる建物のフロアを特定します。
フロア情報を決定することができる場所の場合、CLLocationには、通常の位置データと共にフロア情報が含まれます。
とあります。

フロアの情報はどの建物でも取得できるわけではなく、
Appleに建物の内部のマップを申請した建物の場合に取得できるようです。

建物の所有者はこちらから屋内マップの申請が可能です。
https://mapsconnect.apple.com/

Apple IDでのログインが必要ですが、別に開発者のものでなくてもよいです。
WiFi・iBeaconの設置情報と地図データをAppleが収集して、
それらを「アンカーポイント」として利用することでIndoor Positioningを提供します。

Location Authorization

アプリの起動中/停止中のさまざまな状態に対して、位置情報を取得の許可を細かく設定できるようになりました。
使用できるメソッドは以下の2つ

requestAlwaysAuthorization
アプリを起動していなくても全ての位置情報サービスを使用できる

requestWhenInUseAuthorization
アプリを起動していないと以下のサービスは使用できない
・region monitoring(iBeaconの領域監視)
・significant location change service(大幅位置変更サービス)

アクティブな位置情報サービスがバックグラウンドに移行したときには
ステータスバーに「位置情報サービス使用中」の表示がされます。


今回の調査は以上です。
引き続きiOS8の位置情報機能については調査をすすめていきます。

iOS8の位置情報機能について iOS8の位置情報機能について Reviewed by Masafumi Abe on 13:18:00 Rating: 5
Powered by Blogger.