关于谷歌FCM推送服务的问题分析
前言
在我玩世界计划多彩舞台的时候,我发现我似乎收不到游戏的通知,不像神奇的iOS系统:
哇,这感觉很高级,但是我怎么就没有收到??回想起@亮剑的iPad,于是我开始潜心研究这个关于通知推送的问题:
技术支持
很多系统都有统一的集成推送通知服务,应用程序只需调用对应的SDK就可以完成一次通知推送,例如Windows右侧的通知栏就是一个很好的案例(不过几乎没有人用),所以我们先来探究一下谷歌在安卓上采用了怎样的推送方案。
下面是必应AI的回答:
Firebase Cloud Messaging (FCM) 是谷歌提供的一种消息推送服务,广泛应用于移动应用的通知和数据消息推送。FCM的主要优势在于其免费、稳定且易于集成。
FCM的工作流程
FCM的工作流程可以分为四个部分:
- 消息的构建:可以通过Firebase控制台或FCM Admin SDK构建消息。
- FCM后端:由谷歌负责消息的分流处理。
- 平台层:Android设备上的Google服务接收消息。
- FCM SDK:进一步处理消息并分发给目标应用。
看到这里想必大家也明白了,FCM就是谷歌负责对安卓设备的一个推送服务,看来问题就出在这里。
开发
要想找出问题所在,必须得打开开发人员工具。在谷歌开发文档里面可以找到
*#*#426#*#*


首先我就在猾伪手机上进行了尝试,结果不出所料,FCM服务整体都被阉割完了,根本打不开。
我又在我的平板上进行了同样的操作,这回效果好的多,成功进入了控制台。
显然这里报了许多错误,意味着我根本没有连接上谷歌的推送服务器,即使世界计划有了更新通知或者活动通知,也不会推送到我的设备上。
那么开启代理能解决这个问题吗?
显然当我们把代理打开以后,就可以连接到谷歌的推送服务器接收消息了。
拓展延伸
解决了这一个问题以后,我突然又想到每次我重启开机的时候,也能搜到一些外国通讯软件的消息,如果是这样子的话,那么谷歌的子域名应该没有被屏蔽,否则根本不可能接收得到消息,于是我产生了一个大胆的猜想。
谷歌推送的服务并不是受防火长城GFW控制,而是由手机厂商的系统进行了封锁。
但是这么一想又不太对劲,如果进行的是系统层面的封锁的话,那么开代理也是无法绕过的。
不过当务之急是确认到底是不是由于防火长城的拦截导致无法连接到谷歌推送服务器。
由于设备贫乏,我征集了几台设备,由@春雨木木,@飞仙和@boredliam提供。



果然所有vivo旗下的设备都可以直接连上FCM推送服务,并且没有打开代理。
这显然印证了我的推测,阻断推送服务的并不是防火长城,而是手机厂商的系统作怪。
那么为什么代理的权限能够高过系统呢?我猜想应该是系统对FCM服务进行了一个劫持,类似于修改host文件,但是代理的可信度比host文件的要高。于是开上代理以后就可以连上FCM了。
不过,小米的技术还是更狠一些,小米直接将所有FCM的模块更改为miCM(好像是这样的,我不太记得名字了),这样即使是开着代理也很难连接到谷歌推送服务器(更准确的说应该是连接到小米推送服务器)
奇怪的现象
@春雨木木提供了反馈,他表示他的HUAWEI Nova4需要给予足够的权限才能保才能保证统一推送服务不中断,由于这部手机采用了还是EMUI系统,并不是所谓的哄蒙系统,以猾伪公司的性格,对《异类》进行一大堆限制措施,似乎一点也不过分。
此外,他的vivo x60有时候挂着代理反而难以访问连接上推送服务器,这可能是谷歌针对一些情节恶劣的节点采取的规则限制(WAF娘出手了),再加上开着代理的节点层层转移,延迟相对于来说直连还是较高的。嗯
小结
各大平台都有针对如何连接上Google同一推送服务器FCM有很多详细的解析,包括允许应用自启动,手动管理应用耗电,给予通知权限,甚至说要给谷歌play商店也有足够的权限,不过这些操作可能更多的针对是类似于EMUI系统这类有着严格电池管理策略的系统,对于像荣耀Magic OS9这一类直接封锁推送服务的系统似乎没有什么用处,因此最保险的方法应该是挂着代理。