※本記事は、一般に公開されている情報を元に作成しています。記事中の画像はWWDCのスライドのものを引用させて頂いております
WWDC 2020 開幕しましたね!位置情報まわりも色々変更があったのでまとめてみます。
正確な位置情報を使用するかどうかユーザーが選択できるようになった
iOS 14 では位置情報の使用許可を求められる際「Precise On(正確な位置情報)」オプションが表示されます。Precise は「正確な」という意味です。
このオプションをオフにすると、例えば地図を利用する場合はおなじみの青いドットは表示されず、このような大きめの円が現在地として表示されるようになります。
ユーザーは設定画面からこの設定を変更することができます。
実際にユーザーが居る位置とは数キロメートルずれることが予想されるので、正確な位置情報を前提としたアプリは注意が必要ですね。
ユーザーの許可ステータスは accuracyAuthorization
で取得できます
この許可ステータスは iOS、Apple Watch と同期されます。
正確な位置情報を必要としないアプリの場合
正確な位置情報を必要としないことがわかっている場合は Info.plist の NSLocationDefaultAccuracyReduced
を true にしておくと、デフォルトでこのオプションが非表示になります。
このとき accuracyAuthorization
は .reducedAccuracy
になります。
iOS 14時代の位置情報許可ステータスチェック
前述のように、iOS 14以降は「位置情報の使用を許可しているか」に加え「正確な位置情報の使用を許可しているか」が追加されたので、次のようにステータスをチェックすると良いでしょう。(WWDCのスライドから引用)
switch manager.authorizationStatus() {
case .authorizedAlways, .authorizedWhenInUse:
// 位置情報の使用を許可している
case .notDetermined, .denied, .restricted:
// 位置情報の使用を許可していない
default:
// Unhandled case
}
switch manager.accuracyAuthorization {
case .fullAccuracy:
// 正確な位置情報の使用を許可している
case .reducedAccuracy:
// 正確な位置情報の使用を許可していない
default:
// Unhandled case
}
一時的にPrecise設定をオンにもできる
例えばナビ機能を使うときだけ正確な位置情報の取得を許可する、みたいな使い方もできます。
if locationManager.accuracyAuthorization == .reducedAccuracy {
locationManager.requestTemporaryFullAccuracyAuthorization(withPurposeKey: "WantsToNavigate") { _ in
if self.locationManager.accuracyAuthorization == .fullAccuracy {
print("begin navigate")
}
}
} else {
print("begin navigate")
}
Info.plist の NSLocationTemporaryUsageDescriptionDictionary
には「一時的に正確な位置情報を使う理由」を複数セットできます。
通常は正確な位置情報を必要としないアプリの場合、とても有効ですね。
App Clips の位置情報について
App Clips から位置情報を使用する場合は選択肢が
- 1度だけ許可
- 明日まで許可
になるので注意してください。
つまり、App Clips は「常に位置情報を許可する」が選択できません。
※これを、12時を過ぎれば馬車もドレスも魔法が解けて元に戻ってしまうシンデレラに例えて説明してるのが面白かったです。
WidgetKit での位置情報について
Widgets で位置情報を使用するには Info.plist に NSWidgetWantsLocation
をセットします。
Widgets からは位置情報の許可を求めるダイアログは表示できないので、親アプリで位置情報の使用を許可してもらう必要があります。このあたり、どんなフローでユーザーに許可してもらうか?が重要になってきそうですね。
まとめ
今年の What's new in location をひとことでまとめるなら 「必要なときに、必要な権限を」 といったところでしょうか。
Appleが、よりプライバシーに配慮している印象を受けました。