解决 fcm 连接和注册 fcm 令牌等问题
我的网络提供商不支持 TCP 长连接,所以我选择直连 fcm 服务器。
最好配置中添加个 FCM 策略组并在配置中添加 fcm 规则,比如像我这样:
#谷歌 fcm
- DOMAIN,mtalk.google.com,FCM 推送
- DOMAIN,mtalk4.google.com,FCM 推送
- DOMAIN,mtalk-staging.google.com,FCM 推送
- DOMAIN,mtalk-dev.google.com,FCM 推送
- DOMAIN,alt1-mtalk.google.com,FCM 推送
- DOMAIN,alt2-mtalk.google.com,FCM 推送
- DOMAIN,alt3-mtalk.google.com,FCM 推送
- DOMAIN,alt4-mtalk.google.com,FCM 推送
- DOMAIN,alt5-mtalk.google.com,FCM 推送
- DOMAIN,alt6-mtalk.google.com,FCM 推送
- DOMAIN,alt7-mtalk.google.com,FCM 推送
- DOMAIN,alt8-mtalk.google.com,FCM 推送
#(消息发送) - DOMAIN,fcm.googleapis.com, 代理
#(用于消息发送的身份验证) - DOMAIN,accounts.google.com, 代理
#(主题订阅和设备组管理) - DOMAIN,iid.googleapis.com, 代理
- DOMAIN,android.apis.google.com, 代理
- DOMAIN,device-provisioning.googleapis.com, 代理
#貌似用于 FCM token 注册 - DOMAIN,firebaseinstallations.googleapis.com, 代理
如果你的节点不支持 TCP 长连接的话,请在客户端中设置中打开允许应用绕过选项,否则连接 fcm 服务器超时很久才连上以及连不上。
若支持 TCP 长连接,请关闭允许绕过选项,FCM 服务器走节点可能会产生的功耗和和延迟。
若连不上 fcm 服务器请检查 OEM 设备制造商的联网管理是否允许 Google play 服务相关应用的联网及后台联网,如果不是网络问题与息屏而被厂商掐断禁止联网以及连不上的,请尝试安装对应厂商的国际版的 “手机管家”、安全中心、流量管理、电池等 app 是否缓解问题,如不能解决但不建议停用和卸载它们请谨慎操作,风险自行承担。
不建议在系统 /system/etc/hosts 文件添加 fcm 域名,hosts 导致 fcm 有一些小问题反正我不加也不折腾,因为域名指定绑定某个的 IP,域名的 IP 会随时变动和过期或被黑洞,你 hosts 指定的旧 IP 未及时手动更新可用的 IP,不然旧 IP 被黑洞过期迁移导致连不上,执意添加的话可以在客户端的 hosts 添加 fcm 域名,但不推荐。
fcm 的连接时间没必要追求更高时长,能连接 1 个小时内左右说明系统和息屏没被掐断是稳定的,息屏不断开表示没问题的,偶尔断开超时几分钟是小概率网络环境等问题,又不是连接不上。
连接等疑问参阅官方文档:为 FCM 配置网络 | Firebase Cloud Messaging
FCM 注册令牌:FCM 注册令牌管理的最佳做法 | Firebase Cloud Messaging
如果 FCM Diagnostics 出现无微信等应用的推送日志,请尝试(通常无需开科技)打开微信 > 我 > 设置 > 顶部退出登录接着在微信 > 应用信息 > 强行停止下,再打开微信重新登录以便能注册 FCM token,再测试消息是否有日志即可。
不建议在应用分流绕过设置(com.android.settings)、Android 系统(android)等应用。
遇到不注册 fcm 令牌的应用请尝试把它全局并退出登录 强行停止 重新登录。
微信似乎每个月 FCM token 失效过期需要重新注册,不确定是哪方的问题,我在排查中。
fcm 有自动绕过代理的机制,利用允许应用绕过这个开启特性自动绕过代理,我现在 Firebase 官网提供的主机名,之前没加的域名给加上去,fcm.googleapis.com
accounts.google.com
iid.googleapis.com
android.apis.google.com
device-provisioning .googleapis.com
firebaseinstallations.googleapis.com
以便更新 FCM token,看后续微信还会不会 FCM token 过期失效,如果不能解决的话,估计是微信服务器抽风的问题。

