iOS 14:允许位置访问 | 找不到“始终”菜单

8

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

在此输入图片描述

我已经提供了以下info.plist文件

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

“always” 菜单只在模拟器中出现吗? - Sridhar
请更新您发布的帖子,附上请求位置权限所使用的代码。 - Bilal
@Bilal,我已经使用了whenInUse请求。但这是独立的,对吧?我要进入应用程序设置并尝试更改位置权限。 - Sridhar
1
我也注意到了这个问题。如果我在安装 iOS 14 beta 2 的设备上运行应用程序,问题总是存在。 - phnmnn
1
我观察到与Xcode 12 Beta 3和iOS 14.0相同的行为。无论我在模拟器上请求什么权限,它都不会显示“始终”选项,而另一方面,在设备上无论我请求什么权限,它总是显示“始终”选项。这显然是设备和模拟器上不同的行为。 - Tankista
1
我创建了这个反馈,让我们看看他们是否会回复什么 https://feedbackassistant.apple.com/feedback/8223899 - Tankista
5个回答

7
“始终允许”选项已从初始位置权限提示中移除。您可以在后续的新提示中获取此选项。那么问题来了,如果我们需要在后台支持位置功能,该怎么办?

enter image description here

实现方法如下:
  1. 在您的应用程序可以接收位置信息之前,调用方法"locationManager.requestAlwaysAuthorization()"。如果您的应用程序需要始终权限,并且您希望稍后接收始终权限提示。

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

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

    enter image description here

  4. 如果已经授予“仅在使用应用程序时”的权限,则在解锁设备并启动应用程序时,您将收到#2提示。

来源

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

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


3

我也注意到了这个问题,并提供了反馈,但目前没有任何回应,除了有“少于10个”的其他报告。

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

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

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

1

看起来 iOS 14 的位置管理有一些更新。

其中之一是 locationManager(_:didChangeAuthorization:) 现在已经被弃用,所以你需要在你的 CLLocationManager 中实现 locationManagerDidChangeAuthorization(_:)

你还需要确保在你的 Location Manager 上调用 requestAlwaysAuthorization() 函数。从 apple docs 关于此函数的说明:

在你的应用程序可以接收到位置信息之前,你必须调用此方法或 requestWhenInUseAuthorization() 方法。


我在进行iOS 14的一些更改时有一些疑问。如果我们实现了新方法,那么我们必须删除已弃用的方法吗?而且,如果我们进行这些更改,那么它永远不会影响iOS 14以下的其他iOS版本。请帮助我理解这个问题。谢谢。 - Protocol

0

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


-1

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

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

如果您请求始终使用requestAlwaysAuthorization(),则您的应用程序设置中将出现Always选项。

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


我没有调用requestAlwaysAuthorization(),但是我可以在iOS 13模拟器的位置权限设置屏幕中看到“始终”菜单。 - Sridhar
据我所知,IOS 13的行为是相同的。您可以再次尝试IOS 13模拟器(首先重置模拟器以确保所有现有应用程序设置都已消失)。 - Bilal
@Sridhar,如果您在IOS13中看到“始终”选项,则您或任何其他第三方SDK必须已请求“始终”权限。您可以进行快速测试,只需创建一个新的示例应用程序并请求“使用期间”权限,运行该应用程序并验证应用程序设置中的权限即可。 - Bilal
你所描述的并不正确。在模拟器上,无论你请求什么权限,它都不会显示“始终”。而在设备上,无论你请求什么权限,它总是显示“始终”。这显然是一个错误的行为。 - Tankista

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