在iOS13下,当您请求对coreLocation的.always权限(以启用背景位置(例如地理围栏或iBeacons))时,该应用仅被授予“临时总”权限,这不允许它在后台使用coreLocation 。在稍后的阶段,原则上OS应该弹出一个许可请求以切换到.always许可。我还没有经历过,而且(在Apple开发人员论坛上看)似乎没有人找到持续触发此对话框弹出窗口的方法。
我一直要求.always(只能提供无用的“总是临时”权限),然后尝试“升级”为真正的.always权限,但没有任何反应(没有弹出窗口,没有权限更改)>
我还尝试遵循本书的WWDC要求,始终要求。始终接收临时请求,然后相信操作系统会在某个阶段显示对话框-没有运气。
更麻烦的是,即使我将我的应用程序的权限设置手动更改为真正的.always权限,该应用程序仍然无法在后台定位位置。
如果一直要求.al并获得“临时” always许可,我希望在某个阶段显示位置对话框的OS建议“真正” .always许可。尽管在10倍的背景下进入了地理围栏,但这已经有2周了。
我还希望许可“升级”流程能够正常工作,尽管在WWDC视频和coreLocation文档中都有解释,但事实并非如此。
如果Apple继续使用iOS 13,我希望许多在后台合法位置的应用程序将完全无法正常工作。
有人在这方面取得任何进展吗?我已向Apple提出了“反馈”,但希望在9月的iOS 13 GM之前不会及时收到他们的答复。
答案 0 :(得分:6)
在iOS 13中向用户请求其“始终”位置许可时:
locationManager.requestAlwaysAuthorization()
1)用户将收到此警报:
2)如果您请求始终许可,而用户选择Allow While in Use
,则您的应用将认为它获得了.authorizedAlways
许可,但这就是provisional .authorizedAlways
许可。
3)接下来,当您的应用通常会在后台接收位置事件时,iOS不会直接在后台使用事件启动您的应用,而是等待它认为用户没有做任何事情,然后会显示此对话框:
根据视频,这可能需要一段时间(6:39):
用户可以向您的应用授予始终授权的提示将在稍后出现。 {...}当我们认为用户不忙时,核心位置会等待一段时间,以最大程度地提高他们对正在发生的事情的理解能力,并最大程度地降低他们给出自己的出路的可能性一种回应。
在此过程中(在应用程序进入后台和显示提示之间),您将不会收到位置更新事件:
如果您的应用最终获得了始终的授权,而没有收到使用中的授权,则不会交付。但是,如果用户还没有选择,它们也不会被交付。
因此,在此期间,如果在此基础上生成了更多事件,并且您正在监视请求,则这些事件将替换较早出现的事件,而较早出现的事件将被丢弃。最后,Core Location将删除事件部分,以解决任何已过时的问题。
4)然后,当用户选择Change to Always Allow
时,.authorizedAlways
权限将变为最终权限(除非用户将来更改其设置)。然后,您将开始接收位置事件。
除非(5)用户选择Keep Only While Using
,否则最终许可将变为.authorizedWhenInUse
。
以下是演示文稿的概述(我的数字):
还有另一个指向完整视频的链接:https://developer.apple.com/videos/play/wwdc2019/705
这能回答您的问题吗?
如果我将我的应用程序的权限设置手动更改为真正的始终权限,则该应用程序将继续无法在后台定位位置。
事实并非如此。您是否在系统偏好设置中进行了更改?
尝试使用GM种子,也许他们修复了有关此流程的一些错误。
答案 1 :(得分:2)
要查看带有Allow Always
提示的第二个对话框,您必须:
为此,您可以将距离过滤器设置为无,并开始获取连续的位置更新。
如果要在后台发送位置更新,则必须显示蓝色指示器。然后,第二个要求Allow Always
的对话框将永远不会出现。
答案 2 :(得分:1)
我不知道将权限设置为“始终”的任何直接方法。从WWDC视频和实验中,locationManager.requestAlwaysAuthorization()将提供一个不包含[Always Allow]选项的对话框。选择[使用应用程序时允许]会将其置于“总是临时”模式,但是对于用户和应用程序而言,这很令人困惑。用户只是将其设置为“在使用应用程序时允许”,但应用程序认为它是“始终”,但尚未实现,直到第二次提示时,应用程序才获取事件。很混乱。我能够得到第二条提示,但活动结束后并没有立即得到提示,这取决于iOS。我也已发布到Apple反馈中,希望他们为需要Always的应用程序提供一些准备。