关于app消息推送这方面,目前主要有两种方式:
第一种是pull,一般是通过轮询的方式,由client端向server端发出轮询请求去pull消息;
第二种是push,是client端与server端之间保持一个长连接,然后由server端将消息push到client端;
第三种是SMS,server端发送一条类似短信的信令给client端,client端反馈到server端并获取消息。
然后讲一下第二种push的方式。若是每一个app都开一个独立的进程去监听各自的server端的消息推送,则过于浪费性能,同时各个应用的服务提供者都要去搭建消息推送服务器,导致功能重复和管理混乱,所以iOS和android都建立了一个统一的推送机制。
一. iOS APP消息推送-------------APNs
APNs是apple提供的推送通知服务,其主要流程如下图
image.pngProvider将消息包装成一个JSON结构之后,与设备的token一起交给APNs的服务器,再由其将消息推送到特定的设备上。关于JSON结构相关,见apple提供的开发者编程指南
关于APNs具体的消息推送流程,见下图
image.png1.app安装后向iOS系统注册消息push服务。然后系统会向APNs注册,获取一个Device Token
2.APNs将Device Token交给app
3.app将Device Token交给provider即我们的服务端server
4.当server需要推送消息的时候,它会把需要推送的消息和接收设备的Device Token发送给APNs Server
5.APNs根据Device Token推送消息到指定设备
在以上步骤中,若需要根据用户进行特定推送,可以在用户登录的时候,记录其Device Token。
具体的向apple申请消息推送服务及证书部署等相关流程,相见apple提供的开发者编程指南
https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/APNSOverview.html
二. android APP的消息推送机制
由于google在国内无法使用,所以我们暂且不去关心google提供的GCM服务。主要可选的解决方案包括自己搭建消息推送服务器或者使用一些国内的第三方提供的服务。
1. MQTT协议
MQTT是一个客户端服务端架构的发布/订阅模式的消息传输协议。这个协议主要是根据发布/订阅模式来设计的。
关于MQTT协议的介绍如下:
https://www.gitbook.com/book/mcxiaoke/mqtt-cn/details
根据这个协议来实现消息推送代理服务很多,例如开源的mosquitto等。
2. XMPP协议
定义:Extensible Messageing and Presence Protocol,可扩展消息与存在协议,是基于可扩展标记语言(XML)的协议,是目前主流的四种IM协议之一。
其他三种:即时信息和空间协议(IMPP)、空间和即时信息协议(PRIM)、即时通讯和空间平衡扩充的进程开始协议SIP(SIMPLE)
XMPP协议的特点在于其定义了三个角色,分别是客户端、服务器和网关。
其原理流程图如下:
客户端的主要工作:
(1).通过 TCP/IP与XMPP 服务器连接,然后在之上传输与即时通讯相关的指令(XML);
(2)解析组织好的 XML 信息包;
(3)理解消息数据类型。
服务器的主要工作:
(1)监听客户端连接,并直接与客户端应用程序通信(客户端信息记录);
(2)与其他 XMPP 服务器通信。
XMPP协议介绍:
http://www.cnblogs.com/hanyonglu/archive/2012/03/04/2378956.html
开源实现,如XMPPframework,一个针对于OS X/iOS平台的开源项目,github地址为:https://github.com/robbiehanson/XMPPFramework
3. 第三方消息推送服务
包括极光,友盟,以及手机厂商类似小米、华为等提供的服务
关于这几个的比较:http://www.jianshu.com/p/d77eaca4e52a
三、生活号、公众号消息推送
关于生活号和公众号的消息推送,主要是通过支付宝和微信官方提供的接口进行消息推送。
支付宝生活号消息推送:
https://fuwu.alipay.com/platform/doc.htm#c04
微信公众号消息推送:
https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140453
网友评论