NSLocationWhenInUseUsageDescription警告,但我已经添加了它。

56

虽然我已经添加了:

NSLocationWhenInUseUsageDescription

但我一直收到这个警告:

此应用程序尝试访问隐私敏感数据,但没有使用说明。应用程序的Info.plist必须包含一个NSLocationWhenInUseUsageDescription键,其字符串值解释应用程序如何使用此数据。

注意:我在应用程序中有多个Info.plist。 不知道该怎么办。


在任何属性列表中添加了该键吗? - Salman Ghumsani
1
你确定你修改的是正确的 Info.plist 文件吗? - Dávid Pásztor
是的,我已经添加了该键及其描述... 是的,但我更改了捆绑标识符,这可能是问题吗? - Mohamed
不,捆绑标识符不是问题。 - Salman Ghumsani
尝试找出正确的 .plist 文件! - Salman Ghumsani
5个回答

68

在plist中添加

NSLocationAlwaysAndWhenInUseUsageDescription

NSLocationWhenInUseUsageDescription

这两个键解决了我的问题。

    <key>NSLocationAlwaysUsageDescription</key>
    <string>Your location is required for xyz benefits for you</string>
    <key>NSLocationWhenInUseUsageDescription</key>
    <string>Your location is required for xyz benefits for you</string>

我不明白为什么我们需要添加两个键。第一个键的名称让我认为它应该为旧键NSLocationWhenInUseUsageDescription和NSLocationAlwaysUsageDescription提供相同的文本... - finngu
1
@finngu 不仅如此,而且文档明确指出:“如果您的应用程序需要在后台获取位置信息,请改用NSLocationAlwaysAndWhenInUseUsageDescription 代替。” [强调是我的]。 - ispiro

31

有许多结构不良的框架(尤其是FirebaseMessaging),它们无法为用户带来任何好处,却使用相机和位置功能。您应该警告最终用户此功能对您的应用程序没有必要,并且用户不应授予应用程序访问其中的恶意程序。

    <key>NSLocationAlwaysUsageDescription</key>
    <string>Your location is not needed. This request has popped up due to a 3rd party framework used by the app in a context that does NOT need you to reveal you location. Do be sure to check audit trail for the location queries on ios 15 or later.</string>
    <key>NSLocationWhenInUseUsageDescription</key>
    <string>You will get zero benefit allowing this app accessing your location. You should never see this alert. If you do alert technical support at foo@bar.baz</string>
否则,在传达使用细节和风险时要使用巧妙措辞,以使应用程序访问沙盒之外的任何内容,并教育用户审查权限的审核跟踪记录,以便不时地进行检查(就像任何人都会这样做一样)。值得庆幸的是,在最近(大约在iOS14左右),苹果向最终用户报告可疑活动,例如MapsMe始终在后台跟踪。

19

事实上,在我的情况下,我需要像这样放置所有三个:

<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>...</string>
<key>NSLocationAlwaysUsageDescription</key>
<string>...</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>...</string>
否则,我不会收到弹出警报询问是否允许位置。 输入图像描述 注意:我在Flutter中开发,我不知道这种情况是否有任何影响...

5

我正在

viewDidLoad

中请求授权,具体如下:

self.locationManager.requestWhenInUseAuthorization()

当我移除了这一行,错误就消失了。


NSLocationWhenInUseUsageDescription和NSLocationAlwaysAndWhenInUseUsageDescription用于请求用户同意在使用self.locationManager.requestWhenInUseAuthorization()时使用其位置,这意味着现在您将请求权限。因此,如果您不需要使用位置,则无需添加权限字符串。如果您需要,则无论您在何处编写代码以获取权限,都应将两个权限字符串添加为@Kartihkraj Duraisamy的答案以使位置服务正常工作。 - pk75
他获取权限的位置确实很重要;^)看看一个典型的应用程序,有十几个问题等待着毫无戒心的新用户。 - Anton Tropashko

0
将 NSLocationWhenInUseUsageDescription 从 plist 文件中删除,然后运行应用程序,再次添加并重新运行应用程序。

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