内容提要
作者将微信转为国际版,通过代理屏蔽其推送域名,迫使微信注册 FCM 推送,并配合 fcmfix 模块实现无后台推送;再用 Thanox Pro 应对 FCM 断连并记录通知。作者感叹安卓推送生态割裂,微信不接入国内 OEM 推送,仅 Play 版支持 FCM。
延伸解读
实现无后台推送的关键条件
文章指出,要让微信使用 FCM 推送,必须同时满足两个条件:FCM 和微信都走代理,并且微信自身的推送域名不可达。作者通过代理规则屏蔽 long.wechat、short.wechat 等域名,并让 google 相关域名走代理,从而迫使微信注册 FCM。此外,要实现无后台推送,还需借助 fcmfix 模块,在微信后台被杀死后,由 FCM 消息拉起微信处理推送。
网络不稳定下的推送稳定性方案
即使配置了微信、FCM 和 fcmfix,移动网络不稳定仍会导致 FCM 多次中断重连。由于微信未启动,不会重新注册 FCM,推送可能丢失。作者使用 Thanox Pro 来解决:当 FCM 中断后,Thanox Pro 可以自行接收 FCM 推送消息并直接推送,无需用户频繁打开微信。此外,Thanox Pro 还能记录通知栏信息,方便回溯已点击但未正确跳转的消息内容。
安卓推送生态的割裂与微信的选择
文章感叹安卓推送生态割裂:本有统一的 FCM,但各 OEM 自建推送渠道。QQ 尝试接入了 OPPO Push 等国内渠道,而微信拒绝接入任何国内 OEM Push,仅 Play 商店版本支持 FCM。作者认为微信臃肿且试图绕过 Android System API,导致在安卓设备上打开小程序时常有卡顿,即使在其他品牌手机上也表现不流畅。
国内版微信开放 FCM 后的新问题
文章更新提到,国内版微信(Weixin)也开放了 FCM,但国内 OEM 对 GMS 的保活存在优先级问题。例如小米手机锁屏后会冻结 GMS,影响 FCM 推送;而 OnePlus 实测没有此问题。这说明即使微信支持 FCM,不同厂商的系统策略仍会导致推送体验差异,用户需注意自己设备的后台管理机制。
Q&A
如何让微信使用FCM推送而不是自己的推送通道?
需要让微信无法使用自身推送通道,并确保FCM和微信都走代理。具体方法:将微信转为国际版,通过代理屏蔽微信推送域名(如long.wechat、short.wechat等),迫使微信注册FCM推送。同时,FCM和微信都需要走代理,且使用国外DNS。
fcmfix模块在微信推送中起什么作用?
fcmfix模块可以实现退出后台后,接收到来自FCM的推送消息时拉起微信去处理推送消息,从而达到无后台推送的效果。
Thanox Pro如何帮助解决FCM断连问题?
Thanox Pro可以在FCM中断后,自己接收FCM推送消息并直接推送,这样就不需要时刻打开微信去注册FCM。此外,它还能记录通知栏信息,方便查看已移除的通知内容。
为什么微信在安卓上推送这么困难?
微信拒绝接入国内任何OEM推送,仅Play版支持FCM。它试图绕过Android System API直接获取资源,导致应用臃肿。安卓推送生态割裂,各OEM自建推送渠道,而微信开摆,不接入统一推送。
WeChat国际版和国内版在推送方面有什么区别?
WeChat国际版(Play版)支持FCM推送,而国内版Weixin默认使用自身推送通道,不主动使用FCM。不过后来国内版也开放了FCM,但国内OEM对GMS保活有优先级问题,如小米锁屏后会冻结GMS,影响FCM推送。
如何配置代理规则来迫使微信使用FCM推送?
代理规则需要将微信相关域名(long.wechat、short.wechat、long.weixin、short.weixin)和google域名走代理,同时将dns.weixin域名REJECT。这样微信推送不可达,会主动注册FCM并使用FCM推送。