A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 柳柳桑 黑马粉丝团   /  2015-9-10 11:03  /  5426 人查看  /  28 人回复  /   3 人收藏 转载请遵从CC协议 禁止商业使用本文


iOS9开发之新增通知行为详解
                           ——张安宇

  苹果在iOS8发布时,收到短信时可以直接在通知栏输入文字并回复,非常炫酷,然而这一功能并未真正开放给开发者。
  iOS9新增了用户通知行为UIUserNotificationActionBehaviorTextInput,苹果终于将这一炫酷的功能开放给我们。

具体方式为:
1. 设置通知行为:
//1.创建可变通知行为
UIMutableUserNotificationAction * ua =[[UIMutableUserNotificationAction alloc] init];
//2.设置通知行为的表现为文本输入
  [uasetBehavior:UIUserNotificationActionBehaviorTextInput];
//3.给action给一个标示符
  [uasetIdentifier:@"myReply"];
//4.设置行为激活模式为保持后台运行
  [uasetActivationMode:UIUserNotificationActivationModeBackground];
这里设置激活模式时,如果在通知栏回复/阅读之后希望跳转回自己的APP,应当原则前台激活模式,如果回复/阅读之后希望保持后台运行才选择这个模式
1. 设置通知策略:
//1.创建一个可变通知策略
  UIMutableUserNotificationCategory* cate = [[UIMutableUserNotificationCategory alloc] init];
//2.给category一个标示符
  [catesetIdentifier:@"textCategory"];
//3.为这个策略category制定相关的通知行为action
  [catesetActions:@[ua] forContext:UIUserNotificationActionContextDefault];
1. 注册通知配置(iOS8以后的方式):
//1.通过上面的策略来创建用户通知配置
UIUserNotificationSettings * settings =[UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert|UIUserNotificationTypeBadge|UIUserNotificationTypeSoundcategories:[NSSet setWithArray:@[cate]]];
//2.注册这个通知配置
  [[UIApplicationsharedApplication] registerUserNotificationSettings:settings];
经过这三部之后完成了一个自定义通知策略的激活,其通知行为为文本框输入并回复。

发送本地通知
在需要发送通知的时候,只需要设置对应的策略和行为,就能以这种方式来弹出通知。以本地通知UILocalNotification为例:
//1.初始化本地通知
UILocalNotification * noti =[[UILocalNotification alloc]init];
//2.设置通知正文
  [notisetAlertBody:[NSString stringWithFormat:@"您有新的消息:%@",[NSDate new].description]];
//3.配置对应的策略和行为(必须之前已经注册过了)
[notisetCategory:@"textCategory"];
[notisetAlertAction:@"myReply"];
//4.弹出通知
[[UIApplication sharedApplication]presentLocalNotificationNow:noti];

接收通知行为文本框的回复内容
由于新的通知行为是有输入的,因此跟目前(截止本文撰写日期2015.9月)主流的聊天应用的通知提示方式不同,例如QQ在通知栏设置了ok和取消的按钮,这种方式虽然能够通过ok按钮回复”ok”两个字,但是也只能是这两个字。回复的消息内容是写死(HARD WRITE)的。
而新的通知行为是用户在通知栏输入什么则回复什么,因此APP需要获取到用户输入的内容。
下面2个UIApplicationDelegate的代理方法提供了这种带reply的通知代理:
//本地通知的带回复通知代理
- (void)application:(UIApplication*)application handleActionWithIdentifier:(nullable NSString *)identifierforLocalNotification:(UILocalNotification *)notificationwithResponseInfo:(NSDictionary *)responseInfo completionHandler:(void(^)())completionHandlerNS_AVAILABLE_IOS(9_0);
//远程通知的带回复通知代理
- (void)application:(UIApplication*)application handleActionWithIdentifier:(nullable NSString *)identifierforRemoteNotification:(NSDictionary *)userInfo withResponseInfo:(NSDictionary*)responseInfo completionHandler:(void(^)())completionHandlerNS_AVAILABLE_IOS(9_0);
不管具体是本地通知和本地通知,获取到通知栏用户输入的文本内容,只需要去responseInfo这个字典中取UIUserNotificationActionResponseTypedTextKey这个key对应的string就好了。
还是以本地通知为例:
-(void)application:(UIApplication *)application handleActionWithIdentifier:(nullableNSString *)identifier forLocalNotification:(UILocalNotification *)notificationwithResponseInfo:(NSDictionary *)responseInfo completionHandler:(void(^)())completionHandler{   
     NSLog(@"用户在文本框中输入的内容:%@",responseInfo[UIUserNotificationActionResponseTypedTextKey]);
     completionHandler();
}
具体方式就是这样了,小伙伴们赶紧试试吧,你可以比手机QQ先做出这个功能哦!

28 个回复

倒序浏览
炫酷的东西 先mark
回复 使用道具 举报
在学校的时候就看同学的小米手机能不开锁就直接回复内容,感觉挺方便的,当时找了半天结果发现我的小苹果还是不能实现,现在好了,方便多了,苹果还是注重用户的体验度啊.
回复 使用道具 举报
神马东东,太抽象了
回复 使用道具 举报
行业领跑者
回复 使用道具 举报
感觉炫炫的,mark一下
回复 使用道具 举报
收藏{:2_32:}
回复 使用道具 举报
魏武 高级黑马 2015-9-12 19:48:35
8#
果然很炫酷,希望早点讲到
回复 使用道具 举报
chensc 金牌黑马 2015-9-13 06:59:23
9#
学习学习!
回复 使用道具 举报
来一发啊来一发
回复 使用道具 举报
好懂西。。。。。。。
回复 使用道具 举报
mac 中级黑马 2015-9-23 10:22:16
12#
虽然看不太懂,但是感觉好厉害的样子!
回复 使用道具 举报
不错不错
回复 使用道具 举报
非常不错,学习新的功能了。
回复 使用道具 举报
fighting...
回复 使用道具 举报
好专业的感觉
回复 使用道具 举报
黑马就是棒
回复 使用道具 举报
很无奈的说,我根本没看懂!!!
回复 使用道具 举报
mark.......
回复 使用道具 举报
u37kl 中级黑马 2016-2-20 14:02:51
20#
学习了。。。。
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马