FCM 前身是 GCM ---- Google Cloud Messaging,Google 在推出 Firebase 云服务之后,更名为了 FCM。 Firebase 是一个集实时网络数据库,消息推送,异常报告,文件存储,用户统计,广告分发,云端测试等为一体的综合后端云服务。相比其他云服务最大的优势就因为他是 Google 的亲儿子。最大的劣势就是在中国大陆被墙。这次测试主要针对消息推送部分,通过三款不同机型的测试机器,分析目前 FCM 在国外的使用情况(国内乙烷),本次测试主要是针对不同机型的推送可达性测试,对于如何使用请看 Firebase 官方文档。
测试网络:阿里云香港B区节点代理
测试机器:
Nexus 5x (Android 7.1.1):亲儿子,预装全套 Google 服务(包含 Store),已登陆 Google 账号。
Samsung S7 (Android 7.0.1) :国行版,只预装 Google play service(不包含 Store),未登陆 Google 账号。
Meizu Pro6 Plus (Android 6.0.1) :未预装 Google 服务,通过第三方工具安装全套服务(包含 Store),未登陆 Google 账号。
测试结果:
ps:以下的手动杀掉任务均为呼出多任务界面并滑动卡片的形式杀掉
ps2:本次测试的推送均为 Data 类型并且都是 High 优先级,详情可见 高级消息类型
ps3:FCM Data 类型推送原理大致为机器中的 Google Play Service 收到通知后,转发给对应 App 处理。如果此时 App 不存活,则 Google Play Service 负责将 App 唤醒后交由 App 处理。
Meizu Pro6 Plus | 默认 | 手机管家自启动白名单 |
---|---|---|
前台 | 可达 | 可达 |
后台 | 可达 | 可达 |
后台一段时间后 | 不可达 | 可达 |
手动杀掉任务 | 不可达 | 可达 |
结果分析:此机型带有魅族的 OneMind 技术,可对用户使用习惯进行机器学习,调整后台应用权限,因为时间关系,无法通过经常使用的方式促使 OneMind 学习并更新策略,此项暂不考虑。在默认情况下,进入后台一段时间后会被 OneMind 杀死,之后便无法收取通知。手动杀死任务同样也无法收取通知。但是如果手机管家中加入 自启动 白名单,那么不管是被 OneMind 杀死还是手动杀死,收到推送后,都会被重新启动并处理推送。
Samsung S7 | 默认 | 手机管家自启动白名单 |
---|---|---|
前台 | 可达 | 可达 |
后台 | 可达 | 可达 |
后台一段时间后 | 不可达 | 可达 |
手动杀掉任务 | 不可达 | 可达 |
结果分析:此机型预装三星的 “智能管理器” 软件,基本表现和上一款机器相同,在加入自启动 白名单后,那么不管是被 “智能管理器” 杀死还是手动杀死,收到推送后,都会被重新启动并处理推送。
Nexus 5x | 默认 | \ |
---|---|---|
前台 | 可达 | \ |
后台 | 可达 | \ |
后台一段时间后 | 可达 | \ |
手动杀掉任务 | 可达 | \ |
结果分析:此机型没有任何第三方管理工具,为 Android 原生后台管理机制。经过测试,发现在任何情况下,即使 App 进程完全不存活,也可以在收到通知的时候重新启动并处理通知。
测试结果总结:
- 使用推送无需安装 Google Store
- 使用推送无需登陆 Google 账号
- 使用推送必须安装 Google Play Service
- 非原生 Android 主要是对应用的自启动权限进行控制,在无论使用何种方式将 App 杀死后,即使 FCM 收到了推送,可是却无法通过 Google Play Service 唤醒 App
- 在相应的第三方管理软件中加入自启动白名单可解决此问题
通过后续观察发现,预装 Google 套件的机器会由于 App 没有自启动权限而导致无法收到推送,而没有预装 Google 套件的机器,可能会由于 Google Play 被杀 以及 App 没有自启动权限两个原因导致无法收到推送。
分析原因如下:
- 预装 Google 的机器是作为系统服务存在,开机自启动,并且本身就处于白名单范围,不会被杀。
- 未预装 Google 的机器是通过第三方工具安装到机器上,是作为一个系统服务以外的第三方程序,所以是可能被手机管家杀死的。此时需要将 Google Play Service 服务和 App 加入白名单才能解决。