【iOS 11対応】知っておきたい位置情報周りの変更点

  • 75
    Like
  • 0
    Comment

※本記事は、一般に公開されている情報を元に作成しています。記事中の画像はWWDCのスライドのものを引用しております

位置情報を扱うiOSアプリを開発する際に必要となる Core Location ですが、iOS 11 でもいくつか変更点があるようです。気になったものを以下にまとめます。

CLGeocoder improvements

GLGeocoder が Contacts framework をサポートしました。

image.png

例えば GLPlacemark から CNPostalAddress を取得することも可能になりました。

Authorization and usage reporting

権限周りも大きな変更がありました。位置情報を利用する際、今までは

  • NSLocationWhenInUseUsageDescription(使用中のみ許可)
  • NSLocationAlwaysUsageDescription(常に許可)

のどちらかをサポートすればよかったのですが、iOS 11 からは NSLocationWhenInUseUsageDescription(使用中のみ許可) のサポートが必須になりました。

つまりこれは、"常に位置情報の使用を許可しないといけないアプリ"が、今後なくなることを意味します。

また、この変更はすでに公開済みの古いアプリにも適用されます。

上記エントリのように、今まで「常に許可」しか選択できなかったアプリが、突然 iOS 11 から「使用中のみ許可」も選択できるようになるのはこのためです。

この変更に伴い、「常に許可」と「使用中のみ許可」を両方含んだ新しいプライバシー項目(NSLocationAlwaysAndWhenInUseUsageDescription)が追加になっています。

image.png

初回起動時など、ユーザが何も許可していない状態で requestAlwaysAuthorization を実行すると、この NSLocationAlwaysAndWhenInUseUsageDescription がダイアログに表示されます。ユーザは「常に許可」か「使用中のみ許可」を選択できます。

Supporting Always Authorization

今後も「常に許可」をサポートしつつ、かつ古いiOSバージョンもサポートしたい場合は、すべてのプライバシー項目を設定し、ユーザにそれぞれの権限が選択可能である旨を説明するのがベストプラクティスのようです。

image.png

Requesting Authorization

「常に許可」はあくまで「使用中のみ許可」の追加要素であり、まずはユーザに「使用中のみ許可」を求め、その後必要になったときに「常に許可」へ遷移するフローをAppleは推奨しているようです。

image.png

次の図では、ユーザーによる許可ステータスの遷移がわかりやすくまとまっています。

image.png

今後もしかすると NSLocationAlwaysUsageDescription が無くなるかもしれませんね。

Location Usage Indicators

iOS 10 までは「使用中のみ許可」したアプリが、バックグラウンド動作中に位置情報を使用した場合「○○が位置情報を利用中」という青いバーが表示されたと思います。(例:Google Maps アプリでナビモード実行中にホームボタンを押してバックグラウンド状態にした場合)

iOS 11 からは「常に許可」のアプリがバックグラウンド中に位置情報を使用した場合も 常にこの青いバーが表示 されるようになります。(iOS 11リリース直後はこの仕様を知らないユーザーさんが混乱しそうですね)

image.png

画面右上の矢印のポリシーにも変更があります。

image.png

Hollow arrow: 位置情報要求中

image.png

Solid arrow: 位置情報受信中

image.png

まとめ

「使用中のみ許可」しかサポートしていないアプリはあまり影響がなさそうですが、「常に許可」をサポートしている場合は、そのアプリが位置情報を常に使わなければならない理由を説明するなど、何かしらの対応が必要そうですね。