D018521bb2b9ab0b10cab197f796081d
WWDC20 10660 - 位置的新功能

本篇梳理基于:What's new in location

用户隐私问题一直是苹果公司比较重视的事情,在去年的小专栏 WWDC19 内参,关于CoreLocation我也分享了一篇文章(WWDC19:What's New in Core Location - 新增定位临时授权)。在开始介绍今年的location新特性之前,我们先看一下 iOS 13 中的定位授权状态。

  • 不允许
  • 使用期间允许
  • 始终允许

iOS 13 中的Allow Once只允许一次,本质上也是While Using的授权状态,之前的文章有分析,这里不再赘述。

关于定位授权,站在用户的角度,他们可能会想:

  • App 需要知道多少信息才能完成这个功能?
  • App 是否真的需要知道我确切的位置?

例如当我们使用导航类 App 时,提供精确的位置有助于我们到达目的地。但以约会 App 或本地生活 App 为例,如果你有用户的确切位置,你当然有可能对他们进行超定向推荐或匹配。这对一些人来说是一个很好的功能,但是另一些人可能对这个并不感兴趣,他们宁愿完全不共享位置也不愿意使用这个功能。

在 iOS 13 中,获取用户位置授权的初始提示是左图这样的内容。从 iOS 14 开始,如右图所示,提示中将出现一个新的选项——Precise 精确。这个选项允许用户只向 App 授予大概的位置,而不是确切的位置。这个选项,在手机的设置功能里用户可以自行通过开关控制。

现在用户可以从两个维度上指定他们希望授予 App 位置访问权限,一是 “什么时候”,二是“多少”。用户可以通过授权执行各种操作,例如先在 Reduced 的情况下授予使用权,然后将其升级为 Full,甚至进行诸如将授权更改为 Always,然后再次将精度降级为 Reduced 的操作。

Core Location 的新API
首先,CLLocationManager的类方法被弃用了,被替换成一个属性。

同时引入了一个新的属性CLAccuracyAuthorization,是一个枚举类型,指定位的精确度。.fullAccuracy是 iOS 14 之前版本的默认值,代表高精度。.reducedAccuracy是新增的,代表低精度。

locationManagerDidChangeAuthorization 替换了旧的代理回调方法。

每当authorizationStatusaccuracyAuthorization属性值发生更改时,就会调用此新方法。

采用精度授权,定位是如何传递的:

  • didUpdateLocations的代理方法,依旧由CLLocation对象委托,具有CLLocationCoordinate2D中心点和较大的水平精度值。
  • 这些位置每小时会重新计算四次。因此,如果App中有一些超时逻辑,则应确保使用accuracyAuthorization的值通知它。
  • 定位会包含用户的真实位置。

打开苹果地图应用,在 iOS 14 中当 App 第一次询问位置时,用户会看到下图的提示。界面上有内置地图,同时提供了 Precise的开关。当设置为 On 时,地图上显示的精确的一个点位置;当切换为Off时,UI 将显示一个表示用户大致位置的圆。

让我们看看定位授权之后的情况。UI 上显示了一个圆,其中包含了用户的真实位置,同时页面顶部展示了一个横幅,让用户清楚的知道当前定位精度已关闭。然而,通常地图应用都是用于导航,如果我们要去一个地方,这个时候应用需要获取我们的精确定位,如右图红框所示。

作为开发者,如果用户只授权了大概位置,而 App 的功能需要有一个精确的位置,那这个时候应该怎么做?

第一,可以通过手机设置,要求永久授权精确定位。但这对用户来说并不友好。
第二,通过 API 暂时地授予精确定位。

CLLocationManager 有一个新的方法,可以请求临时精确定位授权,但必须设置一个目的键PurposeKey。当用户响应之后,在block回调方法中再根据accuracyAuthorization来做相应的处理。

这里有一个非常重要的点。在向用户请求临时精确定位时必须要清楚地解释原因,也就是授权弹窗的提示内容,以确保用户授予访问权限。目的键PurposeKey一定要在info.plist文件里的NSLocationTemporaryUsageDescriptionDictionary中配置。在不同的场景下,目的键PurposeKey可以配置多个。

临时精确定位的工作原理与 iOS 13 中引入的“允许一次”行为很相似。也就是说,当用户下次重新启动 App 并触发需要临时精确定位的功能时,他们会收到请求提示。只要用户没有退出还在使用 App 时,就无需再次请求。

在采用精确定位授权之前,有几个要点需要考虑:

  • 确保 APP 基于位置的功能可以应对未获得精确定位授权的问题
  • 仅在必要时才向用户请求精确定位授权
  • 如果可以的话使用临时精确定位

现在,让我们谈谈根据新的精确性定位授权如何考虑后台定位更新。

top Created with Sketch.