在iOS13下,当您为coreLocation请求.always权限(以启用后台位置(例如,地理围栏或iBeacons))时,仅向该应用授予“临时总”权限,该应用不允许在后台使用coreLocation。在稍后的阶段,原则上OS应该弹出一个许可请求以切换到.always许可。我还没有经历过,而且(在Apple开发人员论坛上)似乎没有人找到持续触发此对话框弹出窗口的方法。
我已经要求.always(只能提供无用的“总是临时”权限),然后尝试“升级”为真正的.always权限,但没有任何反应(没有弹出窗口,没有权限更改)
我还尝试遵循本书对WWDC的要求,始终要求。总是接收临时请求,然后相信OS会在某个阶段显示对话框-没有运气。
甚至更麻烦的是,即使我将应用程序的权限设置手动更改为真正的.always权限,该应用程序仍然无法在后台对位置进行定位。
如果要求始终提供.always并始终获得“临时”许可,我希望在某个阶段显示位置对话框的OS提出“真实”。始终许可。尽管在10倍的背景下进入了地理围栏,但两周内都没有发生这种情况。
我还希望许可“升级”流程能够正常工作,尽管在WWDC视频和coreLocation文档中都有解释,但事实并非如此。
如果Apple继续采用iOS 13,我希望在后台合理定位位置的许多应用程序将完全无法正常工作。
在这方面有人取得任何进展吗?我已向Apple提出了“反馈”,但期望在9月的iOS 13 GM之前不会及时收到他们的回应。
当您在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
这能回答您的问题吗?
如果我将我的应用程序的权限设置手动更改为真正的.always权限,则该应用程序将继续无法在后台定位位置。
事实并非如此。您是否在系统偏好设置中进行了更改?
尝试使用GM种子,也许他们修复了有关此流程的一些错误。