为了保障推送消息的稳定送达,技术团队必须在动态心跳、智能重连和进程保活之间,构建一个精密的平衡系统。
当你需要选择推送模式时,是在意实时性还是实现难度?Pull和Push这两种截然不同的实现模式,决定了消息触达的效率与体验。
一、Push 的实现模式
Pull 模式
定义:客户端主动去服务端拉取消息
特点:
• 触发方:客户端
• 实时性:一般,取决于轮询间隔或触发事件合理性
• 状态存储:保存在客户端,服务端可不保存
• 实现难度:相对简单
• 应用场景:客户端触发业务,如亮屏请求
工作流程:
客户端 → 接入层 → 业务服务端(pull 服务)
客户端发送心跳 → 接入层 → 业务服务端回包

Push 模式
定义:服务端通过长链接向客户端推送消息
特点:
• 触发方:服务端
• 实时性:较好,可立即下发给在线的客户端
• 状态存储:保存在服务端
• 实现难度:相对复杂
• 应用场景:高实时性业务,如资讯推送、IM 消息
工作流程:
业务服务端(push 服务)→ 接入层 → 客户端
业务服务端透传消息 → 接入层 → 客户端接收展示

备注:客户端本地 push 不在以上讨论范围
选择建议
不同的业务诉求对应不同的模式,根据实时性要求、资源投入、业务场景综合选择。
二、Push 通道分类概要

国内 Android 推送通道
- 自建通道
- 原理:业务方在客户端和业务服务端之间建立 TCP 长链接
- 优势:可控性强,无推送量限制
- 劣势:受进程保活影响,到达率不稳定
- 厂商通道
- 厂商:华为、小米、OPPO、vivo、荣耀、魅族
- 优势:系统级保障,到达率高,不依赖进程存活
- 劣势:有推送量限额,需适配各家规则
- 第三方通道
- 服务商:极光、个推、友盟等
- 优势:一站式接入多家厂商,集成便捷
- 劣势:部分功能需付费,依赖第三方稳定性
iOS 推送通道
• APNs(Apple Push Notification Service)
• 苹果官方统一推送服务
• 系统级保障,稳定性高
国外 Android 推送通道
• FCM(Firebase Cloud Messaging)
• Google 官方推送服务
• 覆盖 Android 和 iOS 平台
三、自建 Push 通道
什么是自建 Push 通道?
业务方在客户端和业务服务端之间建立 TCP 长链接以实现互相通信。

主要失败原因
- 客户端进程被杀
Android 系统为了省电、降低卡顿,会杀死后台正在运行的进程。
• Android 6.0 增加了低耗电模式
• Android 8.0 对后台服务做了限制
• 各厂商 ROM 对后台进程管控更加严格 - 长链接失效
• 客户端在网关进行 NAT(IP 地址转换)
• 网络切换会导致长链接中断
• 超时未响应导致链接断开
• 服务端高负载时无法响应心跳
四、如何搭建高效的自建通道
- 心跳机制优化
• 动态调整心跳间隔
• 根据网络状态自适应
• 前后台采用不同策略 - 重连策略
• 指数退避重连
• 网络状态监听
• 智能路由选择 - 进程保活
• 双进程守护
• 前台服务保活
• 系统广播唤醒 - 多通道备份
• 自建通道+厂商通道混合
• 降级策略保障送达