A07dab5460465e3caf0a266920d73252
What's New in Core Location:新增定位临时授权

在今年的 WWDC 中,iOS 13的其中一个主题就是隐私,session 705 是其中之一,该 session 主要介绍了 Core Location 的一些新变化。

我们都知道,在需要获取用户位置时,会先弹出提示框获得权限,再根据 API 去获取所在位置。但在 iOS 13 中,提示框内容与以往不同。

始终允许被推迟

先创建CLLocationManager 请求定位权限。

var locationManager = CLLocationManager()

locationManager.requestWhenInUseAuthorization()
 // -- OR requesrequestAlwaysAuthorization() --

在用户授权之后,若其他事件进入,比如接电话或者回复短信,应用就会退到后台,那么系统将会展示一个提示框给用户。

在这个提示框中,我们看到了 Always Allow 这个选项,用户可以自身选择决定 App 在进入后台后是否需要继续定位。

始终允许 只有在出现提示框后用户点击 Always Allow 才会有交互事件。它只需要授权一次,可以直接请求定位或者升级的时候请求定位。

若没有选择 Always Allow,那么授权状态就会被 WhenInUse 取代,系统也不会再向用户展示提示框,而之前获得的定位也容易变得不准确。

Apple 的其他平台处理定位的方式不同。

  • tvOS 不支持 Always
  • watchOS 不需要 Always
  • macOS 没有 Alway 和 WhenInUse
  • Mac 的 iPad 应用 会两者择一使用

使用时允许变得更加强大


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

在 iOS 13中,Always 不论 App 是否处于使用状态时,均可以使用 Core Location 的所有 API 。而 WhenInUse 只有在使用 App 时才可以使用 API。

那么,如何界定一个 App 是否在使用中呢?

top Created with Sketch.