文章目录
APNs:聊一聊第三方系统级消息通道的事
在即时消息场景下,我们会依赖服务端推送技术来提升消息到达的实时性,以及通过各种手段来保证消息收发通道的可用性,从而让消息能尽量实时、稳定地给到接收人。
但在实际情况中,出于各种原因,App 与服务端的长连接会经常断开。比如,用户彻底关闭了 App,或者 App 切换到后台一段时间后,手机操作系统为了节省资源,会杀掉进程或者禁止进程的网络功能。在这些情况下,消息接收方就没有办法通过 App 和 IM 服务端的长连接来进行消息接收了。
现在手机常用的 iOS 和 Android 系统,都提供了标准的系统级下发通道,这个通道是系统提供商维护的与设备的公共长连接,可以保证在 App 关闭的情况下,也能通过手机的通知栏来下发消息给对应的接收人设备。而且,当用户点击这些通知时,还能重新唤醒我们的 App,不仅能提升消息的到达率,还增加了用户的活跃度。
Android 的厂商通道
对于 Android 端来说,应用的后台保活一直是提升消息在线推送到达率的重要手段,很多操作系统默认的配置是:切到后台一段时间后,会直接杀掉进程或者让进程断网。
虽然 App 间有互相拉起进程的取巧方式,以及系统厂商给某些超级 App(比如微信)的保活白名单机制,但对于大部分 App 来说,还是需要在 App 被杀死或者被限制的情况下,通过厂商的系统通道推送消息,以此提升整体的消息到达率。
对于开头我提到的 5 家厂商通道的接入,它们都提供了专门的 SDK(Software Development Kit,软件开发工具包),这些厂商 SDK 能够支持的功能,大致上和 APNs 比较类似,这里就不详细展开了,你可以自行了解一下。
不过值得说一下的是,由于各家 SDK 使用上各异,开发接入成本会相对较高,因此市面上还有很多第三方的 Push 服务,这些第三方的 Push 服务整合了多家厂商的 SDK,对外提供统一的接入,降低了对接门槛,比如个推、信鸽、极光、友盟等。
国内统一推送联盟
由于国内各个厂商系统推送通道的差异性,造成 Android 端系统推送整体上的混乱和复杂性。为此在 2017 年,中华人民共和国工业和信息化部(简称工信部)主导成立了安卓统一推送联盟,联合各大手机厂商和运营商共同推出了“**推必达”**产品,对标的是苹果的 APNs 和 Google 的 GCM。
根据官网的介绍,“推必达”除了通过传统的 TCP 长连网络来进行系统消息的下推外,还会和运营商合作,支持通过运营商的信令通道来进行消息下推。因此在没有 WiFi 和移动网络的场景下,我们只要有手机信号,也能接收到系统推送。
“推必达”提供了专门的 SDK 给到客户端,当各个 IM 服务端有消息需要通过系统推送触达用户时,会把消息直接或通过第三方推送服务交给各个厂商部署的 UPS 服务器,UPS 服务器再通过和客户端 SDK 维护的长连接,把消息推送下去。
由于其支持多种消息的触达途径,“推必达”的消息到达率据官网反馈:在全国 34 个省市的测试,消息到达率为 99.999%。目前,国内主要的手机厂商如华为、小米、OPPO、vivo 等,都已经加入到这个联盟中。另外,工信部要求到 2019 年 12 月 31 日,现有的各推送通道需要兼容统一推送标准。
因此,我认为对于 Android 端的系统推送来说,“推必达”产品如果能够成功落地,应该是未来系统推送的趋势。
文章作者 LYR
上次更新 0001-01-01