我们的目标是始终传递使用 FCM 发送的每条消息。但是,传递每条消息有时会导致整体用户体验不佳。在其他情况下,我们需要设定限制,以确保 FCM 为所有发送者提供可扩缩的服务。本部分所述的限制和配额类型有助于我们平衡这些重要因素。
下行消息节流
HTTP v1 API 为下行消息传递引入了每项目每分钟配额。默认配额为每分钟 60 万条消息,可覆盖超过 99% 的 FCM 开发者,同时保护系统稳定性并最大限度地减少项目激增的影响。
流量激增模式可能会导致超出配额的错误。在超出配额的情况下,系统会响应 HTTP 状态代码 429 (QUOTA_EXCEEDED),直到配额在下一分钟内得到重新补充。在过载情况下,系统也可能会返回 429 响应,因此强烈建议您根据发布的建议处理 429 响应。
请注意:
- 下行配额用于衡量消息数,而非请求数。
- 系统会统计客户端错误(HTTP 状态代码 400-499,429 除外)。
- 配额按分钟计算,但这些分钟数并非与时钟一致。
监控配额
您可以在 Google Cloud 控制台中查看配额、用量和错误:
- 前往 Google Cloud 控制台
- 选择 API 和服务
- 从表格列表中选择 Firebase Cloud Messaging API
- 选择配额和系统限制。
注意:这些图表的时间与配额分钟数并不完全一致,这意味着,即使流量似乎低于配额,也可能会返回 429 响应。
申请增加配额
在申请增加配额之前,请确保:
- 您的用量通常每天至少连续 5 分钟 ≥ 配额的 80%。
- 客户端错误率低于 5%,尤其是在峰值流量期间。
- 您遵循大规模发送消息的最佳实践。
如果您符合这些条件,可以提交配额增加申请(最多可增加 25%),FCM 会尽量满足您的申请(但无法保证一定会增加配额)。
如果您因即将到来的发布或临时活动而需要更多下行消息传递配额,请至少提前 15 天申请配额,以便我们有足够的时间处理您的申请。对于较大的申请(每分钟超过 1800 万条消息),您需要至少提前 30 天通知我们。发布和特殊活动申请仍需遵守客户端错误率和最佳实践要求。
另请参阅有关FCM 配额的常见问题解答。
主题消息限额
主题订阅添加或移除率限制为每个项目 3,000 QPS。
有关消息发送速率的信息,请参阅扇出限制。
扇出限制
消息扇出是指向多台设备发送消息的过程,例如当您定位主题和群组,或使用 Notifications Composer 定位目标设备或细分用户群时。
消息扇出不是瞬时间完成的,因此有时候您会同时运行多个扇出。我们将每个项目中并发进行的消息扇出数量限制为 1000。超出此值之后,我们可能会拒绝其他扇出请求,或者推迟请求中的扇出,直到某些正在进行的扇出完成为止。
实际可实现的扇出率受同时请求扇出的项目数量的影响。单个项目的扇出率为 10,000 QPS 并不罕见,但该数字与系统的总负载密切相关,并无保证。值得注意的是,可用的扇出容量在项目之间而不是在扇出请求之间分配。因此,如果您的项目有两个正在进行的扇出,那么每个扇出只能使用可用扇出率的一半。最大化扇出速度的推荐方法是一次只有一个进行中的活跃扇出。
可折叠的消息限制
如可折叠消息中所述,可折叠消息是设计为可在彼此之上折叠的无内容通知。如果开发者过于频繁地向应用重复相同的消息,我们会延迟(限制)消息以减少对用户电池的影响。
例如,如果您向单个设备发送大量新电子邮件同步请求,我们可能会将下一个电子邮件同步请求延迟几分钟,以便设备可以以较低的平均速度进行同步。严格执行这种限制是为了限制对用户的电池的影响。
如果您的用例需要高突发发送模式,那么不可折叠的消息可能是正确的选择。请确保在此类消息中包含内容以降低电池损耗。
我们将可折叠的消息限制为每台设备每个应用突发 20 条消息,每 3 分钟补充 1 条消息。
向单一设备发送消息的最大速率
在 Android 平台上,您每分钟最多可以向单一设备发送 240 条消息,每小时最多可以发送 5,000 条消息。这一高阈值是为了满足短时间的流量突发,例如当用户通过聊天快速互动时。此限制可防止发送逻辑中的错误无意中耗尽设备上的电池电量。
在 iOS 平台上,当发送消息的速率超过 APNs 限制时,系统会返回错误。