iOS 11中的位置访问请求

8

我正在我的应用程序中请求用户位置。

locationManager.requestAlwaysAuthorization()

这行代码应该返回以下提示信息:

enter image description here

然而,我希望用户只能在“不允许”和“始终允许”之间进行选择。如何删除“仅在使用应用程序时”选项?
需要注意的是,这是我在info.plist中包含的内容,删除其中任何一行都会导致应用程序根本不显示此警报。

enter image description here

3个回答

9

现在已不再是可选项。

自从发布了,如果您的应用程序请求一直处于活动状态的位置(locationManager.requestAlwaysAuthorization()),用户将自动获得所有三个选择项。

与之前的iOS版本不同,现在所有选项都必须显示给用户。这意味着:您必须为两个选项都添加一个键。

摘自Apple文章 - 请求始终授权

您需要在应用程序的Info.plist文件中包括NSLocationWhenInUseUsageDescriptionNSLocationAlwaysAndWhenInUseUsageDescription键。(如果您的应用程序支持及更早版本,则还需要NSLocationAlwaysUsageDescription键。)如果没有这些键,授权请求将立即失败。

参考:地理位置技术的新内容视频会话。


你的答案是正确的,但我无法将两个回答都标记为正确答案。 - mahdi

3
根据关于位置技术更新的WWDC 2017 Session 713,链接至iOS 11及更高版本时,如果您想请求始终授权,您应该始终包括When In Use描述。此外,iOS还将显示一个选项来使用When-In-Use模式。

引用自会话记录。

因此,在iOS 11中,我们要求所有始终请求应用程序的开发人员另外支持WhenInUse授权模式。这个更改是具有回溯性和前瞻性的,因此当用户更新到iOS 11时,他们将能够授权任何请求始终授权的应用程序以使用WhenInUse授权模式。如果您链接iOS 11 SDK,则必须提供WhenInUseUsageDescription。否则,您的应用程序将无法请求始终授权。此外,当您的应用程序请求始终授权时,我们还将显示一个选项,以授权您的应用程序使用WhenInUse授权而不是始终授权。由于有三个新选项提示,因此我们还有一个新的UsageDescription字符串。您的应用程序需要提供AlwaysAndWhenInUse UsageDescription。由于这是一个不同的键,因此您的应用程序必须在链接至新的iOS 11 SDK时提供它。对于链接至iOS 11及更高版本的应用程序,核心位置将不使用旧的NSLocationAlways UsageDescription键。


0

如果您没有设置,您将在调试控制台中捕获以下消息:

应用程序的 Info.plist 必须包含 NSLocationAlwaysAndWhenInUseUsageDescription 和 NSLocationWhenInUseUsageDescription 键,其字符串值解释了应用程序如何使用此数据

  1. 打开 Info.plist 作为源代码 enter image description here

  2. 并添加以下 XML 代码块:

<key>NSLocationAlwaysUsageDescription</key>
<string>Location always usage description</string>
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>Location always and when in usage description</string>
<key>NSLocationUsageDescription</key>
<string>Location usage desription</string>


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接