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

Swiftでバックグラウンド実行中に現在地を取得する方法【CoreLocation完全解説】

iOSアプリでバックグラウンド状態でも位置情報を継続的に取得したいケースは多くあります。例えば、配達アプリやフィットネスアプリ、ナビゲーション機能などがその代表例です。この記事では、Swiftを使ってバックグラウンドで現在位置を取得し、サーバーへ送信するまでの一連の手順を解説します。

1. Info.plistで必要な権限を設定する

まず、ユーザーから位置情報の利用許可を得るために、Info.plistに以下の2つのキーを追加します。

  • Privacy – Location Always and When In Use Usage Description(常に使用時および使用中のみ): アプリが常時位置情報を使用する理由の説明
  • Privacy – When In Use Usage Description(使用中のみ): アプリの使用中だけ位置情報を使用する場合の説明

それぞれのキーには、ユーザーに対して「なぜ位置情報が必要なのか」を分かりやすく記述してください。説明が不適切だとApp Storeの審査でリジェクトされる可能性があります。

2. CoreLocationフレームワークを読み込む

次に、位置情報関連のライブラリやメソッドを使用できるようにするため、CoreLocationフレームワークを利用します。ユーザーから位置情報の使用許可を得るには、CLLocationManagerオブジェクトを作成し、認証をリクエストします。

var locationManager: CLLocationManager?
override func viewDidLoad() {
   super.viewDidLoad()
   locationManager = CLLocationManager()
   locationManager?.delegate = self
   locationManager?.requestAlwaysAuthorization()
}

requestAlwaysAuthorization()を呼び出すと、アプリの起動時に「常に許可」を求めるダイアログが表示されます。なお、iOS 13以降では最初に「使用中のみ許可」が表示され、後から「常に許可」へアップグレードする仕様になっている点に注意しましょう。

3. 位置情報の監視を開始する

許可が得られたら、以下のコードを追加して位置情報の監視を開始します。

locationManager.startUpdatingLocation()
locationManager.startMonitoringSignificantLocationChanges()
locationManager.allowsBackgroundLocationUpdates = true

各メソッドの役割は次のとおりです。

  • startUpdatingLocation(): 継続的に高精度な位置情報の更新を行う
  • startMonitoringSignificantLocationChanges(): 基地局の切り替えなど、大幅な移動があった場合のみ通知を受け取る(省電力)
  • allowsBackgroundLocationUpdates = true: バックグラウンドでも位置情報の更新を有効にする

なお、allowsBackgroundLocationUpdatesを有効化するには、Xcodeの「Signing & Capabilities」でBackground Modesを追加し、「Location updates」にチェックを入れておく必要があります。

4. 位置情報の更新を検知してサーバーへ送信する

準備が整ったら、CLLocationManagerDelegatedidUpdateLocationsメソッドを実装します。このメソッドは位置情報が更新されるたびに呼び出されるため、ここでAPIを叩いてサーバーへ現在地を送信できます。

func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
   // APIを呼び出して位置情報をサーバーに更新
}

位置情報が更新されるたびにこのデリゲートメソッドが呼び出され、その内部でサーバーへの送信処理などを記述することで、アプリがバックグラウンドにある間も最新の位置情報を提供し続けることが可能になります。

注意点

バックグラウンドでの位置情報取得はバッテリー消費が大きいため、必要最小限の設定にとどめることが推奨されます。また、常時位置情報を利用する場合は、Appleの審査ガイドラインに沿って正当な理由を明示することが重要です。

  1. React Nativeで動画を背景に使う方法をわかりやすく解説

    この記事では、React Nativeで背景動画(backgroundVideo)を作成する方法を解説します。React Nativeを始めたばかりの方は、まず「React Nativeでモバイルアプリ開発を始めるために知っておくべきこと」といった入門記事を読んでおくと理解がスムーズになります。背景動画はアプリのUIに洗練された印象を与える演出手段です。広告の表示やユーザーへのメッセージ伝達など、さまざまな用途に活用できます。今回はPeletonアプリのホーム画面のようなデザインを目標に、実装方法を見ていきましょう。前提条件実装を始める前に、以下の環境が整っている必要があります。react-n

  2. Windowsタスクスケジューラでタスクをバックグラウンド(非表示)またはフォアグラウンドで実行する方法

    Windowsでは、タスクスケジューラを利用して、特定のアプリケーションやバッチファイルをバックグラウンド(非表示)またはフォアグラウンド(画面に表示)で実行したいケースがあります。本記事では、Windowsのスケジュールされたタスクをバックグラウンドまたはフォアグラウンドで実行するように設定する手順を、ステップバイステップでわかりやすく解説します。 タスクをバックグラウンドで実行する設定方法 スケジュールされたタスクの実行方式(表示/非表示)は、タスクのプロパティにある「全般」タブで設定できます。 基本の手順 1. 新しくタスクを作成した場合、デフォルトでは「ユーザーがログオンしているときの