现在已不再是可选项。
自从发布了,如果您的应用程序请求一直处于活动状态的位置(locationManager.requestAlwaysAuthorization()
),用户将自动获得所有三个选择项。
与之前的iOS版本不同,现在所有选项都必须显示给用户。这意味着:您必须为两个选项都添加一个键。
您需要在应用程序的Info.plist文件中包括
NSLocationWhenInUseUsageDescription
和NSLocationAlwaysAndWhenInUseUsageDescription
键。(如果您的应用程序支持及更早版本,则还需要NSLocationAlwaysUsageDescription
键。)如果没有这些键,授权请求将立即失败。
参考:地理位置技术的新内容视频会话。
引用自会话记录。
因此,在iOS 11中,我们要求所有始终请求应用程序的开发人员另外支持WhenInUse授权模式。这个更改是具有回溯性和前瞻性的,因此当用户更新到iOS 11时,他们将能够授权任何请求始终授权的应用程序以使用WhenInUse授权模式。如果您链接iOS 11 SDK,则必须提供WhenInUseUsageDescription。否则,您的应用程序将无法请求始终授权。此外,当您的应用程序请求始终授权时,我们还将显示一个选项,以授权您的应用程序使用WhenInUse授权而不是始终授权。由于有三个新选项提示,因此我们还有一个新的UsageDescription字符串。您的应用程序需要提供AlwaysAndWhenInUse UsageDescription。由于这是一个不同的键,因此您的应用程序必须在链接至新的iOS 11 SDK时提供它。对于链接至iOS 11及更高版本的应用程序,核心位置将不使用旧的NSLocationAlways UsageDescription键。
如果您没有设置,您将在调试控制台中捕获以下消息:
应用程序的 Info.plist 必须包含 NSLocationAlwaysAndWhenInUseUsageDescription 和 NSLocationWhenInUseUsageDescription 键,其字符串值解释了应用程序如何使用此数据
<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>