Checking Push Notification Registration: isRegisteredForRemoteNotifications Not Updating

The following method keeps returning the same value:

[[UIApplication sharedApplication] isRegisteredForRemoteNotifications];

Every time this code runs, the results is YES. Even when I go into the “Settings” app and set push notifications to “off” for my app, when the code above runs, it evaluates to YES.

  • How to accept self-signed certificate with asihttprequest
  • Programmatically get own phone number in iOS
  • Saving SecKeyRef device generated public/private key pair on disk
  • UITextView ruled line background but wrong line height
  • NSURLSession delegate and completionHandler
  • XCode not creating .h file
  • Other details:
    * I’m running the app on got an iphone that has iOS 8.1.3
    * I’m running the app in Xcode 6.1 and I’ve got the phone physically attached to my machine

    Any idea why the value of “isRegisteredForRemoteNotifications” doesn’t change?

    2 Solutions Collect From Internet About “Checking Push Notification Registration: isRegisteredForRemoteNotifications Not Updating”

    Because iOS 8 does register the device and provides a Token even if the user opts out from pushes.

    In that case pushes are not presented to the user when the push is sent, but if your app is running it gets the payload so you can update it when the app is running…

    To check if push notifications are enabled in iOS 8 you should check for the enabled user notification types:

    - (BOOL)pushNotificationsEnabled {
        if ([[UIApplication sharedApplication] respondsToSelector:@selector(currentUserNotificationSettings)]) {
            UIUserNotificationType types = [[[UIApplication sharedApplication] currentUserNotificationSettings] types];
            return (types & UIUserNotificationTypeAlert);
        }
        else {
            UIRemoteNotificationType types = [[UIApplication sharedApplication] enabledRemoteNotificationTypes];
            return (types & UIRemoteNotificationTypeAlert);
        }
    }
    

    If you’re using Swift 2, the bitwise operators won’t work with UIUserNotificationType. Here’s a solution using Swift 2, iOS 8+ :

    func hasPushEnabled() -> Bool {
            //ios 8+
            if UIApplication.sharedApplication().respondsToSelector("currentUserNotificationSettings") == true {
                let settings = UIApplication.sharedApplication().currentUserNotificationSettings()
                if (settings?.types.contains(.Alert) == true){
                    return true
                }
                else {
                    return false
                }
            }
            else {
                let types = UIApplication.sharedApplication().enabledRemoteNotificationTypes()
                if types.contains(.Alert) == true {
                    return true
                }
                else {
                    return false
                }
    }