为 FCM 配置网络

本文档概述了 FCM 在您的网络环境中正常运行所需的网络配置。

配置网络以向 FCM 发送消息

在开始之前,您需要确保系统正在与 FCM 服务器通信,以便发送消息和管理订阅。

如需发送 FCM 消息或管理订阅,您的网络需要通过 HTTPS 与以下服务器通信:

  • fcm.googleapis.com(消息发送)
  • accounts.google.com(用于发送消息的身份验证)
  • iid.googleapis.com(主题订阅和设备组管理)

此列表可能会随时间而变化。我们无法为这些端点提供基于 IP 的许可名单。

使用 FCM 为 Android 设备配置网络

本部分详细介绍了如何配置网络以支持 Android 设备的 FCM 流量。

FCM 端口和防火墙

绝大多数网络都不会限制设备连接到互联网上的其余部分。一般来说,我们建议您这样做。不过,有些组织要求将防火墙纳入其边界安全计划。

防火墙选项

选项 我们的服务 专用规则 备注
无(首选 - - -
基于端口的过滤(第二种选择) 限制流向特定端口的流量

要打开的 TCP 端口:

  • 5228
  • 5229
  • 5230
  • 443
这是最简单的规则,可防止依赖于随着时间推移而更可能发生变化的事物。
基于主机名的过滤 使用特殊防火墙配置来允许将某些 TLS SNI 条目列入许可名单,以使其通过防火墙。此功能可与基于端口的过滤功能结合使用。

要打开的主机名:

  • mtalk.google.com
  • mtalk4.google.com
  • mtalk-staging.google.com
  • mtalk-dev.google.com
  • alt1-mtalk.google.com
  • alt2-mtalk.google.com
  • alt3-mtalk.google.com
  • alt4-mtalk.google.com
  • alt5-mtalk.google.com
  • alt6-mtalk.google.com
  • alt7-mtalk.google.com
  • alt8-mtalk.google.com
  • android.apis.google.com
  • device-provisioning.googleapis.com
  • firebaseinstallations.googleapis.com
并非所有防火墙软件都支持此功能,但许多防火墙软件都支持。此列表相当稳定,但如果发生变化,我们不会主动通知您。
基于 IP 的过滤(强烈建议) 使用非常大的静态 IP 地址列表。 goog.json 中列出的所有 IP 地址列入许可名单。此列表会定期更新,因此建议您每月更新规则。防火墙 IP 限制导致的问题往往是间歇性的,并且难以诊断。 我们会非常频繁地更改 IP 地址列表,并且不会发出警告,因此您需要输入此长长的列表并经常更新。

此外,我们发现,用户在防火墙规则中尝试输入 IP 许可名单时,经常出现拼写错误。

我们不建议这样做,因为这些信息总是会过时,并且不会得到维护。

此外,对于某些路由器,此列表的大小可能过于庞大。

网络地址转换或有状态数据包检测防火墙

如果您的网络实施网络地址转换 (NAT) 或有状态数据包检测 (SPI),请为我们通过端口 5228-5230 的连接设置 30 分钟或更长时间的超时。这样,我们就能够提供可靠的连接,同时减少用户移动设备的电池消耗。

FCM 和代理

FCM向设备传送推送消息的协议无法通过网络代理进行代理。因此,您需要确保网络中设备的 FCM 连接可以直接连接到我们的服务器。

VPN 互动和可绕过性

Firebase Cloud Messaging 会采取各种措施来确保从手机到服务器的推送消息连接尽可能可靠且可用。使用 VPN 会使这项工作变得复杂。

VPN 会遮盖 FCM 调整连接所需的底层信息,以最大限度提高可靠性和延长电池续航时间。在某些情况下,VPN 会主动中断长期有效的连接,从而由于错过或延迟消息或是电池消耗较高而导致用户体验不佳。如果 VPN 配置允许,我们会使用加密连接(通过基础网络 Wi-Fi 或 LTE)绕过 VPN,以确保提供可靠且省电的体验。FCM 对可绕过的 VPN 的使用特定于 FCM 推送通知渠道。其他 FCM 流量(例如注册流量)会使用处于活动状态的 VPN。当 FCM 连接绕过 VPN 时,它会失去 VPN 可能提供的其他优势,例如 IP 遮盖。

不同的 VPN 会采用不同的方法来控制是否可以绕过它。如需了解相关说明,请参阅您使用的特定 VPN 的文档。

如果 VPN 未配置为可绕过,Firebase Cloud Messaging 将使用 VPN 网络连接到服务器。这可能会导致消息延迟一段时间,并且可能会导致电池用量增加,因为 Cloud Messaging 会通过 VPN 连接来维持连接。