您的位置:首页 > 移动开发 > IOS开发

registerForRemoteNotification iOS7 iOS8

2015-03-06 17:03 393 查看
如果你还在代码里用 registerForRemoteNotificationTypes 这个方法来注册推送功能,你的 App 又用 iOS 8 的 SDK 编译了,那么你的 App 在 iOS 8 下将无法注册功能推送(在 iOS 7 下是可以的)。Apple 直接将这个 API 在 iOS 8 下设置成了「无法工作」,而不是简单的标记了 deprecated。

那么在 iOS 8 下用哪个 API 去注册远程推送功能?用新的 API:registerForRemoteNotifications。

但是,这个 API,仅仅会注册一个静默功能的远程推送,尽管 App 之后会收到推送并进行处理,它不会在用户界面上有任何提示。那么如何在 iOS 8 下完成和 iOS 7 下一样的远程推送注册支持?下面的代码可以让推送的支持在 iOS 7 和 iOS 8 下都正常工作,if 里面的是 iOS 8 的,而 else 那里是 iOS 7。

UIApplication *application = [UIApplication sharedApplication];

if ([application respondsToSelector:@selector(isRegisteredForRemoteNotifications)]) {
UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:(UIRemoteNotificationTypeBadge |UIRemoteNotificationTypeSound |UIRemoteNotificationTypeAlert) categories:nil];
[application registerUserNotificationSettings:settings];
[application registerForRemoteNotifications];
} else {
[application registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge
|UIRemoteNotificationTypeSound
|UIRemoteNotificationTypeAlert)];
}


可以看到,iOS 8 把原先一步到位的 RemoteNotification 的注册分成两部分,一部分是注册新引入的那个「UIUserNotificationSettings」,另一部分才是 RemoteNotifications。Apple 为什么要这样设计?

简单的说,Apple 在 iOS 8 将 RemoteNotification 和 LocalNotification 统一了起来。两种 Notifications 将统一由 UIUserNotificationSettings 来管理用户界面相关的东西:标记、声音和提醒。除了统一用户界面的通知外,UIUserNotificationSettings 还引入了 UIUserNotificationCategory,可以让用户方便的直接在 Notification 上进行一些快捷的操作(Action)。这部分我还没玩过,所以又不多讲了。

总之,Apple 为了推进新的技术,不惜直接把老的 API 弄成不工作,实在是让人惊叹…
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐