IOS 8推送通知检查返回错误的UIRemoteNotificationType

时间:2014-10-15 09:56:10

标签: ios iphone push-notification ios8

我正在尝试检查我的应用的PushNotifications是否已启用。

在AppDelegate.m中,我注册了远程通知应用程序,并且在iPhone上的设置(iOS 8)中启用了此应用程序的推送通知。

我已经搜索了方法:

UIRemoteNotificationType types = [[UIApplication sharedApplication] enabledRemoteNotificationTypes];

BOOL check = [[UIApplication sharedApplication] isRegisteredForRemoteNotifications];

结果, types = UIRemoteNotificationTypeNone and check = NO

我使用此code sample注册推送通知申请:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions
{
    //-- Set Notification
    if ([application respondsToSelector:@selector(isRegisteredForRemoteNotifications)]) 
    {
           // iOS 8 Notifications
           [application registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge) categories:nil]];

           [application registerForRemoteNotifications];
    }
    else
    {
          // iOS < 8 Notifications
          [application registerForRemoteNotificationTypes:
                     (UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeSound)];
    }

     //--- your custom code
     return YES;
}

这里有什么问题?

2 个答案:

答案 0 :(得分:3)

我认为您已经找到了解决方案,但以防万一:在iOS 8中,不推荐使用enabledRemoteNoficationTypes,您应该使用:

if ([[UIApplication sharedApplication] respondsToSelector:@selector(currentUserNotificationSettings)]) {
        UIUserNotificationSettings *currentSettings = [[UIApplication sharedApplication] currentUserNotificationSettings];
        if (currentSettings.types == UIUserNotificationTypeNone) {}

最佳

答案 1 :(得分:-1)

尝试使用以下代码检查您的州:

UIRemoteNotificationType allOnType = UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeBadge ;
UIRemoteNotificationType offType = UIRemoteNotificationTypeNone ;

UIRemoteNotificationType currentTypes = [[UIApplication sharedApplication] enabledRemoteNotificationTypes];

if (currentTypes == allOnType) {
    // all are on
} else if (currentTypes == offType) {
    // all are off
} else {
    // some are on, some are off
}

修改

另外,尝试实现推送通知回调:

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken 
{
    NSLog(@"Token%@",deviceToken);    
}

- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)err
{
    NSLog(@"err:%@",err);
}

-(void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings
{
    //for iOS8
}