iOS14 Core Location后台定位


首先貼出 官方文檔:https://developer.apple.com/documentation/corelocation/choosing_the_location_services_authorization_to_request 詳細介紹了如何確定你需要申請的Location權限。

定位的權限申請

在iOS14中,使用用戶Gps信息,需要申請權限。申請的權限分為2種。

When In Use
Always

When In Use提示界面如下:
image

Always 的申請方式有2種,提示界面也稍有不同,
第一種是先成功申請到了 When In Use,之后使用requestAlwaysAuthorization申請always,彈出如下界面:
image

第二種是直接使用requestAlwaysAuthorization,但是程序彈出的界面還是When In Use的界面,如果用戶允許了,當系統第一次在后台向app發送gps信息時,會自動彈出第二個授權界面:
image

這2種權限的最大不同在於,當app被kill掉后,Always權限能夠讓系統在后台自動啟動被kill掉的程序,運行相應的代碼。對於個人隱私來說,這是一個十分危險的選項!為了應對這個隱私安全問題,iOS會定期彈出通知,提醒你這個程序又在后台使用了你的位置,起到了一定的安全作用,如下圖:
image

在background模式下獲取location

無論是 When In Use 還是 Always 權限,只要不kill掉app,app都可以在后台持續收集gps信息。
要開啟后台模式,首先開啟Location update的 backgroud mode ,如圖:
image

再設置 allowsBackgroundLocationUpdates = true,就能在程序進入backend后,繼續跟蹤用戶的坐標信息。
如果想更加明確地告知用戶正在使用后台定位,可以設置
locationManager.showsBackgroundLocationIndicator = true
這樣在status bar左上會顯示藍色定位圖標,表示正在后台使用導航定位。如圖:image

如需要關閉后台定位,只需要設置 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之間

選擇合適的精確度,可以大幅降低電池的消耗。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM