【发布时间】:2021-05-28 20:16:12
【问题描述】:
我的应用程序正在跟踪用户并允许他们使用存储在其中的信息/图像创建注释/标记。 这是我的 info.plist 权限用法。
<key>NSAppleMusicUsageDescription</key>
<string>info</string>
<key>NSCameraUsageDescription</key>
<string>info</string>
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>info</string>
<key>NSLocationAlwaysUsageDescription</key>
<string>info</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>info</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>info</string>
<key>UIBackgroundModes</key>
<array>
<string>audio</string>
<string>location</string>
</array>
WhenInUseUsage 直接要求用户提供位置权限,以在地图上显示他们的位置。然后,当用户想要开始跟踪他们的位置时,我请求 AlwaysUsage 权限并提示他们进入应用程序设置屏幕。在这个阶段它不会找到应用程序设置屏幕。
我尝试重新安装我的应用程序,重新启动手机,其他手机等。只有当我也请求相机权限时,应用程序才会出现在设置屏幕中。我只想在用户实际使用它来说明我问的原因时请求照片许可。
这就是我在设置中请求权限的方式:
func showSettingsAlert(){
let alert = UIAlertController(title: C.Alert.settingsTitle, message: C.Alert.settingsMessage, preferredStyle: .alert)
alert.addAction(UIAlertAction(title: C.Alert.setting, style: .default, handler: { action in
UIApplication.shared.open(URL(string: UIApplication.openSettingsURLString)!, options: [:], completionHandler: nil)
}))
alert.addAction(UIAlertAction(title: C.Alert.cancel, style: .default, handler: nil))
self.present(alert, animated: true, completion: nil)
}
这是故意的吗?在我可以将用户发送到应用程序设置屏幕之前,是否需要在运行时开始询问所有权限?我错过了什么?
【问题讨论】:
-
无论如何,您都不应该将用户引导至此用例的设置。 “始终”位置权限(用户需要授予)和后台位置(您的应用可以在没有始终权限的情况下使用)之间存在差异。正确的方法是在需要时始终请求许可,并在位置管理器上启用后台位置。您的应用将始终获得临时权限,您将在后台获得位置,并且在一段时间后将提示用户始终授予您真实权限。在此有一个 wwdc 2019 会议
-
@Paulw11 我不知道这一点。这显然是正确的做法。尽管这不是我的问题的答案,但我希望人们阅读这篇文章!
标签: ios swift xcode permissions