在提示或开始收集之前检查iOS身份验证权限



我不清楚苹果启动位置监控的意图。假设我想请求"始终"身份验证,并获得startUpdatingLocation()启用的位置回调。requestAlwaysAuthorization()的苹果文档说:

当当前授权状态为.notDetermination或.authorizedWhenUse…时,您可以调用requestAlwaysAuthorization((。用户响应此提示后,您的应用程序将无法再请求Always授权。再次调用此方法将无效。

这意味着我们应该在调用它之前检查状态。然而,authorizationStatus()上的文档说:

不需要使用authorizationStatus((。相反,实现locationManager(_:didChangeAuthorization:(委托回调以接收最新的授权状态。

那么,即使您已经拥有权限,您是否应该在启动时始终调用requestAlwaysAuthorization(),然后在didChangeAuthorization回调中获得"授权"状态时调用startUpdatingLocation()?回调是否保证会发生?或者,无论是否获得授权回调,您都应该直接调用startUpdatingLocation(),并在权限允许时开始获取更新?最后一点是我在测试中看到的,但我不想在这方面与苹果的指导方针相冲突。

当你像这样启动时,你应该调用requestAlwaysAuthorization((-

override func viewDidLoad() {
super.viewDidLoad()
locationManager = CLLocationManager()
locationManager?.delegate = self
locationManager?.requestAlwaysAuthorization()
}

然后在得到结果后调用startUpdatingLocation((

func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {
if status == .authorizedAlways {
// start updating location here
}
}

总是调用didChangeAuthorization,如果用户已经授予权限,代码将正常执行,否则当用户授予权限时,代码将在匹配条件后执行。

最新更新