iOS9开发之新增通知行为详解
苹果在iOS8发布时,收到短信时可以直接在通知栏输入文字并回复,非常炫酷,然而这一功能并未真正开放给开发者。
iOS9新增了用户通知行为UIUserNotificationActionBehaviorTextInput,苹果终于将这一炫酷的功能开放给我们。
具体实现方式为:
1. 设置通知行为:
//1.创建可变通知行为
UIMutableUserNotificationAction * ua = [[UIMutableUserNotificationAction alloc] init];
//2.设置通知行为的表现为文本输入
[ua setBehavior:UIUserNotificationActionBehaviorTextInput];
//3.给action给一个标示符
[ua setIdentifier:@"myReply"];
//4.设置行为激活模式为保持后台运行
[ua setActivationMode:UIUserNotificationActivationModeBackground];
这里设置激活模式时,如果在通知栏回复/阅读之后希望跳转回自己的APP,应当原则前台激活模式,如果回复/阅读之后希望保持后台运行才选择这个模式
2. 设置通知策略:
//1.创建一个可变通知策略
UIMutableUserNotificationCategory * cate = [[UIMutableUserNotificationCategory alloc] init];
//2.给category一个标示符
[cate setIdentifier:@"textCategory"];
//3.为这个策略category制定相关的通知行为action
[cate setActions:@[ua] forContext:UIUserNotificationActionContextDefault];
. 注册通知配置(iOS8以后的方式):
//1.通过上面的策略来创建用户通知配置
UIUserNotificationSettings * settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert|UIUserNotificationTypeBadge|UIUserNotificationTypeSound categories:[NSSet setWithArray:@[cate]]];
//2.注册这个通知配置
[[UIApplication sharedApplication] registerUserNotificationSettings:settings];
经过这三部之后完成了一个自定义通知策略的激活,其通知行为为文本框输入并回复。
发送本地通知
在需要发送通知的时候,只需要设置对应的策略和行为,就能以这种方式来弹出通知。以本地通知UILocalNotification为例:
//1.初始化本地通知
UILocalNotification * noti = [[UILocalNotification alloc]init];
//2.设置通知正文
[noti setAlertBody:[NSString stringWithFormat:@"您有新的消息:%@",[NSDate new].description]];
//3.配置对应的策略和行为(必须之前已经注册过了)
[noti setCategory:@"textCategory"];
[noti setAlertAction:@"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 *)identifier forLocalNotification:(UILocalNotification *)notification withResponseInfo:(NSDictionary *)responseInfo completionHandler:(void(^)())completionHandler NS_AVAILABLE_IOS(9_0);
//远程通知的带回复通知代理
- (void)application:(UIApplication *)application handleActionWithIdentifier:(nullable NSString *)identifier forRemoteNotification:(NSDictionary *)userInfo withResponseInfo:(NSDictionary *)responseInfo completionHandler:(void(^)())completionHandler NS_AVAILABLE_IOS(9_0);
不管具体是本地通知和本地通知,获取到通知栏用户输入的文本内容,只需要去responseInfo这个字典中取UIUserNotificationActionResponseTypedTextKey这个key对应的string就好了。
还是以本地通知为例:
- (void)application:(UIApplication *)application handleActionWithIdentifier:(nullable NSString *)identifier forLocalNotification:(UILocalNotification *)notification withResponseInfo:(NSDictionary *)responseInfo completionHandler:(void(^)())completionHandler {
NSLog(@"用户在文本框中输入的内容:%@",responseInfo[UIUserNotificationActionResponseTypedTextKey]);
completionHandler();
}
iOS9开发之新增通知行为详解的更多相关文章
- 重新想象 Windows 8 Store Apps (35) - 通知: Toast 详解
[源码下载] 重新想象 Windows 8 Store Apps (35) - 通知: Toast 详解 作者:webabcd 介绍重新想象 Windows 8 Store Apps 之 通知 Toa ...
- 重新想象 Windows 8 Store Apps (36) - 通知: Tile 详解
[源码下载] 重新想象 Windows 8 Store Apps (36) - 通知: Tile 详解 作者:webabcd 介绍重新想象 Windows 8 Store Apps 之 通知 Tile ...
- PHP开发中常见的安全问题详解和解决方法(如Sql注入、CSRF、Xss、CC等
页面导航: 首页 → 网络编程 → PHP编程 → php技巧 → 正文内容 PHP安全 PHP开发中常见的安全问题详解和解决方法(如Sql注入.CSRF.Xss.CC等) 作者: 字体:[增加 减小 ...
- Android游戏开发之旅 View类详解
Android游戏开发之旅 View类详解 自定义 View的常用方法: onFinishInflate() 当View中所有的子控件 均被映射成xml后触发 onMeasure(int, int) ...
- Android开发:文本控件详解——TextView(一)基本属性
一.简单实例: 新建的Android项目初始自带的Hello World!其实就是一个TextView. 在activity_main.xml中可以新建TextView,从左侧组件里拖拽到右侧预览界面 ...
- 微信公众开发URL和token填写详解
微信公众开发URL和token填写详解 方法/步骤 作为一名微信公众号开发者,别人进入你的微信公众号,肯定会看见某些网页,或者给你发某些信息,你需要实时自动回复,所以你需要一个24小时为用户服 ...
- iOS开发--常用技巧 (MJRefresh详解)
iOS开发--常用技巧 (MJRefresh详解) https://github.com/CoderMJLee/MJRefresh 下拉刷新01-默认 self.tableView.head ...
- Android开发:文本控件详解——TextView(二)文字跑马灯效果实现
一.需要使用的属性: 1.android:ellipsize 作用:若文字过长,控制该控件如何显示. 对于同样的文字“Android开发:文本控件详解——TextView(二)文字跑马灯效果实现”,不 ...
- legend3---Windows 7/8/10 系统下Laravel框架的开发环境安装及部署详解(Vagrant + Homestead)
legend3---Windows 7/8/10 系统下Laravel框架的开发环境安装及部署详解(Vagrant + Homestead) 一.总结 一句话总结: 1.安装的话就是下载好git,va ...
随机推荐
- ASP.NET SignalR2持久连接层解析
越是到年底越是感觉浑身无力,看着啥也不想动,只期盼着年终奖的到来以此来给自己打一针强心剂.估摸着大多数人都跟我一样犯着这样浑身无力的病,感觉今年算是没挣到啥钱,但是话也不能这么说,搞得好像去年挣到钱了 ...
- [iOS基础控件 - 4.2] APP列表 字典转模型Model
A.使用字典加载数据的缺点 1.用户自行指定key,容易出错 2.存入.取出都需要key,容易混乱 B.模型 (MVC中的model) 1.字典与模型对比: (1)字典:存储数据,通过字符串类型的 ...
- 阿里巴巴笔试整理系列 Session2 高级篇
阿里一面:1. 入场就是红黑树,B数2. apache和nginx源码看过多少,平时看过什么技术论坛,还有没有看过更多的开源代码3. pthread 到自旋锁4. hadoop源码看过没5. 为什么选 ...
- ECSHOP在线手册布局参考图--商品详情页 goods.dwt
A.购物车 1,设置方法 程序自动读取购物车的商品数量 2,代码相关 cart.lbi 中 {insert_scripts files='transport.js'} <div clas ...
- sudo: /etc/sudoers is mode 0640, should be 0440解决办法
ubuntu或者CentOS中,/etc/sudoer 的权限为 0440时才能正常使用,否则sudo命令就不能正常使用.出现类似:sudo: /etc/sudoers is mode 0640, s ...
- cocos2d-x Sprite
转自:http://codingnow.cn/cocos2d-x/795.html 精灵是游戏中十分重要的组成部分,随处可见,如:游戏背景.NPC.人物.道具等.在cocos2d-x引擎中,只要是用图 ...
- 【转】移动前端手机输入法自带emoji表情字符处理
http://blog.csdn.net/binjly/article/details/47321043 今天,测试给我提了一个BUG,说移动端输入emoji表情无法提交.很早以前就有思考过,手机输入 ...
- IOS7 隐藏状态栏
- (UIStatusBarStyle)preferredStatusBarStyle { return UIStatusBarStyleLightContent; } // - (BOOL)pref ...
- Project Management - 1) Schedule Your Project
1. 根据项目的理解,列出主要的里程碑. (初始甘特图) 2. 多使用即时贴,甘特图可以贴在墙上以供项目组成员提醒. 3. 切忌过早细化项目日程,这样会让老板或出资人以为项目中几乎没有风险, 他们会把 ...
- Fatal error: Using $this when not in object context in 解决方法
Fatal error: Using $this when not in object context in 解决方法 粗心造成的错误 $this 只存在于下面情况 $obj = new object ...