博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS8互动的新通知
阅读量:6692 次
发布时间:2019-06-25

本文共 3643 字,大约阅读时间需要 12 分钟。

iOS8一旦远程通知想必大家都很熟悉。不要做过多的描述在这里,直接推出iOS8交互式远程通知。

再看互动的通知电话,显示的形式

                

如今来看一下详细实现方式

一、通过调用 [[UIApplicationsharedApplication]registerForRemoteNotifications];来实现

application:didRegisterForRemoteNotificationsWithDeviceToken:application:didFailToRegisterForRemoteNotificationsWithError:的回调

二、设置 UIUserNotificationActionUIMutableUserNotificationCategory

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处理。

測试时发现,假设用户设备有password,在锁屏时authenticationRequired设置为YES运行操作时须要用户输入password,假设设置为NO则不须要用户输入password,假设用户设备没有password,那么不管怎样设置都不须要输入password。

destructive

标示操作button是否为红色,仅仅有在锁屏和从通知中心向左滑动出现时才有这样的突出显示。在顶部消息展示时没有这样的突出效果。

UIMutableUserNotificationCategory的设置:

UIMutableUserNotificationCategory *notificationCategory = [[UIMutableUserNotificationCategory alloc] init];[notificationCategory setIdentifier:@"NotificationCategoryIdentifier"];[notificationCategory setActions:@[acceptAction, cancelAction]                      forContext:UIUserNotificationActionContextDefault];

identifier

category的唯一标示,identifier的值与payload(从server推送到client的内容)中category值必须一致。

actions 

UIUserNotificationAction 数组。假设设置为nil,那么将不会显示操作button。

context 

UIUserNotificationActionContextDefault 通知操作的默认Context,在这样的情况下。你能够指定4个自己定义操作。(还未验证)

UIUserNotificationActionContextMinimal 通知操作的最小Context。在这样的情况下。你能够指定2个自己定义操作。(还未验证)

三、设置 
UIUserNotificationSettings

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();    }}

application

收到通知的对象

identifier

UIUserNotificationAction的唯一标示

userInfo

payload的内容

completionHandler

当运行完指定的操作后,必须在最后调用这种方法

我測试用的payload是

{    aps =     {        alert = "Thank you very much";        badge = 1;        category = NotificationCategoryIdentifier;        sound = "ping.caf";    };}

版权声明:本文博主原创文章,博客,未经同意不得转载。

你可能感兴趣的文章
sql server游标
查看>>
UML设计初步 - 基本概念一(actor, use case)
查看>>
关于Python中的for循环控制语句
查看>>
《http权威指南》阅读笔记(二)
查看>>
Javascript特效代码大全(420个)(转)
查看>>
jQuery闭包之浅见,从面向对象角度来理解
查看>>
(原创)北美信用卡(Credit Card)个人使用心得与总结(个人理财版) [精华]
查看>>
gevent
查看>>
LightOJ 1018 Brush (IV)(记忆化搜索)
查看>>
x264编码参数大测试:03 subme与crf(c)
查看>>
对自然数的有限区间散列
查看>>
低端路由器和高端路由的区别
查看>>
android webview 播放swf 失败<彻底解决黑框>
查看>>
应用程序实例——用户信息管理
查看>>
中文分词 mmseg4j 在 lucene 中的使用示例
查看>>
volley 发送post请求
查看>>
ti processor sdk linux am335x evm /bin/setup-uboot-env.sh hacking
查看>>
php 操作数组 (合并,拆分,追加,查找,删除等)
查看>>
[Hibernate] - EAGER and LAZY
查看>>
python 异常类型
查看>>