首先貼出 官方文檔:https://developer.apple.com/documentation/corelocation/choosing_the_location_services_authorization_to_request 詳細介紹了如何確定你需要申請的Location權限。
定位的權限申請
在iOS14中,使用用戶Gps信息,需要申請權限。申請的權限分為2種。
When In Use
Always
When In Use提示界面如下:
Always 的申請方式有2種,提示界面也稍有不同,
第一種是先成功申請到了 When In Use,之后使用requestAlwaysAuthorization申請always,彈出如下界面:
第二種是直接使用requestAlwaysAuthorization,但是程序彈出的界面還是When In Use的界面,如果用戶允許了,當系統第一次在后台向app發送gps信息時,會自動彈出第二個授權界面:
這2種權限的最大不同在於,當app被kill掉后,Always權限能夠讓系統在后台自動啟動被kill掉的程序,運行相應的代碼。對於個人隱私來說,這是一個十分危險的選項!為了應對這個隱私安全問題,iOS會定期彈出通知,提醒你這個程序又在后台使用了你的位置,起到了一定的安全作用,如下圖:
在background模式下獲取location
無論是 When In Use 還是 Always 權限,只要不kill掉app,app都可以在后台持續收集gps信息。
要開啟后台模式,首先開啟Location update的 backgroud mode ,如圖:
再設置 allowsBackgroundLocationUpdates = true,就能在程序進入backend后,繼續跟蹤用戶的坐標信息。
如果想更加明確地告知用戶正在使用后台定位,可以設置
locationManager.showsBackgroundLocationIndicator = true
這樣在status bar左上會顯示藍色定位圖標,表示正在后台使用導航定位。如圖:
如需要關閉后台定位,只需要設置 allowsBackgroundLocationUpdates = false
,這樣程序進入后台,也不會取定位信息了。
定位精確度和耗電
location的精確度和耗電息息相關,越精確越耗電。通過 locationManager.desiredAccuracy
可以設定精確度。
精確度從高到低依次為:
public let kCLLocationAccuracyBestForNavigation: CLLocationAccuracy //導航應用使用
public let kCLLocationAccuracyBest: CLLocationAccuracy //iOS 默認值
public let kCLLocationAccuracyNearestTenMeters: CLLocationAccuracy
public let kCLLocationAccuracyHundredMeters: CLLocationAccuracy
public let kCLLocationAccuracyKilometer: CLLocationAccuracy
public let kCLLocationAccuracyThreeKilometers: CLLocationAccuracy
public let kCLLocationAccuracyReduced: CLLocationAccuracy // 最不精確,不精確范圍在1-20km之間
選擇合適的精確度,可以大幅降低電池的消耗。