IOS平台的几个推送服务的对比
http://blog.163.com/scuqifuguang@126/blog/static/171370086201399113833299/
最近研究了一下极光推送(JPush),百度云推送和个推在IOS平台的推送机制,做了一下对比。
首先, 介绍苹果推送通知服务的推送机制(APNS: Apple Push Notification Service):

图1 APNS的推送流程
上图清晰地展示了APNS整个工作流程,其中Provider是第三方开发者的服务器。整个流程分三个阶段:
JPush在IOS平台上有完整的推送服务,他整个推送过程完全不依赖APNS的服务,也就是图1中的APNS变成了JPush自己的Push服务器。Iphone到Client App这个过程被简化了,JPush采用的是透传方式,消息的传递对于用户是透明的,不可见的,消息从JPush服务器直接就传到了Client App,用户无法感知。
百度云推送:
百度云推送是基于APNS的,也就是说他仅仅是APNS的一个代理,他的推送过程如下图:

图2 百度云推送的推送流程(IOS)
整个过程分为一下几个阶段:

图中各个函数的含义:
2014年2月25日更新:
笔者今天去个推主页查看的时候发现个推的解决方案换了,个推最近自己提供了到APNS组件,这样第三方开发者就不需要自己实现到APNS的组件服务了,只需要把IOS的证书以及证书密码传给个推即可。
首先, 介绍苹果推送通知服务的推送机制(APNS: Apple Push Notification Service):

图1 APNS的推送流程
上图清晰地展示了APNS整个工作流程,其中Provider是第三方开发者的服务器。整个流程分三个阶段:
- 第一阶段:应用程序把要发送的消息、目的iPhone的标识打包,发给APNS。
- 第二阶段:APNS在自身的已注册Push服务的iPhone列表中,查找有相应标识的iPhone,并把消息发送iPhone。
- 第三阶段:iPhone把发来的消息传递给相应的App,并且按照设定弹出Push通知。
JPush在IOS平台上有完整的推送服务,他整个推送过程完全不依赖APNS的服务,也就是图1中的APNS变成了JPush自己的Push服务器。Iphone到Client App这个过程被简化了,JPush采用的是透传方式,消息的传递对于用户是透明的,不可见的,消息从JPush服务器直接就传到了Client App,用户无法感知。
百度云推送:
百度云推送是基于APNS的,也就是说他仅仅是APNS的一个代理,他的推送过程如下图:

图2 百度云推送的推送流程(IOS)
- 管理控制台或者Server SDK初始化IOS App的证书(分为开发版证书和发行版证书)。
- 运行在手机上的Push SDK执行推送的初始化动作,将AppKey和DevicesToken上传给云推送服务器,服务器保留。
- 管理控制台或者Server SDK向云推送服务器发送一条推送指令,服务器接到指令后,将控制台传来的UserId(如果是广播没有UserId),Msg,与服务器保留的DevicesToken和证书一并打包传给APNS服务器。
- APNS接到数据后,根据UserId,将消息推送给指定的IPhone设备。
PushSDK 在APNS的编码基础上增加自己服务的初始化和绑定接口代码。
个推:
个推的做法就更简单了,他的整个交互图如下:

图3 个推推送交互图(IOS)
他对开发商的要求最高,他的官方论坛上有这么一句话:“开发者首先有一个自己的iOS推送组件,该组件可以实现从你们到苹果服务器的推送,根据我们提供的协议增加相应接口”。图3的右半部分,也就是第三方到APNS这个部分都是由第三方自己实现的,个推仅仅是实现个推服务器与第三方之间的交互。图中各个函数的含义:
- auth():个推服务器向第三方发送“验证”指令,如果验证结果正确,则第三方返回Token,8个推服务器保留这个Token。
- get_tags():个推服务器向第三方发送“获取tag”指令,第三方向个推服务器返回当前存在的tag列表,个推服务器保留。
- push_by_tags():个推服务器根据保留的tag列表,可以选择向一些tag发送消息,讲“向tag发送消息”的指令传递给第三方,第三方完成消息发现送任务。
- push_by_divece():个推根据divicesId调用第三方发送接口,完成发送任务。
纵观整个流程,个推服务器做的都是一些比较简单的事情,他要求第三方根据他的协议完成auth(),get_tags(),push_by_tags(),push_by_divice()接口,并给出API的地址,供个推服务器调用。笔者认为他这样做的原因是希望能够与android平台的推送共用一套系统,便于管理维护。
笔者今天去个推主页查看的时候发现个推的解决方案换了,个推最近自己提供了到APNS组件,这样第三方开发者就不需要自己实现到APNS的组件服务了,只需要把IOS的证书以及证书密码传给个推即可。
分类:
IOS Theroy
posted on 2014-10-10 15:13 ACM_Someone like you 阅读(1296) 评论(0) 编辑 收藏 举报
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)