iOS 各個系統版本的定位權限設置

系統對定位權限的設置會隨着時間發生變化,而我們只能擁抱變化!本文是對定位權限設置做個記錄,方便以後做系統適配。本篇也會持續更新~。

  • 在iOS 7及以前: 系統設置裏面有永不始終選項。
  • iOS8-10:永不始終選項,如果配置NSLocationWhenInUseUsageDescription會出現使用應用期間選項.

由於項目中不適配這麼低版本系統,所以接下來主要對iOS 11及以上截圖記錄並且會持續跟蹤。

一、iOS 11~12

請求權限的方式:

  • requestWhenInUseAuthorization()
    使用應用期間權限,要求info.plist中配置NSLocationWhenInUseUsageDescription這個key和對應的文案,配置之後,權限彈窗的文案是這個文案;設置中顯示的文案是首先看NSLocationAlwaysAndWhenInUseUsageDescription的文案,沒有時才顯示NSLocationWhenInUseUsageDescription的文案。
  • requestAlwaysAuthorization()
    總是允許權限,要求info.plist中配置NSLocationWhenInUseUsageDescriptionNSLocationAlwaysAndWhenInUseUsageDescription兩個key和對應的文案。配置之後,權限彈窗和設置中的文案是NSLocationAlwaysAndWhenInUseUsageDescription的文案。

下面是iOS12的彈窗示例

使用期間權限彈窗 “使用期間權限”設置 總是允許權限彈窗 “總是允許”設置

如果請求到了使用期間權限再請求總是允許彈窗,則彈窗顯示爲:NSLocationAlwaysAndWhenInUseUsageDescription的文案,選項有“使用期間”和“始終允許”。

二、iOS 13

新增了“允許一次”的選項,無論是申請“使用期間”權限還是“始終允許”權限,都是彈同樣的窗. 彈窗的文案是NSLocationWhenInUseUsageDescription的文案。設置中顯示的文案是NSLocationAlwaysAndWhenInUseUsageDescription的文案。

權限彈窗 設置的定位服務 後臺定位權限升級彈窗
  • 如果用戶點擊的是“允許一次”,那麼得到的權限狀態是authorizedWhenInUse, 設置中顯示的是“下次詢問”,下次請求權限時還會再次彈窗。
  • 如果請求“總是允許”權限,用戶點擊“使用APP時允許”,得到的是authorizedAlways;當app退到後臺後,系統會擇機彈窗提示用戶權限是否要"升級爲始終允許"。
  • 如果請求“使用期間”權限,用戶點擊“使用APP時允許”,得到的是authorizedWhenInUse.
三、iOS 14

相比iOS 13,iOS14 定位彈窗中新增了“精確位置”的顯示,如下圖,用戶可以選擇“打開和關閉精確位置”。
如果用戶沒有打開“精確位置”權限,iOS 14中可以請求臨時的精確位置權限。

if #available(iOS 14.0, *) ,
  self.manager.accuracyAuthorization != .fullAccuracy {
    // 如果在用戶授權定位權限時,沒有選擇“精確位置”,那麼可以通過這個方法來請求“臨時的精確位置”權限
    self.manager.requestTemporaryFullAccuracyAuthorization(withPurposeKey: "hahaKey") { error in
        print("error=\(error)")
        /* error有值的情況:(有值時不會彈授權彈窗)
         1.你寫的PurposeKey參數hahaKey在plist的
           Privacy - Location Temporary Usage Description Dictionary中沒找到。
         2.已經有精確位置的權限了。(可在設置中查看)
         3.app處於後臺時請求 
         4.精確位置權限獲取 self.manager.accuracyAuthorization */
    }
}

注意:iOS 14及以上的權限彈窗中小地圖會不會顯示,取決於“設置-》隱私-》定位服務-》位置提醒是否打開”,未打開時沒有小地圖。

權限彈窗帶地圖 設置的定位服務 請求臨時精確位置權限
  • 彈窗中用戶點擊後的權限結果跟iOS 13一樣,不同的是可以點擊“精確位置”。
  • 精確位置權限獲取通過accuracyAuthorization屬性,fullAccuracy爲已是完全精確,reducedAccuracy爲降低精確度。
四、iOS 15-16

大體跟iOS 14一樣,不一樣的地方在於設置中的“下次詢問”變成了“下次詢問或在我共享時”。
“在我共享時”指的是"隱私-》定位-》系統服務-》共享我的位置"。

五、後臺定位

後臺需要如下操作:

  • 在info.plist配置NSLocationAlwaysUsageDescription字段;
  • Xcode勾選 Capabilities -> UIBackgroundModes > Location updates;
  • CLLocationManager設置allowsBackgroundLocationUpdates爲YES;
  • 首次使用定位時,需要申請權限,如下圖。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章