国内安卓厂商的推送联盟,到底救活了没有

国内安卓厂商的推送联盟,到底救活了没有

国内安卓厂商的推送联盟,到底救活了没有


国内安卓厂商的推送联盟,到底救活了没有


说实话,我上周刚被小米的推送搞崩了一个线上版本,凌晨两点爬起来热修复,现在提到"统一推送联盟"这六个字就想笑。不是那种开心的笑,是那种"我早该知道"的苦笑。


2017年那个联盟成立的时候,我还在用 Nexus 6P 刷机玩,当时看到新闻差点从椅子上摔下来——OPPO、vivo、华为、小米、魅族、一加,这些平时在发布会上互相阴阳怪气的厂商,居然坐下来签了个《统一推送通道声明》?这感觉就像看到美团和饿了么合伙开餐厅,拼多多和淘宝共享用户数据,魔幻程度堪比 2016 年美国大选。


我当时真信了。还特意发了条朋友圈说"安卓生态终于要正常了"。现在那条朋友圈还在,每次翻到都想抽自己。


联盟成立那年的天真与幻觉


2017年10月,工信部牵头,泰尔终端实验室搞了个"统一推送联盟",全称叫"安卓统一推送联盟",英文缩写 UPA。成员单位名单拉出来确实唬人:华为、OPPO、vivo、小米、魅族、一加、努比亚、联想、三星,连 Google 都挂了个观察员的名头。当时的新闻稿怎么写的来着?"解决安卓应用后台常驻、耗电、卡顿问题","共建健康生态"。


我那时候在一家做社交 App 的中厂,推送到达率是我们的核心指标之一。2017年的安卓推送是什么鬼样子,老开发都懂:你要对接小米推送、华为推送、魅族推送、OPPO 推送、vivo 推送,一加那时候还没自己的 SDK,但你要不挂个 FCM 兜底,海外用户就全丢。每个 SDK 的接入文档写得像祖传秘方,初始化时机、证书配置、回调处理全不一样。华为的要搞 agconnect-services.json,小米的要搞 AppID AppKey 双密钥,OPPO 的回调是在自定义 BroadcastReceiver 里处理,vivo 又搞了一套自己的消息分类——运营消息和系统消息,配额还分开算。


最恶心的是,这些厂商的推送服务在自家 ROM 上优先级不一样。你接了小米推送,在小米手机上确实能收到,但在华为手机上?华为系统级推送服务(HMS Push)会优先拦截,你的小米 SDK 通道直接变"其他推送",被电池优化一刀砍死。所以我们那时候的真实做法是:全量接入,优先级动态调整,根据 Build.MANUFACTURER 判断当前机型,优先走对应厂商的通道。代码里一堆 if-else,跟打地鼠一样。


统一推送联盟说要搞个标准接口,一套 SDK 对接所有厂商。我 2018 年初就跑去联盟官网看文档,那时候连正式的 SDK 都没放出来,只有一个概念白皮书,PDF 里画了一堆架构图,底层基于 Android 的 JobScheduler 和 AlarmManager 做保活,上层抽象统一接口。我看了三遍,没看懂这玩意跟 FCM 有什么区别,除了多了个"中国特供"的标签。


那个从来没正式发布的"标准"


联盟真正有点动静是 2019 年。3 月份发了个《统一推送技术要求和测试方法》,号称要搞"推必达"服务,基于手机号和运营商网络,就算 App 被杀了、手机断网都能收到。这听起来很美好对吧?我特意去研究了下技术细节,结果发现这玩意依赖的是运营商的短信网关或者信令通道,本质上不是互联网推送,是电信级消息下发。


问题就来了:这玩意怎么收费?按条算还是包月?联盟从来没说清楚。我打电话去泰尔实验室咨询,对方让我"等正式商用通知"。这一等就是五年,到现在没等到。


2019 年 12 月,联盟又搞了个大新闻,说"统一推送服务(UPS)"正式开通,首批接入的有华为、OPPO、vivo、小米。我当时激动得差点把咖啡洒键盘上,赶紧去找接入文档。文档确实有,但点进去一看,傻眼了——它不是一个统一的 SDK,而是一个"标准规范",各厂商自己实现。华为说"我符合 UPS 标准",但你要用还是接 HMS Push;小米说"我也符合",但你的代码里还是得写 MiPushClient。所谓的统一,只是消息体格式统一了,JSON 字段名一样,但接入方式、鉴权机制、回调逻辑全没改。


这他妈不叫统一,这叫各唱各的调但都用五线谱记谱。对开发者来说,工作量一点没少,还多了一层"标准合规"的牌坊。


我那时候跟小米的推送团队的人吃过一次饭,酒过三巡对方说实话了:联盟是工信部压下来的任务,各家表面上配合,但谁愿意把自己用户的触达能力开放给别人?推送是手机厂商最核心的用户运营抓手,你每天收到的那些"您有一条未读消息""限时优惠即将结束",背后是巨大的 DAU 和留存数据。小米靠推送唤醒了多少沉默用户,华为靠 HMS Push 绑定了多少开发者生态,这能拱手让人?


那顿饭吃完我就明白了,联盟从根上就是个政治产物,不是技术产物。


各家的"统一"姿势有多离谱


说到具体厂商的执行,那真是八仙过海各显神通,统一推送联盟的标准在他们手里被玩出了花。


华为是最鸡贼的。2019 年 HMS Core 4.0 发布,Push Kit 直接对标 FCM,但只在自己的生态里转。华为的策略很明确:用 HMS Push 绑定开发者,逼你接 HMS Core 全家桶。你接了推送,顺便把分析服务、崩溃服务、广告服务也接了吧,一套账号体系打通。2021 年 HarmonyOS 2.0 发布,推送服务升级成"HarmonyOS 推送",跟安卓版的 HMS Push 又不一样,虽然底层协议兼容,但文档里多了无数"鸿蒙特有"的限制。比如鸿蒙的推送分类,"服务与通讯类"和"资讯营销类"的配额是分开计算的,而且鸿蒙系统会优先保证前者,后者在设备电量低时直接丢弃。


我 2022 年做的一个项目,华为渠道推送到达率只有 62%,查了半天发现是消息分类填错了,被系统判定为"营销消息",在用户未主动打开 App 的情况下,一天最多只能推 2 条,超出直接静默失败。但 HMS 的 SDK 不会告诉你这个失败原因,错误码是通用的 -1,"未知错误"。我翻遍了日志,最后是在一个华为开发者论坛的帖子里看到有人吐槽,才试出来的。这他妈叫生态?这叫猜谜。


小米的策略是"开放但控制"。MiPush 的接入文档算是各家里面写得最清楚的,SDK 稳定性也最好,但小米有个独门绝技:消息过滤。你的推送内容要经过小米的内容审核,涉及"诱导点击""虚假宣传"的直接拒发。2021 年小米 MIUI 12.5 加了"照明弹"功能,推送来源透明化,用户能看到这条推送是哪个 App 发的、走了哪个通道。这本来是好事,但小米同时把自家 App 的推送标记成"系统消息",不占用应用配额,第三方 App 照样受限。


最骚的是 2023 年小米 14 发布,HyperOS 把推送服务升级,搞了个"智能推送"策略,系统会根据用户的使用习惯预测你"可能想看什么",然后动态调整到达时机。翻译成人话:你的推送发出去,系统不一定立刻送,可能等用户"刚好有空"再送。这对即时通讯类 App 是毁灭性的,我认识的某个做陌生人社交的朋友,消息延迟从秒级变成分钟级,用户投诉炸了,最后被迫在应用内自建长连接兜底。


OPPO 和 vivo 是难兄难弟,两家的推送服务 ColorOS Push 和 FuntouchOS Push(后来改成 OriginOS Push)技术底子差不多,都是基于腾讯的 TPNS 改的。但 OPPO 有个变态的"通知栏折叠"策略,2022 年 ColorOS 12 之后,同一 App 的多条通知会自动折叠成一条,用户不展开看不到内容。我们做内容社区的,一天可能发 3-5 条推送给用户,全被折叠成"XX应用:您有 5 条新消息",点击率直接腰斩。


vivo 更离谱,2021 年 FuntouchOS 10 之后搞了个"通知降噪",晚上 11 点到早上 7 点,所有非白名单应用的推送不进通知栏,直接进"通知历史"。问题是这个白名单是 vivo 自己控制的,你申请加入要填表、发邮件、等审批,周期两周起步。我 2022 年申请过一个 App,被拒了三次,理由分别是"不属于即时通讯类""不属于金融交易类""不属于政务民生类"。我艹,我们就是个电商 App,用户下单了要通知他发货啊,这不算"交易"算什么?


魅族在联盟成立那年还挺积极,Flyme 推送接得早,但 2020 年之后魅族市场份额崩了,推送服务维护跟不上了。我 2021 年接 Flyme Push,SDK 最后一个版本停留在 2019 年,文档里的示例代码编译不过,去 GitHub 提 issue 没人理。最后发现魅族的推送服务在 Flyme 9 之后已经实质弃用,底层转成了华为 HMS 的代理,魅族手机走 HMS 通道。这算统一吗?算,以一种荒诞的方式。


一加更搞笑,早年没自己的推送,用 FCM,后来 OPPO 收了之后用 ColorOS Push,但海外版继续用 FCM。所以你做全球化应用,一加手机要判断是国行还是海外版,再决定走哪个通道。这个判断逻辑我写了三版才稳定,因为一加的系统属性字段在不同批次手机上返回值不一样,有的叫"OnePlus",有的叫"oneplus",有的叫"OP"。


那个死掉的"推必达"和活着的运营商


回到联盟吹过的最响的牛——"推必达"。这玩意基于运营商网络,号称"不依赖数据网络、不依赖 App 存活状态"。技术原理我理解了下,大概是走 SMS 或者 USSD 的变种,或者更可能是利用运营商的信令通道做下行通知,类似早年 WAP Push 的升级版。


2019 年说"即将商用",2020 年说"试点中",2021 年联盟官网发了个新闻稿说"推必达已覆盖 4 亿终端"。我当时的反应是:覆盖了个寂寞?我在市场上从来没见过哪个 App 接入过这玩意,SDK 没有,文档没有,计费方式没有。后来打听才知道,"覆盖 4 亿终端"指的是这些手机所在的运营商网络支持该技术,不是真的能用。而且实际商用需要 App 向运营商申请,按条付费,价格跟短信差不多,一条几分钱。


几分钱听起来不贵?你算算,一个日活百万的 App,每天发一条推送,一个月就是 300 万条,费用十几万。而走互联网推送,成本几乎为零。哪个产品经理会批这个预算?所以推必达从诞生那天起就是死的,只是尸体被联盟拖着到处展览,证明"我们还是有成果的"。


2022 年之后,联盟官网的新闻更新越来越少,2023 年直接停摆。我去年想去找个联系人问点事,发现官网挂了,域名解析到的是一个空白页面。去工信部网站查,说联盟"已完成使命,相关职能由其他机构承接"。什么机构?没说。我的理解是:散伙了,各回各家。


但有意思的是,运营商自己的推送服务反而活下来了。中国移动有个"和推送",中国电信有个"天翼推送",都是基于短信网关或者 5G 消息(RCS)做的,面向政企客户,不跟互联网 App 玩。我 2023 年接触过一个银行客户,他们用的就是移动的和推送做交易通知,理由是"必须保证到达,不计成本"。这其实是推必达的真实应用场景:金融、政务、应急,这些不差钱、要合规的领域。普通互联网 App?不配。


2024 年的真实现状:比 2017 年更碎


现在做安卓推送,情况比联盟成立前更复杂。2017 年你只需要接 4-5 家,现在呢?华为 HMS、小米 MiPush、OPPO Push、vivo Push、魅族(已死,转 HMS)、一加(ColorOS)、realme(ColorOS)、iQOO(vivo)、荣耀(从华为分家后搞了自己的 Push,但早期版本还是 HMS)、三星(国行用 FCM,但国内 FCM 不稳定,很多开发者额外接个友盟或个推兜底)。


荣耀这个 case 特别值得一说。2020 年华为卖掉荣耀,荣耀手机从 HMS 体系剥离。2021 年荣耀 MagicUI 推出自己的推送服务,但 SDK 成熟度一塌糊涂。我 2022 年接的时候,文档里还有 HMS 的痕迹,复制粘贴没删干净,"请参考 HMS Core 开发指南"这种话直接出现在荣耀推送的文档里。更恶心的是,荣耀早期机型的系统底层还是 HMS,但新机型是 MagicUI Push,同一品牌要分版本处理。我写了个正则匹配 Build.MODEL,结果荣耀 50 和荣耀 50 Pro 返回值格式不一样,一个带空格一个不带,正则漏了,导致荣耀 50 Pro 的用户全走了 FCM 兜底,到达率 30% 出头。


所以现在的标准做法是:不直接接厂商 SDK,接第三方聚合服务。个推、友盟、极光、MobTech,这些中间商帮你封装了各家厂商的 SDK,你接一家,他们后台帮你分发。听起来很美好?代价是延迟增加一层,数据被中间商扒一层,而且出问题的时候定位更困难。


我 2023 年用某个聚合服务,华为渠道到达率突然从 85% 跌到 40%,查了一周,中间商的技术支持说是"华为侧策略调整",让我去问华为。华为的工单系统回复说"未收到该 App 的异常反馈,请检查接入方式"。两边踢皮球,最后我自己抓包分析,发现是聚合服务在华为通道的消息体里加了一个自定义字段,华为 HMS 5.0 之后这个字段触发了一个未文档化的校验逻辑,直接丢弃消息。聚合服务不知道,华为不说,只有我受伤的世界达成了。


更深层的问题是,这些聚合服务自己也在萎缩。个推 2023 年被监管约谈,数据合规问题;极光连年亏损,股价跌成渣;友盟被阿里收编后,推送业务边缘化。2024 年的趋势是,大厂开始自建推送中台,中小厂要么忍受聚合服务的质量,要么硬着头皮去跟各厂商撕逼。


为什么 Google 的 FCM 在中国就是不行


每次聊到这个话题,都有人问:为什么不能直接用 FCM?Google 的 Firebase Cloud Messaging,全球统一,一套 SDK 搞定,延迟低、到达率高、还免费。


答案分三层。


第一层是网络层。FCM 需要设备到 Google 服务器的持久连接,这个连接在国内大概率被干扰或者重置。不是完全不通,是不稳定,时通时不通,延迟抖动极大。我 2019 年做过测试,同一台手机挂 VPN 和不挂 VPN,FCM 到达时间差 10 倍以上。不挂 VPN 的情况下,FCM 连接经常断,系统后台自动重连,但重连间隔是指数退避的,最长能到几小时。这意味着你的即时消息可能几小时后才收到,跟没有一样。


第二层是厂商层。国产 ROM 对 FCM 的打压是系统性的。华为 EMUI 9 之后,FCM 默认被电池优化杀掉,除非你手动把 App 加入"电池优化白名单",但普通用户不会操作。小米 MIUI 12 之后,FCM 被归类为"三方推送",优先级低于 MiPush,系统资源紧张时优先保自家。OPPO 和 vivo 更直接,FCM 服务在部分机型上被阉割,系统镜像里根本没有 com.google.android.gms 相关组件,你装都装不上。


第三层是商业层。FCM 是 Google 的服务,数据最终流向 Google 的服务器。国内厂商怎么可能把自己的用户行为数据、推送内容、到达统计,拱手送给 Google?这是政治问题,不是技术问题。就算网络通了、系统不杀,华为小米也不会默认让 FCM 做主通道,这是底线。


所以 FCM 在国内的真实定位是"海外专用"加"极端兜底"。你的 App 有海外用户,必须接 FCM;国内用户,FCM 只能覆盖那些用 Pixel、刷原生系统、或者懂行会科学上网的极小众群体。我现在的项目,国内 DAU 几百万,FCM 通道的到达量占比不到 3%,基本可以忽略。


工信部的新动作:统一推送 2.0?


2023 年下半年开始,有个新词在圈子里传:"推送消息备案"。不是统一推送联盟复活,是工信部换了个打法——不搞技术标准了,搞内容监管。


具体做法是,App 的推送服务要向工信部备案,推送内容要审核,涉及新闻、社交、电商的,还要额外分类管理。2024 年初,几家大厂被约谈,要求"规范推送行为",核心就两条:减少骚扰,保障用户知情权。


这个方向我其实部分认同。推送滥用确实恶心,那些"您有一条未读消息"的点骗点击,那些伪造系统通知的诱导下载,那些凌晨弹的借贷广告,早该管管。但问题是,监管的执行又落在了厂商手里。小米的"通知过滤"、华为的"消息分类"、OPPO 的"折叠策略",这些原本是为了自家利益搞的控制手段,现在披上了"合规"的外衣,变得更加理直气壮。


2024 年 3 月,我参加了一个内部会议,某厂商的推送产品经理直言:"以后推送能力会越来越像一种资源,需要申请、配额、审核,不是开发者想发就能发。"翻译一下:推送正在从"技术基础设施"变成"平台特权",大厂有资源去申请、去博弈,中小开发者只能接受越来越窄的触达能力。


这跟统一推送联盟最初的愿景——"降低开发者接入成本、提升用户体验"——已经完全背道而驰了。联盟死了,但它的尸体上长出了更复杂的生态。


我现在的做法:放弃幻想,准备斗争


干了这么多年,我对国内安卓推送的态度已经彻底务实,甚至有点犬儒。


第一,不再相信任何"统一"承诺。不管是联盟、标准、还是聚合服务,都是中间层,都会增加故障点。核心通道必须自己直接接厂商 SDK,虽然代码恶心,但至少出问题能直接定位。


第二,必须做多通道冗余。同一台手机上,至少挂两个推送通道,厂商通道 + 自建长连接。长连接耗电、维护成本高,但在推送通道失效时是最后的生命线。我们现在的策略是:厂商通道优先,5 秒内未确认到达,切长连接补发。这个逻辑写起来很烦,但救了无数次急。


第三,把推送当成"尽力而为"的服务,不是"保证送达"。产品设计上不能假设用户一定能收到推送,关键信息要在应用内二次确认,或者通过短信兜底。成本确实高,但这是国内安卓的现实。


第四,关注各厂商的文档更新和版本变动,比关注 Android 大版本还紧。华为 HMS 6.0、小米 HyperOS、OPPO ColorOS 14、vivo OriginOS 4,每次大版本发布,推送策略几乎必变。我现在的习惯是,新系统发布第一周,就去开发者论坛潜水,看有没有人踩坑,比官方文档靠谱。


第五,也是最重要的一点:对任何"生态共建""开放合作"的官方说辞保持警惕。国内安卓厂商的竞争格局决定了,推送这种核心能力不可能真正开放。联盟成立是政治压力,联盟死亡是商业规律。下次再看到类似的新闻,我不会发朋友圈了,我会等三年,看结果。


最后说两句


上周那个凌晨两点的事故,根源是小米 HyperOS 的一个灰度更新,改了推送服务的后台保活策略,我们的长连接在特定机型上被系统判定为"异常唤醒",直接冻结。小米的文档没提,变更日志没写,我们是第一批踩坑的。


热修复发完之后,我在群里跟同事吐槽:统一推送联盟要是真成了,这种事是不是就不会发生?同事回了我一句:联盟真成了,你就得求着联盟给你开白名单,跟现在求小米有什么区别?


我想了想,确实没区别。甚至可能更糟——现在至少还能直接找小米的人,联盟要是垄断了,你连找谁都不知道。


所以回到标题的问题:国内安卓厂商的推送联盟,到底救活了没有?


死了,而且死得挺透的。但更准确的说法是,它从来就没活过。那个 2017 年的成立仪式,更像是一场各怀鬼胎的集体表演,演给工信部看,演给开发者看,演给那些还相信"国内安卓生态能变好"的人看。


我当年就是信了的人之一。现在不信了,但活还得干,坑还得踩,凌晨两点的热修复还得发。


只是下次再看到什么"统一""联盟""共建"的新闻,我会先去看看是谁牵头的,各方出资比例多少,有没有独立的 SDK 可以下载,有没有真实的计费方式。如果这些都没有,那就是又一场表演。


你问我现在最理想的推送方案是什么?说实话,我有时候真羡慕 iOS。APNs 也不是没毛病,延迟抖动、证书过期、沙盒生产环境切错,这些坑我也踩过。但至少,它是一套啊。一套接口,一套证书,一套逻辑,全球通用。


国内安卓?七套起步,上不封顶,而且每年还在变。这就是我们的生态,这就是我们选的路。


联盟救没救活推送我不知道,但它确实救活了我的低血压——每次想起来,血压蹭蹭往上涨。

Compose Multiplatform 真的能用吗?踩坑记录 2026-05-20

评论区