我想在我的家庭控制器中第二次获得许可,例如,我可以通过编程方式进行吗?
我的意思是我的用户第一次禁用它,我不想让他另一个选项来获取通知。
答案 0 :(得分:8)
你不允许这样做。通知弹出窗口将在用户第一次打开应用程序时提示。你可以做的是检查用户是否允许这样做。然后你可以打开设置页面(基本上就是你在这种情况下可以做的):
let isRegisteredForRemoteNotifications = UIApplication.shared.isRegisteredForRemoteNotifications
if !isRegisteredForRemoteNotifications {
UIApplication.shared.open(URL(string: UIApplicationOpenSettingsURLString)!, options: [:], completionHandler: nil)
}
答案 1 :(得分:6)
用户选择允许后,您无法申请权限。您可以做的是检查是否允许权限,并将用户重定向到应用程序的设置。
如何检查权限的授权状态取决于您要授权的服务类型。您可以使用以下代码将用户重定向到设置:
<强>夫特强>
UIApplication.shared.open(URL(string: UIApplicationOpenSettingsURLString)!, options: [:], completionHandler: nil)
目标C
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString] options:@{} completionHandler:nil];
答案 2 :(得分:3)
实际上这是不可能的。您只需一次拍摄即可提示他们获取权限。这就是大多数应用程序将提供自定义视图来解释为什么需要某个权限的原因。如果用户单击“是”,则他们会启动实际的权限警报。 如果他们已经拒绝了许可,您需要检查应用是否具有某些权限,并提示他们进入设置以激活所需内容。
以下是example如何检查他们是否已获得许可。
答案 3 :(得分:0)
用户启用或拒绝通知后,您无法显示标准弹出窗口。在这种情况下,通常会显示一个alertController,告知用户这种情况并向她提供导航到设置的按钮:
let alert = UIAlertController(title: "Unable to use notifications",
message: "To enable notifications, go to Settings and enable notifications for this app.",
preferredStyle: UIAlertControllerStyle.alert)
let okAction = UIAlertAction(title: "OK", style: .cancel, handler: nil)
alert.addAction(okAction)
let settingsAction = UIAlertAction(title: "Settings", style: .default, handler: { _ in
// Take the user to Settings app to possibly change permission.
guard let settingsUrl = URL(string: UIApplicationOpenSettingsURLString) else { return }
if UIApplication.shared.canOpenURL(settingsUrl) {
UIApplication.shared.open(settingsUrl, completionHandler: { (success) in
// Finished opening URL
})
}
})
alert.addAction(settingsAction)
self.present(alert, animated: true, completion: nil)
该代码的灵感来自于similar example,可供Apple工程师访问相机。
答案 4 :(得分:0)
在这种情况下,您可以显示一条警报,将用户导航到设置
let alert = UIAlertController(title: "Allow notification Access", message: "Allow notification access in your device settings.", preferredStyle: UIAlertController.Style.alert)
// Button to Open Settings
alert.addAction(UIAlertAction(title: "Settings", style: UIAlertAction.Style.default, handler: { action in
guard let settingsUrl = URL(string: UIApplication.openSettingsURLString) else {
return
}
if UIApplication.shared.canOpenURL(settingsUrl) {
UIApplication.shared.open(settingsUrl, completionHandler: { (success) in
print("Settings opened: \(success)")
})
}
}))
alert.addAction(UIAlertAction(title: "Close", style: UIAlertAction.Style.default, handler: nil))
self.present(alert, animated: true, completion: nil)