我在我的应用中有推送通知。每当启动应用程序时,我都想检查用户是否为我的应用程序启用了推送通知。
我是这样做的:
let notificationType = UIApplication.sharedApplication().currentUserNotificationSettings()!.types
if notificationType == UIUserNotificationType.None {
print("OFF")
} else {
print("ON")
}
如果用户禁用了推送通知,是否有办法从我的应用中激活此功能?
或者是否有其他选择将用户发送到推送通知设置(设置 - 通知 - AppName)?
答案 0 :(得分:19)
无法从应用更改设置。但您可以使用此代码将用户引导至特定于应用程序的系统设置。
extension UIApplication {
class func openAppSettings() {
UIApplication.sharedApplication().openURL(NSURL(string: UIApplicationOpenSettingsURLString)!)
}
}
针对Swift 3.0进行了更新
extension UIApplication {
class func openAppSettings() {
UIApplication.shared.openURL(URL(string: UIApplicationOpenSettingsURLString)!)
}
}
答案 1 :(得分:15)
检查您的应用是否已启用推送通知已针对Swift 3进行了大幅更改。如果您使用的是Swift 3,请使用此代替上述示例。
let center = UNUserNotificationCenter.current()
center.getNotificationSettings { (settings) in
if(settings.authorizationStatus == .authorized)
{
print("Push authorized")
}
else
{
print("Push not authorized")
}
}
以下是Apple关于如何进一步优化支票的文档:https://developer.apple.com/reference/usernotifications/unnotificationsettings/1648391-authorizationstatus
答案 2 :(得分:6)
这是Swift 3版本,您可以在其中检查通知是启用还是禁用。
let notificationType = UIApplication.shared.currentUserNotificationSettings?.types
if notificationType?.rawValue == 0 {
print("Disabled")
} else {
print("Enabled")
}
答案 3 :(得分:2)
salabaha的版本
extension UIApplication {
class func openAppSettings() {
UIApplication.shared.open(URL(string: UIApplicationOpenSettingsURLString)!, options: [:], completionHandler: {enabled in
// ... handle if enabled
})
}
答案 4 :(得分:0)
简短回答: 不,如果用户拒绝了您的推送通知请求,您不能再次询问它们,您应该将它们指向设置页面,您可以通过提醒告知他们步骤和两个选项"确定"和"转到设置",这是您使用罗马代码的地方。
长答案: 你应该只在需要AND时询问用户推送通知,如果你要问它有助于在前面提供一个小视图来解释你想要/需要发送推送通知的原因,这是一篇很棒的TechCrunch文章,将帮助您更好地保留/接受用户 - http://techcrunch.com/2014/04/04/the-right-way-to-ask-users-for-ios-permissions/
答案 5 :(得分:0)
从iOS12和Swift 5开始,这是最彻底的方法:
_ = UNUserNotificationCenter.current().getNotificationSettings { (settings) in
switch settings.authorizationStatus {
case .notDetermined:
<#code#>
case .denied:
<#code#>
case .authorized:
<#code#>
case .provisional:
<#code#>
@unknown default:
<#fatalError()#>
}
}