iOS 定位服务的权限与规则——WWDC2019学习总结

本文深入解析iOS13中的定位服务权限与规则变化,包括CoreLocation框架介绍、权限升级弹框策略、inuse状态解释及后台定位更新的实现方法。同时,探讨iOS13新增的临时授权机制及其对App的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、Core Location

Core Location是iOS系统级别定位服务框架,iOS所有定位服务相关功能都与它相关

工作原理简介:
在这里插入图片描述
遍历过所有APP之后一段时间,系统会将event自动清除

二、权限升级弹框策略

我们都知道,在需要获取用户位置时,会先弹出提示框获得权限,再根据 API 去获取所在位置。但在 iOS 13 中,提示框内容与以往不同。
在这里插入图片描述
会发现,iOS13时,即使App开始的时候就申请“始终允许”权限,但是弹框中并不会出现该选项,原因是iOS13 之后,iOS加入“升级权限弹框”策略,“始终允许”询问被被推迟。

在这种情况下,App首次从,那么系统将会展示一个提示框给用户,如图:
在这里插入图片描述

对于这种权限升级操作,App内部是无感知的,也就是说在升级权限弹框弹出来之前,App内部拿到的权限状态是“始终允许”,直到升级弹框弹出之后,若用户拒绝升级,则App内部获取的权限状态才会发生变化。升级权限弹框只会弹出一次!下图标识用户操作与App内部获取状态,此时的Always状态实际上是临时状态,文章后面会讲到。

beatles > iOS 定位服务的权限与规则——WWDC2019学习总结 > 4e19eabc-e8c0-432f-a260-158c7c80f40f.png

beatles > iOS 定位服务的权限与规则——WWDC2019学习总结 > 601596d6-1df3-4460-89d0-814059f80349.png

三、iOS13中使用时允许变得更加强大

在 iOS 12中,Always 可以接收定位、获取信标范围、在后台继续定位、在后台开启定位、监控位置变化、使用区域监控和访问监控。而 WhenInUse 只有前三者的功能。
在这里插入图片描述

在 iOS 13中,Always 不论 App 是否处于in use,均可以使用 Core Location 的所有 API 。而 WhenInUse 只有在 App in use时才可以使用 API
在这里插入图片描述
注意:对于Always权限来说,无论App是否处于InUse状态(无论App是否被杀掉进程),Core Location 的event都会被该App接收到。也就是说在App被杀死的情况下,仍然可以获取用户的地理位置并且做一些操作。

四、什么情况属于in use?

默认情况:
在这里插入图片描述

开启后台定位更新后(App在后台,仍然处于in use状态,若用户不手动杀死进程,App会一直处于in use状态,不包括被杀掉进程的情况):
在这里插入图片描述

如何开启后台定位更新?

1、BackgroundMode设置中勾选Location updates
在这里插入图片描述
2、CLLocationManager 中 allowsBackgroundLocationUpdates设置成true,默认false

五、新增临时授权

beatles > iOS 定位服务的权限与规则——WWDC2019学习总结 > 7c480b8f3095a02df0fe40d0fdb5c380-1.png

ios 12中,开始的时候是未定义notDetermined,当App发起权限请求的时候,便会出现权限弹框,用户选择后权限便被确定。当然,开始的时候请求了WhenInUse状态后,如果需要,可以再次请求Always权限,询问用户是否更新状态

beatles > iOS 定位服务的权限与规则——WWDC2019学习总结 > 67441b2cffc3ddee634f811740d9cf65.png

iOS13出现.authorizedAlways 和 .authorizedWhenInUse 两种临时状态。

1、authorizedAlways 临时状态是App在最开始就申请Always权限,因为iOS13权限升级弹框策略,所以在用户点击升级弹框之前,虽然App内部获取到的是Always状态,但是属于authorizedAlways 临时状态。只有用户在升级权限弹框中做出明确选择,authorizedAlways 临时状态才会被转化为authorizedAlways状态或authorizedWhenInUse状态。

2、authorizedWhenInUse临时状态是因为iOS13引入新的授权项->Allow Once而增加的状态。当用户选择Allow Once授权时,在本次In Use期间,授权状态都是authorizedWhenInUse临时状态,直到App的in Use状态结束,授权状态才会从authorizedWhenInUse临时状态转化为notDetermined未定义状态,此时再次进入In Use状态时,定位权限弹框会再次弹出。

参考资料:
WWDC 2019 Session 705

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值