体系对定位权限的设置会跟着时刻发生改变,而咱们只能拥抱改变!本文是对定位权限设置做个记录,便利以后做体系适配。本篇也会继续更新~。

  • 在iOS 7及以前: 体系设置里面有永不一直选项。
  • iOS 8-10:永不一直选项,假如装备NSLocationWhenInUseUsageDescription 会出现运用应用期间选项.

因为项目中不适配这么低版本体系,所以接下来主要对iOS 11及以上截图记录并且会继续跟踪。

一、iOS 11~12

恳求权限的方式:

  • requestWhenInUseAuthorization(),运用应用期间权限,要求info.plist中装备NSLocationWhenInUseUsageDescription这个key和对应的案牍,装备之后,权限弹窗的描绘就是这个案牍。在‘体系设置’中显现的案牍是首先看NSLocationAlwaysAndWhenInUseUsageDescription的案牍,没有时才显现NSLocationWhenInUseUsageDescription的案牍。
  • requestAlwaysAuthorization(),总是答应权限,要求info.plist中装备NSLocationWhenInUseUsageDescriptionNSLocationAlwaysAndWhenInUseUsageDescription两个key和对应的案牍。装备之后,权限弹窗和设置中的案牍是NSLocationAlwaysAndWhenInUseUsageDescription的案牍。

下面是iOS12的弹窗截图示例

运用期间权限弹窗 “运用期间权限”设置 总是答应权限弹窗 “总是答应”设置
iOS 各个系统版本的定位权限设置
iOS 各个系统版本的定位权限设置
iOS 各个系统版本的定位权限设置
iOS 各个系统版本的定位权限设置

假如恳求到了运用期间权限再恳求总是答应弹窗,则弹窗显现为:NSLocationAlwaysAndWhenInUseUsageDescription的案牍,选项有“运用期间”和“一直答应”。

iOS 各个系统版本的定位权限设置

二、iOS 13

新增了“答应一次”的选项,无论是恳求“运用期间”权限仍是“一直答应”权限,都是弹相同的窗. 弹窗的案牍是NSLocationWhenInUseUsageDescription的案牍。‘体系设置’中显现的阐明案牍是NSLocationAlwaysAndWhenInUseUsageDescription的案牍。

权限弹窗 设置的定位服务 后台定位权限晋级弹窗
iOS 各个系统版本的定位权限设置
iOS 各个系统版本的定位权限设置
iOS 各个系统版本的定位权限设置
  • 假如用户点击的是“答应一次”,那么得到的权限状况是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 各个系统版本的定位权限设置
iOS 各个系统版本的定位权限设置
iOS 各个系统版本的定位权限设置
  • 弹窗中用户点击后的权限成果跟iOS 13相同,不同的是能够点击“准确方位”。
  • 准确方位权限获取经过accuracyAuthorization特点,fullAccuracy为已是彻底准确,reducedAccuracy为降低准确度。

四、iOS 15-16

大体跟iOS 14相同,不相同的地方在于设置中的“下次询问”变成了“下次询问或在我同享时”;

其中“在我同享时” 指的是”隐私-》定位-》体系服务-》同享我的方位”。

五、后台定位

后台需要如下操作:

  • info.plist装备NSLocationAlwaysUsageDescription字段;
  • Xcode勾选 Capabilities -> UIBackgroundModes > Location updates
  • CLLocationManager设置allowsBackgroundLocationUpdates为YES;
  • 首次运用定位时,需要恳求权限。
  • 详细可参阅:后台继续定位开发