我会从核心问题讲起,然后介绍官方方案、主流第三方方案,最后进行总结和选型建议。

为什么 Android 推送这么复杂?
理解这个问题是理解所有推送方案的基础。
在 iOS 上,Apple 提供了统一的 APNs (Apple Push Notification service),所有 App 都通过它接收推送,简单直接。
而在 Android 上,情况则复杂得多,其核心挑战在于系统级限制和厂商定制化。
-
系统级限制 (Android 8.0+ 的后台限制)
(图片来源网络,侵删)- Doze 模式:当设备处于静止状态且屏幕关闭一段时间后,系统会进入低电量“Doze”模式,在此模式下,App 的网络访问、任务调度等都会受到严格限制,无法可靠地接收服务器推送。
- 应用待机模式:如果用户长时间没有打开某个 App,系统会将其置于“待机”状态,这会限制 App 的后台网络活动,导致推送延迟或丢失。
- 后台限制:从 Android 6.0 (Marshmallow) 开始,Google 就在逐步限制后台服务的运行,以提升续航和性能。
-
厂商定制化 (OEMs 的推送服务)
- 为了绕过 Android 系统的后台限制,各大手机厂商(如小米、华为、OPPO、VIVO、三星等)都开发了自己的一套推送服务。
- 这些服务运行在系统级,拥有更高的权限,可以唤醒 App 并接收消息,但它们也带来了新的问题:
- 标准不统一:每个厂商都有自己的 SDK、接入文档和推送规则。
- 需要集成多个 SDK:如果希望 App 在所有品牌手机上都有良好的推送体验,开发者需要同时集成所有厂商的推送 SDK,这极大地增加了开发和维护成本。
- 常见的厂商推送服务有:
- 华为:HMS Push
- 小米:Mi Push
- OPPO:OPPO Push
- VIVO:VIVO Push
- 魅族:Meizu Push
- ...等等
-
FCM (Firebase Cloud Messaging) 的局限性
- FCM 是 Google 官方提供的免费推送服务,理论上是最理想的方案,但它在中国的处境比较尴尬:
- 网络环境:Google 服务在中国大陆访问不稳定,甚至被屏蔽,导致 FCM 的连接经常中断。
- 厂商通道优先级:即使在 FCM 可用的情况下,为了确保推送的及时性和可靠性,主流做法仍然是优先使用厂商通道,FCM 作为一个保底通道。
- FCM 是 Google 官方提供的免费推送服务,理论上是最理想的方案,但它在中国的处境比较尴尬:
官方推送方案:FCM (Firebase Cloud Messaging)
FCM 是 Google 推出的跨平台消息解决方案,是 Android 推送的基石。
FCM 的工作原理
- App 注册:App 安装后,会向 FCM 服务器注册,获取一个唯一的设备令牌。
- App 服务器发送:你的 App 服务器(后端)构建一个包含目标设备令牌、消息内容和数据的通知,然后发送给 FCM 服务器。
- FCM 服务器处理:FCM 服务器收到请求后,会进行判断:
- App 在前台:FCM 直接通过系统广播将消息传递给 App,由 App 的
Service或Activity处理。 - App 在后台或已关闭:FCM 会尝试通过长连接将消息推送到设备,如果这个长连接不可用(网络问题或 App 被系统杀死),FCM 会将消息交给操作系统,由系统在下一次设备唤醒时(如屏幕亮起、充电时)尝试投递。
- App 在前台:FCM 直接通过系统广播将消息传递给 App,由 App 的
- App 接收消息:App 内部需要一个继承自
FirebaseMessagingService的服务来监听和处理来自 FCM 的消息。
FCM 的优点
- 官方支持:Google 官方维护,长期稳定。
- 功能强大:支持通知消息、数据消息以及主题订阅。
- 跨平台:支持 Android 和 iOS。
- 免费:有 generous 的免费配额。
FCM 的缺点
- 在中国不稳定:由于网络原因,连接可能不可靠。
- 不保证 100% 投递:在系统后台限制下,消息可能会有延迟或丢失。
主流第三方推送方案
由于 FCM 的局限性以及厂商推送的复杂性,催生了众多第三方推送服务,它们的核心价值在于一站式解决所有问题。

工作原理
第三方推送服务本质上是一个“中间层”或“代理层”。
- 集成 SDK:在你的 App 中集成第三方推送 SDK。
- 多通道接入:这个 SDK 内部已经集成了 FCM SDK 以及所有主流厂商的推送 SDK。
- 智能路由:当你通过第三方服务的控制台或 API 发送一条推送时,SDK 会智能地选择最佳的通道:
- 优先厂商通道:如果设备是华为、小米等品牌,SDK 会优先使用对应厂商的推送通道,因为这是最可靠、最及时的。
- 回退到 FCM:如果设备不支持厂商推送,或者厂商通道不可用,则回退到 FCM 通道。
- 长连接保活:很多第三方 SDK 还会通过一些技术手段(如建立心跳长连接)来维持 App 的活跃度,确保 FCM 通道的可用性。
主流第三方推送服务商
| 服务商 | 官网 | 特点 |
|---|---|---|
| 极光推送 | https://www.jiguang.cn/push |
国内老牌、市场份额最大,稳定可靠,文档完善,生态丰富(IM、统计等)。 |
| 个推 | https://www.getui.com/ |
同样是行业巨头,尤其在金融、政务领域有深厚积累,推送稳定性和到达率高。 |
| 友盟+ | https://www.umeng.com/ |
以统计起家,后来整合了推送功能,如果你的 App 已经在使用友盟的统计,集成推送会很方便。 |
| 腾讯信鸽 | https://xg.qq.com/ |
腾讯出品,依托腾讯的生态和技术实力,对腾讯系 App 支持更好。 |
| 七牛云推送 | https://www.qiniu.com/push |
以云存储起家,其推送服务也以稳定和简洁著称。 |
| 小米推送 | https://dev.mi.com/push/ |
小米官方的推送开放平台,如果你的目标用户中小米手机占比较高,这是一个不错的选择。 |
第三方推送的优点
- 一站式接入:只需集成一个 SDK,即可覆盖所有品牌手机和 FCM,极大降低开发成本。
- 高到达率:通过智能路由和通道保活技术,能显著提升推送的到达率和及时性。
- 功能丰富:除了基本推送,还提供用户标签、定时推送、推送统计、消息回执等高级功能。
- 稳定可靠:有专业的团队负责维护和优化,比自己集成要稳定得多。
第三方推送的缺点
- 依赖第三方:你的推送能力完全依赖于服务商的稳定,如果服务商出现问题,你的推送就会中断。
- 有免费额度:虽然大部分都有免费额度,但用户量大了之后,需要付费。
- 数据安全:所有推送数据都经过第三方服务器,对于一些对数据安全要求极高的场景(如金融、政务)需要谨慎评估。
选型建议
没有最好的方案,只有最适合你当前业务需求的方案。
场景 1:小型 App / 个人开发者 / 海外 App
- 首选方案:仅使用 FCM。
- 理由:
- 开发量最小,只需集成一个官方 SDK。
- 对于海外用户,FCM 是最稳定、最可靠的选择。
- 对于国内用户,可以接受一定的推送延迟和丢失率,以换取零成本和简单性。
- 增强方案:FCM + 保活长连接库,可以尝试一些开源的保活库来维持 FCM 的长连接,但这并不被 Google 鼓励,且效果有限。
场景 2:国内商业 App / 对推送到达率有较高要求
- 首选方案:第三方推送服务 (如极光、个推、友盟+等)。
- 理由:
- 这是目前国内 App 的主流和最佳实践。
- 用最小的开发成本,换来最高的推送到达率和最好的用户体验。
- 能省去后续维护各个厂商 SDK 的巨大麻烦。
- 选择哪个服务商:可以对比各家的免费额度、价格、稳定性、文档清晰度、技术支持和附加功能(如统计分析),选择最适合自己的。
场景 3:大型企业 / 对数据安全有极致要求
- 混合方案:自研推送 + FCM + 厂商推送。
- 理由:
- 这是最复杂、成本最高的方案,通常只有大型互联网公司(如淘宝、微信、支付宝)才会采用。
- 自研核心:搭建自己的推送服务器和协议,完全掌控数据。
- 集成 FCM 和厂商 SDK:作为自研方案的补充和保底,利用官方和厂商的通道来确保消息触达。
- 挑战:需要投入大量的人力物力进行研发和维护,技术门槛极高。
| 方案 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| FCM | 官方、免费、跨平台 | 在中国不稳定,到达率不高 | 海外 App,或对推送要求不高的国内小型 App |
| 厂商推送 | 到达率极高,及时性好 | 需要集成多个 SDK,维护成本高 | 作为第三方推送的通道,或特定品牌手机 App |
| 第三方推送 | 一站式接入,到达率高,功能丰富 | 依赖第三方,有免费额度,数据安全需考虑 | 绝大多数国内商业 App 的首选 |
| 自研推送 | 完全自主可控,安全性高 | 成本极高,技术复杂,维护困难 | 大型企业,金融、政务等对安全有极致要求的领域 |
对于绝大多数开发者来说,如果你的 App 主要面向国内用户,并且希望有稳定可靠的推送体验,直接选择一家成熟的第三方推送服务(如极光推送)是最高效、最经济的选择。
