2790 words
14 minutes
没有 Google 服务怎么推送:国内 Android 推送方案调研

没有 Google 服务怎么推送:国内 Android 推送方案调研#

为什么研究这个#

前阵子给 mini-agent 写 Android 薄客户端,推送这块选了 FCM:客户端部分写完了(token 注册、FirebaseMessagingService、通知渲染),服务端的注册接口和触发投递还没做。写着写着我意识到一个问题——FCM 在国内基本不可用,如果用户在国内、没挂 VPN,定时提醒根本推不到手机上。

那国内的 App 都是怎么推的?我花了一天翻各家官方文档,这篇是调研笔记。先说结论:国内推送靠的是每个手机厂商在 ROM 里各自做的一套”FCM”,中小团队一般不逐家接,而是接一家聚合推送 SDK;2023 年之后最大的坑不是技术集成,是各家上线的消息分类和限额制度。

FCM 为什么在国内指望不上#

FCM 的推送通道依赖 Google Play 服务(GMS)维持一条系统级长连接。国内卖的手机大多不带 GMS——华为 2019 年之后的新机型干脆完全没有;就算机器里有 GMS,它的长连接服务器在国内网络环境下也不可达或不稳定。

所以国内没有任何主流 App 靠 FCM 触达国内用户。FCM 只对走 Google Play 的海外版有意义。

厂商推送通道:每家 ROM 里都藏着一个”FCM”#

国内真正的答案:每个手机厂商都在自家 ROM 里做了一套和 FCM 同构的推送服务。

华为 Push Kit、小米 MiPush、OPPO PUSH、vivo PUSH、荣耀推送、魅族 Flyme Push,机制都一样:ROM 里预置一个推送服务进程,由它跟厂商云端维持一条系统级长连接,这台手机上所有 App 的推送共用这条连接。推送到达后由系统进程展示通知,App 进程死没死无所谓。

这就是”App 被杀也能收到推送”的原理,和 FCM 在原生 Android 上的机制完全一样,只是每家厂商各搞一套。正规国内 App 的做法是”谁家手机走谁家通道”:华为手机走华为通道,小米手机走小米通道。

逐家接的成本很高:五套以上的客户端 SDK、五套服务端 API、五个开放平台控制台,每家的鉴权方式、参数格式、回执都不一样。这个集成成本养活了一整个行业,就是后面要讲的聚合 SDK。

2023 年之后最大的坑:消息分类和限额#

早年厂商通道基本随便推。2023 年起,各家陆续上线消息分类制度,把推送分成两档,待遇天差地别。下面这张表的数据来自个推文档中心对各厂商官方规则的汇总(2025 年仍在更新):

厂商强提醒类(不限量)弱提醒/营销类(受限)关键限制
华为服务与通讯:锁屏+铃声+振动,不限资讯营销:静默,单设备 2 条/日(新闻类 5 条,需新闻许可证)凌晨 0–6 点熄屏 30 分钟后所有消息受管控;需申请”自分类权益”并传 category
荣耀服务与通讯:锁屏+通知栏+铃声振动,不限资讯营销:静默,单设备 2 条/日(新闻 5 条)2023-02-01 起执行;0–6 点管控
小米私信消息:响铃振动,不限量公信消息:静默,总量 = 安装且开通知数 × 2–3 倍,单设备 5–8 条/日2024-11 新规:必须携带新分类的通知类别 ID,“默认通道”(单设备 1 条/日)逐步禁用
OPPO通讯与服务:不限量,强提醒需申请内容与营销:总量 10 万或累计用户 ×2,单设备 2 条/日2024-07 起非 OPPO 商店渠道下载的应用不提供公信消息;OS13+ 只支持新分类
vivo系统消息:总量 = 20 × 通知开启有效用户数(可申请不限量)运营消息:单设备 2 条/日,总量 2–3 × 通知开启有效用户数2025-02 起非 vivo 官方渠道安装的应用默认关闭运营消息;运营消息仅 7:00–23:00 下发
魅族私信消息:不限公通知消息:单设备 3 条/日(新闻 5 条)默认 QPS 1 万设备/10 秒;单设备单业务 ≥4 条会被折叠

几个要点:

  • 定时提醒、IM 消息、待办到期这类对用户有用的提醒,属于服务与通讯 / 私信 / 系统消息这一档:强提醒、基本不限量。营销类掉进另一档:默认静默,不响铃不振动,只在下拉通知栏躺着,单设备每天两三条就到顶。
  • 分类不是推送时随口标的。要在厂商开放平台(或聚合 SDK 控制台)申请分类资质,拿到 category 或通知类别 ID,推送时正确传值。传错了各家都有违规处罚机制,华为、小米、OPPO、vivo 都公布了处罚标准。
  • 时间窗是真实存在的限制:vivo 运营消息只在 7:00–23:00 下发;华为、荣耀凌晨 0 点到 6 点、手机熄屏 30 分钟后所有消息受管控。服务通讯类不受时间窗限制——这是又一条必须把分类做对的理由,不然用户定个早上六点半的闹钟提醒都收不到。
  • OPPO 和 vivo 还卡分发渠道:不是从自家应用商店下载的应用,OPPO 不给营销类消息服务,vivo 默认关闭营销类接收。对个人开发者侧载分发的 App 来说营销通道基本废了,但服务通讯类不受影响。

聚合推送 SDK:中小团队的现实选择#

逐家接太贵,于是有了聚合层:个推、极光 JPush、友盟 U-Push、腾讯移动推送(原信鸽)。

一个 SDK 顶全部。客户端嵌入后,SDK 识别设备品牌,自动完成对应厂商通道的注册;不支持的机型(小众品牌、模拟器、海外机)回落到聚合 SDK 的自建长连接。服务端更简单——只调聚合 SDK 的一个 REST API,按机型路由的活它干了,请求里还能指定”在线走自建通道、离线走厂商通道”之类的策略。

选型时的权衡点:

  • 免费额度:极光、个推都有免费档,个人项目零成本能跑起来。额度口径随时间调整,接之前去官网价格页确认,别信二手文章里的旧数字。
  • 厂商分类还得自己申请:聚合 SDK 帮你省的是集成和路由,各家开放平台的消息分类申请仍然要自己做,控制台里有指引和代申请入口。
  • 合规:国内上架应用市场要求隐私政策里披露集成的第三方 SDK 及其收集的信息;工信部对 App 和 SDK 都有备案要求,主流聚合 SDK 都已完成 SDK 备案,选的时候确认一下就行。

自建长连接:别想了#

调研时顺带确认了一个判断:自己做 TCP/WebSocket 长连接保活,在国产 ROM 上不可靠。

原因很直白。MIUI、EMUI/HarmonyOS、ColorOS、OriginOS 默认激进清后台,灭屏后杀进程、断网络;自启动、锁屏保活这些权限默认关闭,要用户手动进系统设置打开。历史上的保活手段——双进程守护、1 像素 Activity、前台 Service 挂无声通知、账号同步拉活——陆续被各家 ROM 定点封堵,而且这类手段违反应用市场审核规则,用了有下架风险。

微信、QQ 到达率高,是因为 ROM 厂商把它们加进了白名单,系统对它们网开一面。这个待遇普通 App 复制不了。

自建长连接唯一合理的用法,是当”App 活着时的在线通道”——聚合 SDK 内部正是这么用的:App 在前台走自己的连接,App 被杀后走厂商通道。

还有几个影响到达率的细节#

  • 通知权限:Android 13 起 POST_NOTIFICATIONS 是运行时权限,默认拒绝;部分国内 ROM 上,非官方渠道安装的 App 通知开关默认关闭。新用户引导里得有”打开通知”这一步,不然通道全接对了也白搭。
  • 点击跳转:厂商通道的通知由系统展示,点击后跳到哪个页面要在推送载荷里配 Intent 参数。App 被杀时点击通知是冷启动,落页逻辑要自己处理好。
  • 折叠和打扰管控:魅族单设备单业务一天四条以上会被折叠展示,各家都有类似机制。提醒类消息也要注意频率,别把用户推到去系统设置里把整个 App 的通知关掉。

落到 mini-agent 这个项目上#

结合现状——APK 的 FCM 客户端已经写好,服务端的 token 注册和触发投递没做,定时触发目前靠 Telegram 通知兜底——计划是这样:

  1. 服务端把推送做成通道注册表:token 注册时带 platform 字段,国内设备存聚合 SDK 的 token,海外设备存 FCM token,投递时按 platform 路由到对应的 push API。
  2. APK 嵌入一家聚合 SDK(极光或个推,免费档起步),按它的多厂商接入指引加华为、小米、OPPO、vivo 通道。现有 FCM Service 里渲染系统通知的逻辑基本可以平移到聚合 SDK 的回调里,FCM 保留给海外版。
  3. 在各厂商开放平台申请”服务与通讯 / 私信”分类。定时提醒属于这一档,不申请就会掉进每天两条的静默档,推送等于没推。
  4. 短期内 Telegram 兜底策略不变,推送通道做完端到端验证再切。

对任何面向国内用户的个人开发者 App,这个结论应该都适用:别自建长连接,接一家聚合 SDK,把厂商消息分类申请做了,提醒类内容走服务通讯档。

参考资料#

没有 Google 服务怎么推送:国内 Android 推送方案调研
https://sgjki547.top/posts/2026-08-01-国内-android-推送方案调研/
Author
SGJki
Published at
2026-08-01
License
CC BY-NC-SA 4.0