共计 1607 个字符,预计需要花费 5 分钟才能阅读完成。
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 会动静调整心跳距离,从而达到最佳的推送成果。