【Swift】iOSアプリで位置情報サービスの利用許可をリクエストする方法を解説
iOSアプリで位置情報機能を実装するには、ユーザーから位置情報サービスの利用許可を取得する必要があります。SwiftではCLLocationManagerを使うことで、プログラムから簡単に許可をリクエストできます。
この記事では、サンプルプロジェクトを使いながら、位置情報サービスの許可を求める手順をわかりやすく解説します。
1. CLLocationManagerインスタンスを作成する
まず、ViewController内にCLLocationManagerのインスタンスを作成しましょう。位置情報に関する操作は、すべてこのオブジェクトを通じて行います。
var locationManager = CLLocationManager()
2. 位置情報サービスが有効かどうかを確認する
次に、デバイス本体で位置情報サービスが有効になっているかどうかを確認します。これにはCLLocationManager.locationServicesEnabled()関数を使用します。この関数は、位置情報サービスが有効かどうかを示すBoolean値を返します。
if CLLocationManager.locationServicesEnabled() {
print("permissions allowed")
} else {
locationManager.requestAlwaysAuthorization()
locationManager.requestWhenInUseAuthorization()
}この例では、位置情報サービスが有効な場合は「permissions allowed」と出力し、無効な場合は2種類の認証リクエストを送ります。
- requestAlwaysAuthorization():常に位置情報を使用する許可をリクエスト(バックグラウンドでも利用可能)
- requestWhenInUseAuthorization():アプリ使用中のみ位置情報を使用する許可をリクエスト
注意:Info.plistへの記述が必要
実際に許可ダイアログを表示するには、Info.plistに用途を説明するキーの設定が必須です。設定しないとアプリがクラッシュするので注意してください。
- 「アプリ使用中のみ」の場合:
NSLocationWhenInUseUsageDescription - 「常時」の場合:
NSLocationAlwaysAndWhenInUseUsageDescription
3. 現在の許可状態を判定する
続いて、位置情報サービスが有効なデバイスで、どのような許可が与えられているのかを確認する方法を見ていきましょう。
CLLocationManager.authorizationStatus()メソッドを使用すると、現在付与されている認証の種類を取得できます。この戻り値は列挙型(enum)で、以下の5つの値を持っています。
- .notDetermined:まだ許可を求めていない状態
- .restricted:システムやペアレンタルコントロールにより制限されている状態
- .denied:ユーザーが許可を拒否した状態
- .authorizedAlways:常に位置情報の使用が許可されている状態
- .authorizedWhenInUse:アプリ使用中のみ位置情報の使用が許可されている状態
Apple公式ドキュメントにもこれらの値が記載されています。それでは、実際のコード例を見てみましょう。
if CLLocationManager.locationServicesEnabled() {
switch CLLocationManager.authorizationStatus() {
case .authorizedAlways, .authorizedWhenInUse:
print("authorized.")
case .denied, .restricted, .notDetermined:
print("not authorized.")
@unknown default:
break
}
}このコードでは、許可ステータスが.authorizedAlwaysまたは.authorizedWhenInUseの場合に「authorized.」と出力し、それ以外(.denied、.restricted、.notDetermined)の場合は「not authorized.」と出力します。
まとめ
iOSで位置情報サービスの許可を取得する流れは、以下の3ステップです。
- CLLocationManagerのインスタンスを作成する
locationServicesEnabled()でサービス有効性を確認し、必要に応じて許可をリクエストするauthorizationStatus()で現在の許可状態を判定して処理を分岐させる
また、Info.plistへの用途説明の記述も忘れずに行いましょう。適切なタイミングで許可を求めることで、ユーザー体験を損なわない位置情報機能を実装できます。
-
iPhoneを追跡する方法|紛失・盗難時に役立つ3つの手段
iPhoneの位置情報サービスで行動履歴を確認するiPhoneを紛失したり盗難に遭ったりした場合、端末を追跡できるかどうかは復旧の鍵を握ります。Appleが提供する「iPhoneを探す(Find My iPhone)」機能を活用すれば、誰でも簡単に端末の位置を把握できます。iPhoneの位置情報サービスは、カメラ、Webサイト、SNSアプリ、マップなど、位置情報を利用するアプリへの許可を管理する仕組みです。位置情報サービスがオンになっていると、iPhoneは自分が訪れた場所を記録し、訪問回数まで保存します。この情報を確認するには、以下の手順に従ってください。設定 → プライバシー → 位置情報
-
iPhoneのiOSをダウングレードする方法【ベータ版・正式版それぞれの戻し方】
iOSのアップデートは非常に魅力的です。iPhoneの機能を向上させる素晴らしい新機能が追加されるだけでなく、ほとんどのマイナーアップデートには、既知のバグや不具合を修正する多数の修正も含まれています。 しかし、iOSのベータ版は話が別です。ベータ版では、重要な機能が動作しなくなったり、アプリが正常に起動できなくなったり、バッテリー関連の問題が発生したりすることがよくあります。まれに、正式リリース版でも同様の問題が起こることがあります。 他のトラブルシューティング手段をすべて試しても解決しない場合(iPhoneのリセットは試しましたか?)、iOSのダウングレードが有効な解決策になる可能