检查Swift

时间:2016-03-09 10:48:42

标签: ios notifications

我在我的应用中有推送通知。每当启动应用程序时,我都想检查用户是否为我的应用程序启用了推送通知。

我是这样做的:

let notificationType = UIApplication.sharedApplication().currentUserNotificationSettings()!.types
if notificationType == UIUserNotificationType.None {
    print("OFF")
} else {
    print("ON")
}

如果用户禁用了推送通知,是否有办法从我的应用中激活此功能?

或者是否有其他选择将用户发送到推送通知设置(设置 - 通知 - AppName)?

6 个答案:

答案 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)

适用于iOS 10或更高版本

检查您的应用是否已启用推送通知已针对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()#>
        }
    }