体系对定位权限的设置会跟着时刻发生改变,而咱们只能拥抱改变!本文是对定位权限设置做个记录,便利以后做体系适配。本篇也会继续更新~。
- 在iOS 7及以前: 体系设置里面有
永不
、一直
选项。 - iOS 8-10:
永不
、一直
选项,假如装备NSLocationWhenInUseUsageDescription
会出现运用应用期间
选项.
因为项目中不适配这么低版本体系,所以接下来主要对iOS 11及以上截图记录并且会继续跟踪。
一、iOS 11~12
恳求权限的方式:
- requestWhenInUseAuthorization(),运用应用期间权限,要求
info.plist
中装备NSLocationWhenInUseUsageDescription
这个key和对应的案牍,装备之后,权限弹窗的描绘就是这个案牍。在‘体系设置’中显现的案牍是首先看NSLocationAlwaysAndWhenInUseUsageDescription
的案牍,没有时才显现NSLocationWhenInUseUsageDescription
的案牍。 - requestAlwaysAuthorization(),总是答应权限,要求
info.plist
中装备NSLocationWhenInUseUsageDescription
和NSLocationAlwaysAndWhenInUseUsageDescription
两个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; - 首次运用定位时,需要恳求权限。
- 详细可参阅:后台继续定位开发