FCM 節流和配額

我們的目標是確保透過 FCM 傳送的每則訊息都能順利送達。不過,如果傳送每則訊息,有時會導致整體使用者體驗不佳。在其他情況下,我們需要提供界線,確保 FCM 為所有傳送者提供可擴充的服務。本節所述的限制和配額類型有助於我們平衡這些重要因素。

下游訊息節流

HTTP v1 API 針對下游訊息傳送作業,導入了每分鐘每專案的配額。每分鐘 60 萬則訊息的預設配額,可滿足超過 99% 的FCM開發人員需求,同時確保系統穩定性,並將尖峰專案的影響降至最低。

流量模式出現尖峰可能會導致超出配額錯誤。如果超出配額,系統會提供 HTTP 狀態碼 429 (QUOTA_EXCEEDED),直到配額在下一分鐘重新填滿為止。在過載情況下,系統也可能會傳回 429 回應,因此強烈建議您根據發布的建議處理 429 錯誤。

注意事項:

  • 下游配額是計算郵件數量,而非要求數量。
  • 系統會計算用戶端錯誤 (HTTP 狀態碼 400-499),但不包括 429。
  • 配額是以每分鐘為單位,但這些分鐘數並非以時鐘時間為準。

監控配額

您可以在 Google Cloud 控制台查看配額、用量和錯誤:

  1. 前往 Google Cloud 控制台
  2. 選取「API 和服務」
  3. 從表格清單中選取「Firebase Cloud Messaging API」
  4. 選取「QUOTA & SYSTEM LIMITS」(配額與系統限制)

注意:這些圖表並未與配額分鐘數精確對齊,也就是說,即使流量似乎低於配額,系統仍可能會提供 429 狀態碼。

申請提高配額

申請提高配額前,請確認以下事項:

  • 每天至少有 5 分鐘的配額用量 ≥ 80%。
  • 用戶端錯誤率低於 5%,尤其是在流量高峰期間。
  • 您遵循大量傳送訊息的最佳做法。

如果符合這些條件,您可以提交配額調高要求,最多可調高 25%,而 FCM 會盡一切努力滿足要求 (但無法保證一定能調高)。

如果即將推出產品或舉辦臨時活動,需要更多下游訊息配額,請至少提前 15 天申請配額,確保有足夠時間處理要求。如果是大型要求 (每分鐘超過 1,800 萬則訊息),請至少提前 30 天通知我們。發布和特別活動要求仍須符合用戶端錯誤率和最佳做法規定。

另請參閱FCM配額常見問題。

主題訊息限制

主題訂閱項目的新增或移除速率,每項專案的上限為 3,000 QPS。

如要瞭解訊息傳送速率,請參閱「扇出節流」。

擴散傳遞節流

訊息散播是指將訊息傳送至多部裝置的程序,例如指定主題和群組,或是使用通知撰寫器指定目標對象或使用者區隔時。

訊息散播並非即時,因此有時會同時進行多個散播作業。每項專案的並行訊息扇出數量上限為 1,000 個。之後,我們可能會拒絕其他扇出要求,或延後扇出要求,直到部分進行中的扇出完成為止。

實際可達成的扇出率會受到同時要求扇出的專案數量影響。個別專案的扇出率達到 10,000 QPS 並不罕見,但這個數字並非保證,而是系統總負載的結果。請注意,可用的扇出容量會分配給各個專案,而不是扇出要求。因此,如果專案有兩個正在進行的扇出作業,則每個扇出作業只會看到一半的可用扇出率。建議一次只執行一個進行中的扇出作業,盡量提高扇出速度。

可收合訊息節流

如「可收合訊息」一文所述,可收合訊息是沒有內容的通知,設計目的是彼此收合。如果開發人員過於頻繁地將相同訊息傳送至應用程式,我們會延遲 (節流) 訊息,以減少對使用者電池的影響。

舉例來說,如果您傳送大量新的電子郵件同步要求至單一裝置,我們可能會延遲幾分鐘再處理下一個電子郵件同步要求,讓裝置以較低的平均速率同步處理。這項節流措施嚴格來說是為了限制使用者感受到的電池影響。

如果您的用途需要高爆量傳送模式,則不可摺疊訊息可能是合適的選擇。對於這類訊息,請務必在訊息中加入內容,以減少電池消耗。

我們限制每個裝置上每個應用程式的摺疊訊息數量,每波最多 20 則,每 3 分鐘可補充 1 則。

單一裝置的訊息傳送速率上限

在 Android 裝置上,你每分鐘最多可傳送 240 則訊息,每小時最多可傳送 5,000 則訊息。這個高門檻是為了允許短期流量爆增,例如使用者透過即時通訊快速互動時。這項限制可防止傳送邏輯發生錯誤,導致裝置電池電量意外耗盡。

如果速率超過 APNs 限制,iOS 會傳回錯誤。