iOS
 Computer >> コンピューター >  >> プログラミング >> iOS

iOSアプリで実行時に位置情報の利用許可をリクエストする方法|CLLocationManagerの使い方

iOSで位置情報の利用許可をリクエストするには

本記事では、Appleが提供するCLLocationManagerクラスを使用して、iOSアプリの実行時に位置情報の利用許可をリクエストする方法を解説します。CLLocationManagerは、Core Locationサービスの設定・開始・停止を行うためのクラスです。

詳細は公式ドキュメントをご参照ください。
https://developer.apple.com/documentation/corelocation/cllocationmanager

位置情報アクセスの2つのレベル

iOSアプリでサポートできる位置情報へのアクセスには、次の2種類があります。

  • 「このAppの使用中のみ」(While Using the App):アプリが使用されている間のみ、端末の位置情報へアクセスできます。「使用中の許可(when-in-use authorization)」とも呼ばれます。
  • 「常に」(Always):アプリがフォアグラウンドで使用中でもバックグラウンドでも、常時位置情報へアクセスできます。

今回は「使用中の許可(when-in-use authorization)」を採用します。これは、アプリが動作している間だけ位置情報サービスの利用をユーザーに求める方式です。詳細は以下をご覧ください。
https://developer.apple.com/documentation/corelocation/choosing_the_authorization_level_for_location_services/requesting_when-in-use_authorization

実装手順

ステップ1:プロジェクトの作成

Xcodeを開き、「Single View Application」テンプレートを選択して、新しいプロジェクトを「LocationServices」という名前で作成します。

ステップ2:ボタンの配置

Main.storyboardを開き、ボタンを1つ追加して「getLocation」という名前を付けます。

iOSアプリで実行時に位置情報の利用許可をリクエストする方法|CLLocationManagerの使い方

ステップ3:IBActionの追加

ViewController.swiftに、ボタン用の@IBActionを追加します。

@IBAction func btnGetLocation(_ sender: Any) {
}

ステップ4:CoreLocationのインポート

位置情報関連のクラスを使用できるよう、CoreLocationをインポートします。

import CoreLocation

ステップ5:Info.plistの設定

Info.plistを開きます。アプリの使用中に位置情報の更新を有効化するには、専用のキーの登録が必要です。リスト上で右クリックして「Add Row」を選択し、次の値を入力しましょう。

  • Key:Privacy – Location When In Use Usage Description(NSLocationWhenInUseUsageDescription)
  • Value:ユーザーに向けて、位置情報を利用する理由を簡潔に記載した説明文

iOSアプリで実行時に位置情報の利用許可をリクエストする方法|CLLocationManagerの使い方

ステップ6:CLLocationManagerオブジェクトの生成

ViewController.swiftを開き、CLLocationManagerのオブジェクトを作成します。

let locationManager = CLLocationManager()

ステップ7:ボタンアクションに処理を記述

ViewController.swiftのボタンアクション内に、以下のコードを追加します。

@IBAction func btnGetLocation(_ sender: Any) {
    let locStatus = CLLocationManager.authorizationStatus()
    switch locStatus {
    case .notDetermined:
        locationManager.requestWhenInUseAuthorization()
        return
    case .denied, .restricted:
        let alert = UIAlertController(title: "Location Services are disabled",
                                      message: "Please enable Location Services in your Settings",
                                      preferredStyle: .alert)
        let okAction = UIAlertAction(title: "OK", style: .default, handler: nil)
        alert.addAction(okAction)
        present(alert, animated: true, completion: nil)
        return
    case .authorizedAlways, .authorizedWhenInUse:
        break
    }
}

コードの解説

authorizationStatusは、現在の認証ステータスをlocStatusに返します。ステータスが.notDetermined(未確認)の場合はrequestWhenInUseAuthorization()を呼び出し、システムの許可ダイアログを表示します。.deniedまたは.restrictedの場合は、位置情報サービスが無効であることを伝えるアラートを表示し、設定アプリでの有効化を促します。

when-in-use認証が付与されていれば、アプリがフォアグラウンドにある間、位置情報の更新を受け取ることができます。

補足:iOS 14以降では、クラスメソッド形式のCLLocationManager.authorizationStatus()は非推奨となっています。最新のコードでは、インスタンスプロパティのlocationManager.authorizationStatusを使用することが推奨されます。

アプリを実行して動作を確認

それでは、アプリを実行してみましょう。ボタンをタップすると、位置情報の利用許可を求めるダイアログが表示され、ユーザーの選択に応じて各ステータスの処理が実行されます。

iOSアプリで実行時に位置情報の利用許可をリクエストする方法|CLLocationManagerの使い方

  1. AndroidでGPS位置情報を偽装する方法|アプリ・VPNを使った3つのテクニック

    すべてのAndroid端末にはGPS機能が搭載されており、Googleマップ、Uber、Facebook、Zomatoなどのアプリがあなたの現在地を追跡できるようになっています。GPSによる位置情報は、天気予報、地域のニュース、交通状況、近くのお店やイベント情報など、現在地に関連した情報を受け取るために非常に便利です。しかし、自分の位置情報が第三者や政府機関にアクセス可能な状態になっているという事実に不安を感じる人も少なくありません。また、位置情報によって地域限定コンテンツへのアクセスが制限されることもあります。例えば、自国では配信されていない映画を見たい場合、実際の所在地を隠すことが唯一の解

  2. iOS 12のメッセージアプリで写真(フォトライブラリ)にアクセスして送信する方法

    iOS 3の登場以来、Appleデバイスでは「メッセージ」アプリを通じて写真や動画を送れるようになりました。カメラアイコンをタップして、送りたい写真や動画を選ぶだけというシンプルな操作でした。しかしiOS 12ではこの仕組みが変更されました。とはいえ、写真へのアクセスが完全に不可能になったわけではありません。iOS 12では、「メッセージ」でカメラアイコンをタップすると、iPhoneのカメラが直接起動し、その場で新しい写真や動画を撮影できる仕様になっています。Appleの多彩なカメラエフェクトを使った撮影や、シェイプやステッカーパックの追加なども楽しめます。ただし、「メッセージ」内からフォトラ