首页 > 代码库 > iOS8新特性之交互式通知
iOS8新特性之交互式通知
iOS8以前的远程通知想必大家都非常熟悉了,这里不做过多介绍,直接介绍iOS8中的交互式远程通知。
一、通过调用 [[UIApplicationsharedApplication]registerForRemoteNotifications];来实现
application:didRegisterForRemoteNotificationsWithDeviceToken:和application:didFailToRegisterForRemoteNotificationsWithError:的回调
二、设置 UIUserNotificationAction和UIMutableUserNotificationCategory
UIUserNotificationAction的设置:
UIMutableUserNotificationAction *cancelAction = [[UIMutableUserNotificationAction alloc] init]; [cancelAction setIdentifier:@"CancelNotificationActionIdentifier"]; [cancelAction setTitle:@"Cancel"]; [cancelAction setActivationMode:UIUserNotificationActivationModeBackground]; [cancelAction setAuthenticationRequired:YES]; [cancelAction setDestructive:YES];
identifier
User notificaton aciton的唯一标示
title
User notificaton aciton button的显示标题
activationMode
UIUserNotificationActivationModeForeground 激活App并打开到前台展示
UIUserNotificationActivationModeBackground 在后台激活App,测试时发现如果没有启动App(App不在后台也没有打开),那么执行这种模式下的操作,App不会打开;如果App已经在前台了,那么执行这种模式下的操作,App依然在前台。
authenticationRequired
如果设置为YES,执行这个操作的时候必须解锁设备,反之,无需解锁。
如果activationMode为UIUserNotificationActivationModeForeground时,authenticationRequired被作为YES处理。
测试时发现,如果用户设备有密码,在锁屏时authenticationRequired设置为YES执行操作时需要用户输入密码,如果设置为NO则不需要用户输入密码,如果用户设备没有密码,那么无论如何设置都不需要输入密码。
destructive
标示操作按钮是否为红色,只有在锁屏和从通知中心向左滑动出现时才有这种突出显示,在顶部消息展示时没有这种突出效果。
UIMutableUserNotificationCategory的设置:
UIMutableUserNotificationCategory *notificationCategory = [[UIMutableUserNotificationCategory alloc] init]; [notificationCategory setIdentifier:@"NotificationCategoryIdentifier"]; [notificationCategory setActions:@[acceptAction, cancelAction] forContext:UIUserNotificationActionContextDefault];
<strong><em>identifier</em></strong>
category的唯一标示,identifier的值与payload(从服务器推送到客户端的内容)中category值必须一致。
actions
UIUserNotificationAction 数组,如果设置为nil,那么将不会显示操作按钮。
context
UIUserNotificationActionContextDefault 通知操作的默认Context,在这种情况下,你可以指定4个自定义操作。(还未验证)
UIUserNotificationActionContextMinimal 通知操作的最小Context,在这种情况下,你可以指定2个自定义操作。(还未验证)
UIUserNotificationType notificationTypes = (UIUserNotificationTypeAlert| UIUserNotificationTypeSound| UIUserNotificationTypeBadge); NSSet *categoriesSet = [NSSet setWithObject:notificationCategory]; UIUserNotificationSettings *notificationSettings = [UIUserNotificationSettings settingsForTypes:notificationTypes categories:categoriesSet];设置通知所支持的类型和Category,这里没有难点,不过多解释。
四、注册通知 registerUserNotificationSettings
[[UIApplication sharedApplication] registerUserNotificationSettings:notificationSettings];在iOS8中通过以上方式注册通知,可以根据操作系统版本做区分处理
五、处理回调事件
- (void)application:(UIApplication *)application handleActionWithIdentifier:(NSString *)identifier forRemoteNotification:(NSDictionary *)userInfo completionHandler:(void (^)())completionHandler { if([identifier isEqualToString:@"CancelNotificationActionIdentifier"]) { NSLog(@"You chose cancel action."); } else if ([identifier isEqualToString:@"AcceptNotificationActionIdentifier"]) { NSLog(@"You chose accept action."); } if(completionHandler) { completionHandler(); } }
<strong><em>application</em></strong>
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">收到通知的对象</span>
identifier
UIUserNotificationAction的唯一标示
userInfo
payload的内容
completionHandler
当执行完指定的操作后,必须在最后调用这个方法
我测试用的paload是
{ aps = { alert = "Thank you very much"; badge = 1; category = NotificationCategoryIdentifier; sound = "ping.caf"; }; }
iOS8新特性之交互式通知