iOS 13 - 请求“使用时”位置权限会阻止我稍后请求“始终”

Posted

技术标签:

【中文标题】iOS 13 - 请求“使用时”位置权限会阻止我稍后请求“始终”【英文标题】:iOS 13 - requesting "When in Use" location permissions prevents me from requesting "Always" later 【发布时间】:2019-11-04 21:50:04 【问题描述】:

我们的应用在启动时请求“使用时”位置权限。稍后,如果用户想要打开某个功能,我们会请求“始终”位置权限。关于这些更改的WWDC talk 表明这应该是可能的:

如果您的应用预先请求使用时授权,并且用户在此提示下授予了它,那么您的应用已收到使用时授权,没有临时期限,也没有后续提示。当你引入一个真正需要它的杀手级新功能时,它也会节省它的机会,以便以后总是请求它。

但是在 ios 13 中,当我第一次请求“使用时”权限时,我看到后来对 [CLLocationManager requestAlwaysAuthorization] 的调用被默默地丢弃,没有任何迹象。如果我删除第一个调用以获取“使用时”权限,则请求始终可以正常工作。这是预期的行为吗?

【问题讨论】:

这是预期的行为。 【参考方案1】:

无声无息地丢弃

它不是“默默地丢弃”。它被默默地授予。继续使用需要在后台始终授权的功能。

【讨论】:

你是对的,我在调试时错过了这个。后续问题:对于相同的工作流程,但用户在初始对话框中选择“允许一次”而不是“使用时允许”。我看到,对于随后对 requestAlwaysAuthorization 的调用,我们仍然默默地获得 Always 权限。但是,当需要稍后实际使用该权限时,这将如何工作?是否与他们最初选择“使用时允许”相同 - 因为他们会在使用时获得一个对话框,询问他们是否要将应用程序提升为“始终允许”? 一次是一次。但一次就是你所需要的。下一次,你可以再问一次。 我不明白......在这种情况下,我看到随后对 requestAlwaysAuthorization 的调用默默地授予权限。那么,如果我的应用未运行/未使用,那么在使用权限时会发生什么? 您已经拥有“使用时”授权,即使只有一次。当您进入后台时,您要求始终授权并立即配置您的后台位置监控。当你在后台时它可以工作。 我确实多次观看了该视频。对于它的价值,我看到的“允许一次”场景是用户可以授予“始终允许”的后续对话框永远不会出现。从应用程序的角度来看,这是一种误导,因为就像我说的那样,如果它调用 requestAlwaysAuthorization 它会得到它始终可以访问的回调,但我认为我的应用程序正在采取不同的方向,所以我不倾向于进一步调查。

以上是关于iOS 13 - 请求“使用时”位置权限会阻止我稍后请求“始终”的主要内容,如果未能解决你的问题,请参考以下文章

这个应用程序如何立即请求后台位置权限?

xcode11 - 在 ios 13 中请求位置服务的授权

Flutter 在启动时阻止 iOS 上的推送通知权限

什么条件使 iOS 13 要求用户授予“始终”位置访问权限?

如何在更改相机权限后阻止iOS应用重置?

当 mapView 请求用户权限时,使用 iOS 访问他们的位置