Mobpush是一款由MobTech提供的业余收费的推送SDK,能够帮忙开发者实现智能化的推送服务。它反对多种推送音讯类型,全链路数据统计分析,多种厂商通道,以及用户行为剖析等性能。那么,Mobpush是如何将推送音讯下发到用户设施的呢?本文将从以下几个方面介绍Mobpush推送的下发逻辑:
- 推送模式
- 推送协定
- 厂商通道
- 心跳机制
推送模式
Mobpush整体应用Mobpush自有通道+厂商通道的形式,厂商通道包含iOS的APNs,Android的厂商通道包含华为、小米、魅族、OPPO、vivo等。如下图先看下整体的推送流程:
以上是Mobpush整体的流程。
iOS的告诉栏音讯全副是基于APNs首先下发的,然而如果APNs发送失败,咱们会再尝试应用自有音讯通道进行音讯下发,而后再由客户端解决为本地告诉的形式达到告诉栏,这样能够保障更高的音讯达到能力。
Android的告诉音讯如果对接了厂商通道,则优先会通过厂商零碎级别的通道发送,并且如果厂商通道失败,会采纳离线的形式保留,待客户端下次上线之后采纳Mobpush通道下发;所有的透传音讯都是须要通过Mobpush自有通道下发的。
推送协定
Mobpush自有通道是自定义的一套基于UDP的更为简略的二进制网络通信协定。为什么会思考应用UDP协定呢?有以下几个起因:
- Mobpush定位为宽广开发者提供稳固、实时的推送服务,须要可能接受极大的网络累赘压力,会连贯大量的客户端,并且要踊跃保障可疾速响应;对于推送服务来说音讯内容却更多是短消息内容,并非短文,大多相似于短信长度的揭示、告诉、营销内容,能够管制在UDP数据包长度内,不须要进行分包解决,Internet上的规范MTU(最大传输单元)值为576字节,网络层IP须要占据20,UDP首部占用8个,所以只须要管制下发内容长度在576-20-8 =548字节即可;对于PUSH 来说,对数据的达到程序性要求比拟低,不像IM这种交互须要保障音讯的程序。
- UDP更加适宜Mobpush的协定选型了,当然在Mobpush也并不是齐全放弃如MQTT的Qos机制,这个会在对应的设置条件下可保障音讯有一次的达到。
- Mobpush在音讯平安上也有所思考,会在下发音讯通过压缩、AES加密解决,而加密的AES KEY是动静生成。
厂商通道
厂商通道是指一些手机厂商提供的推送服务,如iOS的APNs,Android的华为、小米、魅族、OPPO、vivo等。厂商通道的劣势是能够利用零碎级别的权限和资源,保障推送音讯的高效达到和低耗电。Mobpush能够主动适配不同厂商的通道,实现多通道的智能推送。
为什么须要对接厂商通道呢?其实这个也是和APP的保活有及大的关系,以后Android的保活、互拉及其艰难,然而相对重要。个别的保活形式包含:利用零碎Service机制、设置过程优先级的形式、利用零碎播送、应用AlarmManager、过程间互相拉起、利用Native过程等等,然而当初android的对这些机制都有了对应策略,很难施展绝对大的作用。诚然在华为、小米、魅族各零碎中曾经有厂商本人的推送链接服务,厂商本人的推送服务必定是不会被杀死的,所以在思考推送服务的时候,利用好厂商自有通道,能够很好的保障音讯的精确达到,并且有的机型能够很好唤醒APP。
心跳机制
心跳机制是指客户端和服务器之间定期发送一些小数据包来维持连贯状态和检测网络情况。Mobpush依附心跳的机制来保护客户端、路由器、基站、服务端的关系,以此反抗NAT老化问题,以确保UDP链接的套接字保活。NAT老化问题是指因为IP资源的无限以及路由器端口数量无限导致路由器会定期清理不沉闷的连贯记录。
Mobpush的心跳包体只有一个字节长度,可能很大的节俭Client的流量,而且对于心跳工夫也能够调整。依据不同网络环境和设施状态,Mobpush会动静调整心跳距离,从而达到最佳的推送成果。