为什么建议在注册推送通知服务之前调用registerUserNotificationSettings

时间:2014-09-25 12:38:43

标签: ios ios8

当我在docs中找到这个时,我打算使用iOS 8的新远程通知API:

  

“建议您在安排之前调用此方法   本地通知或注册推送通知服务“

我无法理解为什么这么说。我的印象是两个方法调用:

  

registerUserNotificationSettings

  

registerForRemoteNotifications

现在是独立的,一个不影响其他。那为什么建议先调用一个呢?

2 个答案:

答案 0 :(得分:0)

您可以在Apple文档中找到:

  

如果您希望应用的远程通知显示警报,播放声音或执行其他面向用户的操作,则必须调用registerUserNotificationSettings:方法来请求您要使用的通知类型。如果您不调用该方法,系统会以静默方式向您的应用程序发送所有远程通知。

答案 1 :(得分:-1)

IOS 8,对于获取设备令牌和注册远程通知,我们需要应用不同的进程。

if (IS_OS_8_OR_LATER) {

        //Right, that is the point
        UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:(UIRemoteNotificationTypeBadge
                                                                                             |UIRemoteNotificationTypeSound
                                                                                             |UIRemoteNotificationTypeAlert) categories:nil];
        [[UIApplication sharedApplication] registerUserNotificationSettings:settings];
    }else{
        // Register for push notifications
        [application registerForRemoteNotificationTypes:
         UIRemoteNotificationTypeBadge |
         UIRemoteNotificationTypeAlert |
         UIRemoteNotificationTypeSound];
    }

///////////我们需要再次定义

#ifdef __IPHONE_8_0
- (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings
{
    //register to receive notifications
    [application registerForRemoteNotifications];
}

- (void)application:(UIApplication *)application handleActionWithIdentifier:(NSString *)identifier forRemoteNotification:(NSDictionary *)userInfo completionHandler:(void(^)())completionHandler
{
    //handle the actions
    if ([identifier isEqualToString:@"declineAction"]){
    }
    else if ([identifier isEqualToString:@"answerAction"]){
    }
}

然后我们可以在ios 8中获取设备令牌