支持 iOS 11 位置权限,同时在 iOS 10 上禁止“使用时”

Posted

技术标签:

【中文标题】支持 iOS 11 位置权限,同时在 iOS 10 上禁止“使用时”【英文标题】:Supporting iOS 11 location permissions while disallowing "when in use" on iOS 10 【发布时间】:2017-08-27 14:38:46 【问题描述】:

在使用 ios 10 时,我需要用户在不允许定位和始终允许定位之间进行选择,因此我在 Info.plist 中添加了密钥 NSLocationAlwaysUsageDescription

现在有了新的 iOS 11 版本,我需要添加以下两个键来获取位置权限提示 - NSLocationAlwaysAndWhenInUseUsageDescriptionNSLocationWhenInUseUsageDescription

当我尝试删除看似多余的NSLocationWhenInUseUsageDescription 时,它不允许在 iOS 11 上显示位置提示

现在的问题是我的 iOS 10 用户在他们的设置中有一个“使用时”选项,这是我不想要的。

有什么方法可以创建一个版本,允许 iOS 10 的“从不”和“总是”,并允许 iOS 11 上的所有三个选项?

【问题讨论】:

只是为了确定:您基本上是在询问您是否可以在您的 plist 中执行以下操作:if iOS10 useiOS10plistSettings` 和 if iOS11 useiOS11plistSettings`?有趣的问题! 【参考方案1】:

您需要在应用的 Info.plist 文件中包含 NSLocationWhenInUseUsageDescription 和 NSLocationAlwaysAndWhenInUsageDescription 键。 (如果您的应用支持 iOS 10 及更早版本,则还需要 NSLocationAlwaysUsageDescription 键。)如果这些键不存在,授权请求将立即失败。

https://developer.apple.com/documentation/corelocation/choosing_the_authorization_level_for_location_services/request_always_authorization#see-also

【讨论】:

以上是关于支持 iOS 11 位置权限,同时在 iOS 10 上禁止“使用时”的主要内容,如果未能解决你的问题,请参考以下文章

iOS7 和 iOS 8 定位服务

在 iOS 中切换位置权限

iOS核心位置:如何禁用用户权限的默认iOS弹出消息

iOS 13 - 请求“使用时”位置权限会阻止我稍后请求“始终”

在支持 iOS 13.0 的同时在 iOS 14.0 中使用 @StateObject

iOS 通知和位置服务权限在启动时显示多次