如何可靠地确定是否可以向用户请求后台位置许可?

问题描述

在iOS中,可以在“使用时”或“始终”授予位置权限。

如果位置权限的当前状态为notDetermined,我相信调用requestWhenInUseAuthorization()requestAlwaysAuthorization()始终用户触发权限请求对话框,并用户选择许可请求对话框中的选项之一后,将始终调用locationManager(_:didChangeAuthorization:)委托方法。据我所知,只要正确配置了该应用程序,这在所有版本的iOS上都是正确的(如果我输入错误,请更正我)。

但是,如果该应用先前已请求并已获得“使用中”权限,则仍然应该可以向用户请求“始终”许可(在iOS 13.4之前的iOS 13中除外)它会立即“授予”该权限),前提是以前从未请求过“始终”许可。

我的问题是:

  1. 如果位置许可的当前状态为authorizedWhenInUse,如何知道调用requestAlwaysAuthorization()是否会生效?或者,我可以确定在请求后是否显示了权限对话框?
  2. 如果以上情况确实导致向用户显示权限对话框,那么我如何确定用户何时做出决定,如果他们决定始终授予位置? (由于权限状态未更改,因此未调用委托方法。)

我可以想到一种通过至少在尝试各种许可请求时分别存储来实现至少(1)的方法,但这可能由于多种原因而失败,因此将无用如果该应用的较早版本已经发布但没有记录。


我要问的原因是我对每种权限类型都有权限登录屏幕,并且我只想在用户完成对“使用时”和“始终”的访问权限后,导航到下一个屏幕权限对话框(如果要立即访问后台位置in iOS 13.4 and later,这是请求权限的最佳方法)。因此,我需要可靠地知道用户何时对两个对话框都做出了决定,因此为(2)。

为了增加灵活性并考虑到极端情况,我想知道如果无法请求位置许可,是否要完全跳过位置入职屏幕,因为很可能已经授予“使用时” ,但可能尚未请求“始终”,因此(1)。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)