iOS8我们有一个新的通知中心,我们有一个新的通报机制。当在屏幕的顶部仅需要接收一个推拉向下,你可以看到高速接口,天赋并不需要输入应用程序的操作。锁定屏幕,用于高速处理可以推动项目。

推送信息,再次提高处理效率。

可以进行直接互动的短信、邮件、日历、提醒,第三方应用,可以让你不用进入程序就能进行快捷操作,并专注于手中正在做的事情。

  • 在通知横幅高速回复信息,不用进入短信程序;
  • 可直接拒绝或接受邮件邀请;
  • 可对提醒进行标记为完毕或推迟;
  • 当第三方应用更新接口后便可直接相应用进行高速操作。


               

近期研究了下iOS8的官方文档。对这项功能进行了钻研,基本上效果已经出来。由于远程消息推送比較繁琐,须要后台支持,所以我用本地推送来取代的,基本上它们要调用的代理方法类似。

长话短说,以下我就说下主要的流程:

1.创建消息上面要加入的动作(button的形式显示出来)

 UIMutableUserNotificationAction *action = [[UIMutableUserNotificationAction alloc] init];
action.identifier = @"action";//button的标示
action.title=@"Accept";//button的标题
action.activationMode = UIUserNotificationActivationModeForeground;//当点击的时候启动程序
// action.authenticationRequired = YES;
// action.destructive = YES; UIMutableUserNotificationAction *action2 = [[UIMutableUserNotificationAction alloc] init]; //第二button
action2.identifier = @"action2";
action2.title=@"Reject";
action2.activationMode = UIUserNotificationActivationModeBackground;//当点击的时候不启动程序。在后台处理
action.authenticationRequired = YES;//须要解锁才干处理,假设action.activationMode = UIUserNotificationActivationModeForeground;则这个属性被忽略;
action.destructive = YES;

2.创建动作(button)的类别集合

UIMutableUserNotificationCategory *categorys = [[UIMutableUserNotificationCategory alloc] init];
categorys.identifier = @"alert";//这组动作的唯一标示
[categorys setActions:@[action,action2] forContext:(UIUserNotificationActionContextMinimal)];

3.创建UIUserNotificationSettings,并设置消息的显示类类型

 UIUserNotificationSettings *uns = [UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeAlert|UIUserNotificationTypeBadge|UIUserNotificationTypeSound) categories:[NSSet setWithObjects:categorys, nil]];

4.注冊推送

[[UIApplication sharedApplication] registerUserNotificationSettings:uns];
<pre name="code" class="objc">[[UIApplication sharedApplication] registerForRemoteNotifications];

UserRequires call to registerUserNotificationSettings:• SilentInfo.plist UIBackgroundModes array contains remote-notification•
Can use both

离线push数据包带上特定Category字段(字段内容需要前后台一起定义。必需要保持一致),手机端收到时。就能展示上述代码相应Category设置的button,和响应button事件。

// payload example:  {"aps":{"alert":"Incoming call", "sound":"default", "badge": 1, "category":"incomingCall"}}

重大改动: 离线push数据包之前能带的数据最多为256字节,如今APPLE将该数值放大到2KB。

这个应该是仅仅针对IOS8的。

5.发起本地推送消息

 UILocalNotification *notification = [[UILocalNotification alloc] init];
notification.fireDate=[NSDate dateWithTimeIntervalSinceNow:5];
notification.timeZone=[NSTimeZone defaultTimeZone];
notification.alertBody=@"測试推送的快捷回复";
notification.category = @"alert";
[[UIApplication sharedApplication] scheduleLocalNotification:notification]; //用这两个方法推断是否注冊成功
// NSLog(@"currentUserNotificationSettings = %@",[[UIApplication sharedApplication] currentUserNotificationSettings]);
//[[UIApplication sharedApplication] isRegisteredForRemoteNotifications];

6.在AppDelegate.m里面对结果进行处理

//本地推送通知
-(void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings
{
//成功注冊registerUserNotificationSettings:后,回调的方法
NSLog(@"%@",notificationSettings);
} -(void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
{
//收到本地推送消息后调用的方法
NSLog(@"%@",notification);
} -(void)application:(UIApplication *)application handleActionWithIdentifier:(NSString *)identifier forLocalNotification:(UILocalNotification *)notification completionHandler:(void (^)())completionHandler
{
//在非本App界面时收到本地消息,下拉消息会有快捷回复的button,点击button后调用的方法,依据identifier来推断点击的哪个button,notification为消息内容
NSLog(@"%@----%@",identifier,notification);
completionHandler();//处理完消息。最后一定要调用这个代码块
} //远程推送通知
-(void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
//向APNS注冊成功,收到返回的deviceToken
} -(void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error
{
//向APNS注冊失败,返回错误信息error
} -(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
//收到远程推送通知消息
} -(void)application:(UIApplication *)application handleActionWithIdentifier:(NSString *)identifier forRemoteNotification:(NSDictionary *)userInfo completionHandler:(void (^)())completionHandler
{
//在没有启动本App时。收到server推送消息。下拉消息会有快捷回复的button,点击button后调用的方法,依据identifier来推断点击的哪个button
}

执行之后要按shift + command +H,让程序推到后台,或者按command+L让模拟器锁屏,才会看到效果。

假设是程序退到后台了,收到消息后下拉消息,则会出现刚才加入的两个button;假设是锁屏了,则出现消息后,左划就会出现刚才加入的两个button。

效果例如以下:

  

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveXVqaWFueGlhbmc2NjY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

如今仅仅是能让消息中显示出button的形式,带输入框的还在研究中,假设大研究了,也谢谢分享什么啊。我们共同努力改善!

代码:https://github.com/ios44first/PushDemo

(转载请注明地址。谢谢 http://blog.csdn.net/yujianxiang666/article/details/35260135)

iOS8推送消息的回复处理速度的更多相关文章

  1. iOS8推送消息的快速回复处理

    http://blog.csdn.net/yujianxiang666/article/details/35260135 iOS8拥有了全新的通知中心,有全新的通知机制.当屏幕顶部收到推送时只需要往下 ...

  2. IOS中程序如何进行推送消息(本地推送,远程推送)

    [1]-------------什么是推送消息? 我就以一张图解释------------ [2]-----------IOS程序中如何进行本地推送?----------- 2.1,先征求用户同意 1 ...

  3. IOS 本地通知推送消息

    在现在的移动设备中,好多应用性的APP都用到了推送服务,但是有好多推送的内容,比如有的只是单纯的进行推送一个闹钟类型的,起了提醒作 用,有的则是推送的实质性的内容,这就分为推送的内容来区别用什么推送, ...

  4. 点击推送消息跳转处理(iOS)

    当用户点击收到的推送消息时候,我希望打开APP,并且跳转到对应的界面,这就需要在AppDelegate里面对代理方法进行处理. 当用户点击推送消息打开APP的时候会调用 - (BOOL)applica ...

  5. iOS 远程推送消息解析及逻辑处理

    关于远程推送的相关配置网上已经有足够多的教程,这里就不复述了.这里讲述当客户端收到推送消息后,应怎样对其进行相应的逻辑处理. 工程的AppDelegate.m文件里提供了如下方法: //当应用程序启动 ...

  6. iOS监听模式系列之推送消息通知

    推送通知 和本地通知不同,推送通知是由应用服务提供商发起的,通过苹果的APNs(Apple Push Notification Server)发送到应用客户端.下面是苹果官方关于推送通知的过程示意图: ...

  7. 微信硬件平台(八) 4 ESP8266通过微信公众号给用户推送消息

    https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=自己申请微信公众号的TOKEN 输出结果:  由于aRDUINO串 ...

  8. 极光推送消息——Alias别称方式(Andirod)

    1.pom文件引入相关jar包 <!--极光推送消息start--> <dependency> <groupId>net.sf.json-lib</group ...

  9. 使用PushSharp给iOS应用推送消息

    PushSharp是一个C#编写的服务端类库,用于推送消息到各种客户端,支持iOS(iPhone/iPad).Android.Windows Phone.Windows 8.Amazo.Blackbe ...

随机推荐

  1. Django学习之manage.py使用

    1.django-admin.py startproject mysite 开始一个项目,会初始化一些项目的结构文件 2.python manage.py runserver ip:port 如: p ...

  2. ORACLE—005:创建JOB(二)

    假设须要创建带參数的job,怎样创建呢. 我们直接将參数声明.并赋值.然后传给job调用的存储过程就可以. 比如.存储过程名为Pro_Test_JOB,參数共同拥有一个.是VARCHAR2类型. 创建 ...

  3. 使用独立PID namespace防止误杀进程

    一段错误的代码 首先看一段错误的代码: #!/bin/bash SLICE=100; slppid=1; pidfile=/var/run/vpnrulematch.pid # 停止之前的sleep ...

  4. c++中sort()及qsort()的使用方法总结

    当并算法具体解释请见点我 想起来自己天天排序排序,冒泡啊,二分查找啊,结果在STL中就自带了排序函数sort,qsort,总算把自己解脱了~ 所以自己总结了一下,首先看sort函数见下表:   函数名 ...

  5. Enum实现单例模式

    package com.wjy.effective; public enum Singleton { INSTANCE; private int numa; private int numb; pub ...

  6. ConditonHelper

    在网上其实已经有很多类似这种拼接sql条件的类,但是没有看到一个让我感觉完全满意的这样的类.最近看到 http://www.cnblogs.com/xtdhb/p/3811956.html 这博客,觉 ...

  7. NTFS权限设置时卡死

    客户是一家技术咨询和零部件制造的小公司,使用的文件服务器为R410上插4块1T硬盘做raid 5,服务器操作系统为windows server 2008R2,所有的设计资料的授权都是结合域账户和NTF ...

  8. phantomjs,selenium,pyv8,pythonwebkit,,,,,,,,,,,,,

    Pyv8,PythonWebKit,Selenium,PhantomJS,Ghost.py 等等.... 快速构建实时抓取集群[searchtb] 定义:http://i.cnblogs.com/Ed ...

  9. ArrayList线程不安全?

    ArrayList是线程不安全的,轻量级的.如何使ArrayList线程安全? 1.继承Arraylist,然后重写或按需求编写自己的方法,这些方法要写成synchronized,在这些synchro ...

  10. atitit.java方法属性赋值and BeanUtils 1.6.1 .copyProperty的bug

    atitit.java分配给属性值方法and BeanUtils 1.6.1 .copyProperty的bug 1. core.setProperty(o, "materialId&quo ...