远程消息推送处理场景有三种:分别是app还没有运行、app在前台运行以及app在后台运行,下面介绍相关流程及三种场景下处理步骤

1.流程

(1)注册通知

首先是在注册远程消息推送,需要注意的是iOS8及以后的系统中注册方法有所改变(同时证书设置以及push权限也需要开启)。这一步的目的是,允许app接收远程消息推送。

(2)绑定deviceToken

deviceToken相当于设备的一个标识,服务器根据这个标识来进行消息推送。

①当用户同意app接收远程消息推送后,手机会向APNs发起一个请求去获取deviceToken;

②APNs收到请求,根据其相应流程及算法发送对应的deviceToken给手机;

③手机再将deviceToken传递给app;

④app再将deviceToken发送到后台服务器进行保存。

后台服务器以后就是根据deviceToken发送推送消息给APNs,APNs再根据deviceToken将消息推送到对应设备,设备再唤起app,显示推送而来的消息。

(3)针对远程推送消息进行处理

远程推送消息发送过来时,点开消息常常会有一些针对性处理或流程,最常见的就是跳转页面等,这里不再展开,下面将介绍不同场景下接收到推送后的处理步骤。

2.不同场景下推送消息的流程

(1)app在前台运行时收到推送

会调用“didReceiveRemoteNotification”方法,推送的数据在userInfo里,针对处理即可。

(2)app退出到后台状态时收到推送

屏幕上会出现通知提醒,如果点开消息进入app,app运行到前台时会调用“didReceiveRemoteNotification”方法,这也就是之前为什么要区分一下applicationState的原因,因为二者都是通过这一步来处理。

(3)app处于关闭退出状态时收到推送

同样屏幕上出现通知提醒,点开消息进入app,启动时“didFinishLaunchingWithOptions”方法里的launchOptions对应UIApplicationLaunchOptionsRemoteNotificationKey部分内容不再为空,含有的即是推送内容,针对处理即可。

3.其它

(1)网络状况不佳时远程消息推送情况

如果手机不在网的时候,APNs会有一个QoS的东西把消息保存很短的时间,等手机在网时再推送过来,当然离线时间久了,消息也就收不到了,但在实际中发现貌似网络不佳的时候一般就收不到了。

如果手机离线时,服务器推送了多条消息,即时上线了收到消息,也只会收到最新的一条

(2)推送的内容格式

推送的内容都有固定格式和长度,包括title(iOS8.2后增加的)、body、sound等,如果本地没有设置对应的声音文件,sound的值为default,收到推送的时候响起的是默认的提示音,并且推送消息的长度限制为256个字节(iOS8中这一限制放大到2kb),具体参考Local and Remote Notification Programming Guide中The Notification Payload这一节。

iOS开发笔记8:Remote Notification远程消息推送处理的更多相关文章

  1. iOS开发——远程消息推送的实现

    在我们使用App的过程中.总是会收到非常多的消息推送.今天我们就要来实现这个功能.首先消息推送分为本地消息推送和远程消息推送.而当中又以远程消息最为经常使用. 可是在推送远程消息之前.有两个前提条件. ...

  2. iOS远程消息推送原理

    1. 什么是远程消息推送? APNs:Apple Push Notification server 苹果推送通知服务苹果的APNs允许设备和苹果的推送通知服务器保持连接,支持开发者推送消息给用户设备对 ...

  3. iOS 远程消息推送,原理和开发详解篇(新手推荐)

    1.APNS的推送机制 首先我们看一下苹果官方给出的对ios推送机制的解释.如下图 Provider就是我们自己程序的后台服务器,APNS是Apple Push Notification Servic ...

  4. 分分钟搞定IOS远程消息推送

    一.引言 IOS中消息的推送有两种方式,分别是本地推送和远程推送,本地推送在http://my.oschina.net/u/2340880/blog/405491这篇博客中有详细的介绍,这里主要讨论远 ...

  5. iOS远程消息推送自我整理版

    @interface AppDelegate () <UIApplicationDelegate> @end @implementation AppDelegate - (BOOL)app ...

  6. iOS远程消息推送

    iOS 推送基础知识 Apple 使用公共密钥数字证书对来自 iOS 应用程序的推送请求进行身份验证,所以您首先需要创建身份验证密钥,并向 Apple 注册它们.我将在下一节中花相当长的篇幅来直接介绍 ...

  7. iOS和Android使用MQTT协议实现消息推送和即时通讯(替代XMPP,已经有TMS MQTT)

    大多数应用都会涉及到即时聊天的功能,在开源方案中有XMPP和MQTT.其中XMPP是基于XML的,并且不支持消息质量QOS, 所以本身并没有消息重传的机制,从而会导致丢消息.而MQTT是基于二进制的, ...

  8. iOS开发笔记10:圆点缩放动画、强制更新、远程推送加语音提醒及UIView截屏

    1.使用CAReplicatorLayer制作等待动画 CALayer+CABasicAnimation可以制作很多简单的动画效果,之前的博客中介绍的“两个动画”,一个是利用一张渐变色图片+CABas ...

  9. 细说 iOS 消息推送

    APNS的推送机制 与Android上我们自己实现的推送服务不一样,Apple对设备的控制很严格.消息推送的流程必需要经过APNs: 这里 Provider 是指某个应用的Developer,当然假设 ...

随机推荐

  1. 有关web 语义的文章总结

         A web of data that can be processed directly and indirectly by machines.  --Tim Berners-Lee web ...

  2. Lua和C语言的交互——C API

    Lua可作为扩展性语言(Lua可以作为程序库用来扩展应用的功能),同时也是个可扩展的语言(Lua程序中可以注册由其他语言实现的函数). C和Lua交互的部分称为C API.C API是一个C代码与Lu ...

  3. java io系列06之 序列化总结(Serializable 和 Externalizable)

    本章,我们对序列化进行深入的学习和探讨.学习内容,包括序列化的作用.用途.用法,以及对实现序列化的2种方式Serializable和Externalizable的深入研究. 转载请注明出处:http: ...

  4. MongoDB的学习--文档的查询

    继续关于<MongoDB权威指南>记录,今天的内容是文档的查询~~ MongoDB官网地址:http://www.mongodb.org/ 我使用的是MongoDB 2.4.8 find函 ...

  5. iOS- NSDateFormatter (自定义时间格式)

    一. NSDateFormatter解释 1. 日期(NSDate)是NSString类的格式(stringWithFormat),也可以改变输出,如果需要输出年代信息等则需要进行转换,等等. 2.  ...

  6. 【转】SAPI中的IspeechRecoContext(接口)

    IspeechRecoContext自动化接口定义一个识别上下文. 什么是一个识别上下文? 一个识别上下文就是应用程序和SAPI共同作用来实现语音识别的最主要方法.它就是用来允许应用程序来开始.停止识 ...

  7. 说说jsonp

    什么是jsonp jsonp充其量只能说是一种"方法".它可以让页面从其他域中获取资料.   首先要知道的是同源策略,在javascript中使用http请求(ajax)是会受到同 ...

  8. Angular系列----AngularJS入门教程04:迭代器过滤(转载)

    我们在上一步做了很多基础性的训练,所以现在我们可以来做一些简单的事情喽.我们要加入全文检索功能(没错,这个真的非常简单!).同时,我们也会写一个端到端测试,因为一个好的端到端测试可以帮上很大忙.它监视 ...

  9. 【iOS】线程安全的文件读写

    前段时间看了一遍GCD(Grand Central Dispatch)多线程,GCD是苹果为多核开发提供的解决方案 多线程最常见的问题就是读写,比如数据库读写,文件读写,读取是共享的,写是互斥,允许多 ...

  10. 【转载】delete table 和 truncate table 的区别

    使用delete语句删除数据的一般语法格式: delete [from] {table_name.view_name} [where] 将XS表中的所有行数据删除 delete XS 执行完后,发现X ...