如何讓 APP 在背景不間斷的取得使用者的位置資訊

法蘭克的 iOS 世界
3 min readJul 23, 2018

--

如何讓我們的 App 像 Nike + Run Club 或 Google Map 的 APP 一樣,不間斷的在背景持續取得使用者的位置資訊?其實說難也不難,只要在 Xcode 開啟 Background Modes 和在 CLLocationManager 動些手腳就可以囉😀

實作流程說明

  1. 在 Xcode 開啟 Background Modes。
  2. 在 Info.plist 加入取用使用者位置的隱私權。
  3. 設定 CLLocationManager 背景執行的相關屬性。

實作

在 Xcode 開啟 Background Mode

背景模式又細分為在背景下載資料、聽音樂、位置更新等等,所以我們除了打開背景模式外,還要打開位置更新

Target → Capabilities → Background Modes → Location updates

在 Info.plist 加入取用使用者位置的隱私權

要取得使用者的位置,這是悠關於隱私權的部份,所以必須先行詢問使用者,方能取得其位置資訊。所以得先必須在 Info.plist 加入以下三條隱私權。

  • Privacy — Location Always and When In Use Usage Description
  • Privacy — Location Always Usage Description
  • Privacy — Location When In Use Usage Description

▼且必須說明其取得位置資訊的用途為何,否則在送審可是會被駁回的

▼啟動 App 後請選取永遠允許,才能在背景取得位置資訊

設定 CLLocationManager 背景執行的相關屬性

要取得使用者的位置得必須使用 CLLocationManager 物件,還得必須設定相關屬性才可,以下先行附上程式碼,再來細細說明。

第 2 行 => 要使用 CLLocationManager,得先必須匯入 CoreLocation 套件。

第 11 行 => 生成 CLLocationManager 物件。

第 12 行 => 開啟允許背景更新(預設為 false)。

第 13 行 => 不間斷的在背景更新(預設為 true)。

若是沒有將 pausesLocationUpdateAutomatically 設為 false約莫 20 分鐘 CLLocationManager 就會停止更新地理位

第 14 行 => 詢問使用者是否在背景也可取用其位置的隱私

第 15 行 => 代理 CLLocationManager。

第 21 ~ 31 行 => 遵循 CLLocationManagerDelegate 的 locationManager(_:didUpdateLocations:) 以取得使用者的位置資訊。

以上完成,試著安裝至裝置上測試測試囉😀

如果您喜歡我的文章,請多按幾下「拍手」給我鼓勵,或是按「follow」讓我持續提供好文章給您。

--

--

No responses yet