为什么在设置中显示应用程序之前需要询问所有权限?
Why does all permissions need to be asked before app is shown in settings?
我的应用程序正在跟踪用户并允许他们创建 annotations/markers 并在其中存储 information/images。
这是我的 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 许可并提示他们进入应用程序设置屏幕。在此阶段它不会找到应用程序设置屏幕。
我尝试重新安装我的应用程序,重新启动 phone、其他 phones 等。只有当我也请求相机许可时,应用程序才会显示在设置屏幕中。我只想在用户实际要将照片用于我询问的背景时请求照片许可。
这是我在设置中请求权限的方式:
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)
}
这是故意的吗?在我可以将用户发送到应用程序设置屏幕之前,是否需要在运行时开始时询问所有权限?我错过了什么?
如果您想在请求任何权限之前将用户定向到设置面板,您可以向您的项目添加 Settings.bundle。这将确保设置面板在安装后直接可用。
编辑:
抱歉,我一开始没明白你想做什么..
每个权限只有在您在应用中请求后才会出现在设置中。
您应该在上下文中向用户询问每个权限,在该上下文中,用户尝试使用需要此权限的功能。用户应该能够理解您请求此权限的原因。
因此,在您的应用程序启动时询问您的所有权限并不是一个好方法。
例如:
询问位置,当用户打开地图并想查看他的位置时。
当用户点击“扫描二维码”按钮或“拍照”按钮时,请求相机权限。
等等
我的应用程序正在跟踪用户并允许他们创建 annotations/markers 并在其中存储 information/images。 这是我的 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 许可并提示他们进入应用程序设置屏幕。在此阶段它不会找到应用程序设置屏幕。
我尝试重新安装我的应用程序,重新启动 phone、其他 phones 等。只有当我也请求相机许可时,应用程序才会显示在设置屏幕中。我只想在用户实际要将照片用于我询问的背景时请求照片许可。
这是我在设置中请求权限的方式:
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)
}
这是故意的吗?在我可以将用户发送到应用程序设置屏幕之前,是否需要在运行时开始时询问所有权限?我错过了什么?
如果您想在请求任何权限之前将用户定向到设置面板,您可以向您的项目添加 Settings.bundle。这将确保设置面板在安装后直接可用。
编辑:
抱歉,我一开始没明白你想做什么..
每个权限只有在您在应用中请求后才会出现在设置中。
您应该在上下文中向用户询问每个权限,在该上下文中,用户尝试使用需要此权限的功能。用户应该能够理解您请求此权限的原因。
因此,在您的应用程序启动时询问您的所有权限并不是一个好方法。
例如:
询问位置,当用户打开地图并想查看他的位置时。
当用户点击“扫描二维码”按钮或“拍照”按钮时,请求相机权限。
等等