远程消息推送处理场景有三种:分别是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. jquery 按钮效果 正常、移上、按下

    在网页设计过程中,经常遇见按钮的各状态效果.写了一个jquery扩展,使这个过程更方便! 使用前注意引用Jquery: JqueryExtend.js: (function ($) { // Butt ...

  2. Awk by Example--转载

    原文地址: http://www.funtoo.org/Awk_by_Example,_Part_1?ref=dzone http://www.funtoo.org/Awk_by_Example,_P ...

  3. 【转载】给VM虚拟机增加硬盘容量

    转载自:http://www.douban.com/note/53678368/ vmware-vdiskmanager [选项]这里的选项你必须包含以下的一些选择项或参数选项和参数描述<dis ...

  4. JS魔法堂:精确判断IE的文档模式by特征嗅探

    一.前言 苦逼的前端攻城狮都深受浏览器兼容之苦,再完成每一项功能前都要左顾右盼,生怕浏览器不支持某个API,生怕原生API内含臭虫因此判断浏览器类型和版本号成了不可绕过的一道关卡,而特征嗅探是继浏览器 ...

  5. 通过Nginx实现负载均衡

    百度了下负载均衡:英文名称为Load Balance,其意思就是分摊到多个操作单元上进行执行,例如Web服务器.FTP服务器.企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务 嗯,跟我理 ...

  6. Mysql查询大表出现的一个错误

    第一次测试执行下面的语句时发生如下错误:bigdata里面有100万条数据 mysql> select count(*) from (select distinct(id) from bigda ...

  7. SQL增删查改注意的事项

    一.新增 1.增加的时候,bit字段要用“0,1”表示false,和true: 2.时间字段,用单引号包括,里面要遵循基本时间格式: 3,不能为标识列(自动编号列)插入数据(特殊情况下:set ide ...

  8. EntityFramework 6.1.2-beta2

    EntityFramework 6.1.2-beta2 Entity Framework is Microsoft's recommended data access technology for n ...

  9. C# WinFrom 跨线程访问控件

    1.跨线程访问控件委托和类的定义 using System; using System.Windows.Forms; namespace ahwildlife.Utils { /// <summ ...

  10. 一个端口操作类PortHelper

    此操作类主要使用了系统命令行来实现的,详细的命令可参照微软文档<如何使用"netsh advfirewall firewall"上下文而非“netsh firewall”上下 ...