7

我尝试使用 iOS 14 模拟器在 Xcode 12 beta 2 中运行我的项目。我观察到“允许位置访问设置”屏幕中找不到“始终”菜单。

在此处输入图像描述

我已经给出了以下 info.plist

<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>TEST APP</string>
<key>NSLocationAlwaysUsageDescription</key>
<string>TEST APP</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>TEST APP</string>
4

5 回答 5

6

“始终允许”选项已从初始位置权限提示中删除。您可以稍后将此选项作为新提示获取。那么问题来了,如果我们在后台需要定位功能,我们将如何支持呢?

在此处输入图像描述

实现这一目标的方法 -

  1. 在您的应用接收位置信息之前调用方法“locationManager.requestAlwaysAuthorization()” 。如果您的应用程序需要始终获得权限,并且您希望稍后收到始终获得权限的提示。

  2. 最初,用户可以选择“使用应用程序时”或选择一个新选项“允许一次”(iOS 13 本身引入)。

  3. 如果用户继续使用该应用,iOS 13 现在会自动提示将位置权限从“使用应用时”升级为“始终允许”。

    在此处输入图像描述

  4. 下次解锁设备并启动已获得“使用应用程序时”权限的应用程序后,您将收到 #2 提示。

资源

这个 WWDC 2019 视频还表明这仍然是可能的:https ://developer.apple.com/videos/play/wwdc2019/705/

在 6:57 “...您可以先在使用时请求授权,然后在稍后的某个时间点,当用户与需要授权的应用程序的功能进行交互时,以后总是寻求授权...”

于 2020-07-19T05:45:54.390 回答
3

我也观察到了这个问题并提交了反馈——到目前为止,除了“少于 10 个”关于它的其他报告之外,没有任何回应。

simctl使用命令行工具似乎有一种解决方法:

xcrun simctl privacy booted grant location-always <bundle identifier>

这将启用“设置”中的“始终”选项。

于 2020-08-06T09:26:11.720 回答
1

iOS 14 的位置管理似乎有一些更新。

其中之一locationManager(_:didChangeAuthorization:)是现在已弃用,因此您需要locationManagerDidChangeAuthorization(_:)在您的 CLLocationManager 中实现。

您还需要确保调用requestAlwaysAuthorization()位置管理器上的功能。来自关于此功能的苹果文档:

您必须先调用此方法或 requestWhenInUseAuthorization() 方法,然后您的应用才能接收位置信息。

于 2020-07-19T21:39:41.620 回答
0

我遇到了同样的问题。据我所知,这是/曾经是 Xcode 12 的前几个 Beta 版本的一个错误。今天早上它发布时我升级到了 Beta #6,现在这个问题对我来说已经消失了。看看这是否也为您解决了问题。

于 2020-08-26T14:13:15.197 回答
-1

无论您在应用程序中请求什么,相同的选项都会出现在应用程序的设置中。

如果您在使用时请求仅使用requestWhenInUseAuthorization()方法的授权,则CLLocationManager只会While Using the App出现在您的应用程序设置中。

如果您要求始终使用requestAlwaysAuthorization() Always选项将出现在您的应用设置中。

根据您的用例,您可以在应用程序的某个时间点requestAlwaysAuthorization()同时请求两者。requestWhenInUseAuthorization()

于 2020-07-13T15:53:15.120 回答