转自:http://www.cocoachina.com/ios/20160316/15665.html

前言

推送通知,想必大家都很熟悉,关于原理之类的,这里就不过多阐述。在这里我们主要介绍下iOS8及iOS9之后关于推送的新功能。大家可能见过听说过,但可能有一些朋友并没有上手做过。这篇文章便给大家详细介绍推送中的快捷按钮及快捷回复等功能的实现。

快捷点赞,如微博点赞功能

效果图大家可以先看下:

首先先说如何为自己的推送添加快捷功能,该Demo中的动作 “赞”,代码如下:

//创建消息上面要添加的动作
    UIMutableUserNotificationAction *action1 = [[UIMutableUserNotificationAction alloc] init];
    action1.identifier = kNotificationActionIdentifileStar;
    action1.title = @"赞";
    //当点击的时候不启动程序,在后台处理
    action1.activationMode = UIUserNotificationActivationModeBackground;
    //需要解锁才能处理(意思就是如果在锁屏界面收到通知,并且iPhone设置了屏幕锁,点击了赞不会直接进入我们的回调进行处理,而是需要输入屏幕锁密码之后才进入我们的回调),如果action.activationMode = UIUserNotificationActivationModeForeground;则这个属性被忽略;
    action1.authenticationRequired = YES;
    /*
     destructive属性设置后,在通知栏或锁屏界面左划,按钮颜色会变为红色
     如果两个按钮均设置为YES,则均为红色(略难看)
     如果两个按钮均设置为NO,即默认值,则第一个为蓝色,第二个为浅灰色
     如果一个YES一个NO,则都显示对应的颜色,即红蓝双色 (CP色)。
     */
    action1.destructive = NO;

关于参数的意思,上方代码中已经有详细的解释了,那么该动作按钮创建完之后,我们需要的就是创建动作集合,并进行注册,代码如下:

//创建动作(按钮)的类别集合
    UIMutableUserNotificationCategory *category = [[UIMutableUserNotificationCategory alloc] init];
    //这组动作的唯一标示(kNotificationCategoryIdentifile为我定义的一个宏,可自行定义)
    category.identifier = kNotificationCategoryIdentifile;
    //最多支持两个,如果添加更多的话,后面的将被忽略
    [category setActions:@[action1, action2] forContext:(UIUserNotificationActionContextMinimal)];
    //创建UIUserNotificationSettings,并设置消息的显示类类型
    UIUserNotificationSettings *uns = [UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeAlert|UIUserNotificationTypeBadge|UIUserNotificationTypeSound) categories:[NSSet setWithObject:category]];
    [[UIApplication sharedApplication] registerUserNotificationSettings:uns];

到这里便能实现推送中快捷点赞的功能了。当然我们还会注意到iPhone中短信有快捷回复功能,这个是怎么实现的呢。 客官请往下继续看。

快捷回复,如短信中下拉快捷回复功能

老规矩,还是先上效果图,如下:

这个评论的动作和上面的“赞“只是多了一个属性的设置,即”behavior“。代码如下:

//第二个动作
    UIMutableUserNotificationAction *action2 = [[UIMutableUserNotificationAction alloc] init];
    action2.identifier = kNotificationActionIdentifileComment;
    action2.title = @"评论";
    //当点击的时候不启动程序,在后台处理
    action2.activationMode = UIUserNotificationActivationModeBackground;
    //设置了behavior属性为 UIUserNotificationActionBehaviorTextInput 的话,则点击了该按钮会出现输入框供输入
    action2.behavior = UIUserNotificationActionBehaviorTextInput;

细心的朋友可能注意到我在快捷回复输入内容时候,输入框右边的按钮名字和短信的快捷回复按钮名字并不一样(短信的为”发送“,该Demo为”评论“),这个按钮我们也是可以进行自定义的,代码如下:

//这个字典定义了当点击了评论按钮后,输入框右侧的按钮名称,如果不设置该字典,则右侧按钮名称默认为 “发送”
    action2.parameters = @{UIUserNotificationTextInputActionButtonTitleKey: @"评论"};

到这里,该Demo的基本功能就已经差不多完全实现了。剩下的就是回调了,回调走的函数便是AppDelegate中的代理方法了,如下:

// 本地通知回调函数,当应用程序在前台时调用
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification;
//在非本App界面时收到本地消息,下拉消息会有快捷回复的按钮,点击按钮后调用的方法,根据identifier来判断点击的哪个按钮,notification为消息内容
- (void)application:(UIApplication *)application handleActionWithIdentifier:(nullable NSString *)identifier forLocalNotification:(UILocalNotification *)notification withResponseInfo:(NSDictionary *)responseInfo completionHandler:(void(^)())completionHandler;

结束语

1:以上代码是只注册了本地推送的,远程推送和本地推送类似,推送消息如果要触发快捷动作,则需要在消息本体中含有上面category的identifier标志。如

//这个"Identifile"的需要和你在代码中设置的kNotificationCategoryIdentifile保持一致
{"aps":{"Identifile":"test remote notification", "sound":"default", "badge": 1, "category":"category"}}

2:在码代码时候如果需要兼容低版本的话,请注意在代码中进行版本的判断。

3:最后奉上Demo地址。

iOS 玩转推送通知的更多相关文章

  1. iOS上简单推送通知(Push Notification)的实现

    iOS上简单推送通知(Push Notification)的实现 根据这篇很好的教程(http://www.raywenderlich.com/3443/apple-push-notification ...

  2. ios如何实现推送通知

    推送通知的步骤:1.询问是否允许推送通知.2.如果用户允许在APPDELEGATE 中实现 - (void)application:(UIApplication *)application didRe ...

  3. 转:向IOS设备发送推送通知

    背景 SMS 和 MMS 消息是由无线运营商通过设备的电话号码向特定设备提供的.实现 SMS/MMS 的服务器端应用程序的开发人员必须费大量精力才能与现有的封闭电信基础架构进行交互(其中包括获取电话号 ...

  4. 【读书笔记】iOS网络-使用推送通知

    一,本地通知 本地通知有64位的最大限制.虽然,你依然可以调度通知,不过到到达的通知数被限定为接近64个,并且按照fireDate的顺序排序,系统会忽略掉其余的通知.这意味着如果现在有64个调用的本地 ...

  5. iOS 远程推送通知

    1.什么是推送通知 在某些特殊情况下,应用程序被动收到的以不同种界面形式出现的提醒信息 推送通知的作用:可以让不在前台运行的app通知app发生了改变 iOS中得推送通知种类 远程推送通知(Remot ...

  6. 推送通知iOS客户端编写实现及推送服务器端编写

    http://blog.csdn.net/tonny_guan/article/details/8963262 1.iOS客户端编程 推送通知技术在Mac OS X和iOS系统上都可以运行,我们本章主 ...

  7. iOS 本地推送通知

    1.什么是本地推送通知 不需要联网的情况下,应用程序经由系统发出的通知 2.本地推送的使用场景 定时提醒,如玩游戏.记账.闹钟.备忘录等 3.实现本地推送通知的步骤 创建本地推送通知的对象UILoca ...

  8. IOS之推送通知(本地推送和远程推送)

    推送通知和NSNotification是有区别的: NSNotification:是看不到的 推送通知:是可以看到的 IOS中提供了两种推送通知 本地推送通知:(Local Notification) ...

  9. iOS推送通知

    推送通知 此通知非彼通知. NSNotification是抽象的,看不见的,但是可以监听,属于观察者模式的一种设计模式. 推送通知是可见的,能用肉眼看见的,是真正的和用户打交道的通知. 推送通知分为两 ...

随机推荐

  1. 中文企业云操作系统 CecOS

    CecOS介绍 CecOS(原中文企业云操作系统.第一个版本基于oVirt 3.0,后续在此基础上不断升级迭代拓展至今,已形成基于基础底层和应用功能拓展集成在内的10款产品和四大平台),旨在通过先进的 ...

  2. 安利一个绘制指引线的JS库leader-line

    前言 之前看到一篇推荐Magi这个搜索引擎的新闻,对于这个搜索引擎是否好用咱们不予置评,但是我在这个搜索引擎上面发现了一个好玩的前端功能. 如上图,将鼠标浮动到学习来源上时,会展示一堆指引线. 本博客 ...

  3. .NET手撸绘制TypeScript类图——下篇

    .NET手撸绘制TypeScript类图--下篇 在上篇的文章中,我们介绍了如何使用.NET解析TypeScript,这篇将介绍如何使用代码将类图渲染出来. 注:以防有人错过了,上篇链接如下:http ...

  4. jsp页面不乱码,外部引用的js弹出对话框乱码

    今天在做一个课程设计的时候,写到一个界面注册,在用js判断数据的正确性时,碰到了一个js弹出框的乱码问题.在网上找寻了很久,也找了很多博客看,但是发现怎么样都不能解决我的问题,下面给出几个比较经典的解 ...

  5. ThinkPHP 6.0 管道模式与中间件的实现分析

    设计模式六大原则 开放封闭原则:一个软件实体如类.模块和函数应该对扩展开放,对修改关闭. 里氏替换原则:所有引用基类的地方必须能透明地使用其子类的对象. 依赖倒置原则:高层模块不应该依赖低层模块,二者 ...

  6. [spark程序]统计人口平均年龄(本地文件)(详细过程)

    一.题目描述 (1)编写Spark应用程序,该程序可以在本地文件系统中生成一个数据文件peopleage.txt,数据文件包含若干行(比如1000行,或者100万行等等)记录,每行记录只包含两列数据, ...

  7. ubantu14.04安装storm伪分布式

    1.安装jdk 安装:sudo apt-get install openjdk-7-jdk 配置: 修改文件 sudo nano /etc/profile , 添加以下内容: 立即执行使之生效: 2. ...

  8. 看源码学编程系列之kafka(一)

    kafka 由于它自身的高性能发送与消费能力,而受到广大企业的喜欢,所以我们就先看看kafka 一些源码实现如下: public void run() { int messageNo = 1; whi ...

  9. 四 linuk常用命令 1. 文件处理命令

    一. 命令格式与目录处理命令ls 命令格式 命令格式:命令 [-选项] [参数] 例:ls -la /etc 说明: 1.个别命令使用不遵循此格式 2. 当有多个选项时,可以写在一起 3.简化选项与完 ...

  10. 程序员修神之路--kubernetes是微服务发展的必然产物

    菜菜哥,我昨天又请假出去面试了 战况如何呀? 多数面试题回答的还行,但是最后让我介绍微服务和kubernetes的时候,挂了 话说微服务和kubernetes内容确实挺多的 那你给我大体介绍一下呗 可 ...