You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

FCM V1版本无需主题批量发送多条消息的Endpoint咨询

解决FCM一次性发送多条消息的问题

FCM HTTP v1 API没有专门的批量发送Endpoint,你需要通过HTTP批量请求来实现一次性发送多条消息,具体实现方式如下:

核心修改点

  1. 请求头调整:将Content-Type改为multipart/mixed; boundary=batch_<随机唯一字符串>,这个boundary用于分隔批量请求中的单条消息。
  2. 请求体构造:把每条消息的请求(和你当前单条请求的结构一致)作为独立的part,用boundary分隔。

Elixir代码示例

假设你有一个包含多条消息payload的列表message_payloads,可以这样构造批量请求:

# 生成随机boundary
boundary = "batch_#{:crypto.strong_rand_bytes(16) |> Base.encode16(case: :lower)}"

# 构造批量请求体
batch_body =
  message_payloads
  |> Enum.map(fn payload ->
    """
    --#{boundary}
    Content-Type: application/http
    Content-Transfer-Encoding: binary

    POST /v1/projects/digimep-f4db3/messages:send HTTP/1.1
    Content-Type: application/json

    #{Jason.encode!(payload)}
    """
  end)
  |> Enum.join("\n")
  |> Kernel.<>("\n--#{boundary}--")

# 调整请求头
headers = [
  {"Authorization", "Bearer #{access_token}"},
  {"Content-Type", "multipart/mixed; boundary=#{boundary}"}
]

# 发送批量请求
response = HTTPoison.post!(
  "https://fcm.googleapis.com/batch",
  batch_body,
  headers
)

注意事项

  • 单次批量请求最多包含500条消息,超过这个数量会被FCM拒绝。
  • 响应会返回每个单条请求的结果,你需要解析响应体中的每个part来确认每条消息的发送状态。
  • 每个part的请求结构必须和单条消息的请求完全一致,确保message字段格式正确。

如果觉得手动构造批量请求太繁琐,也可以考虑使用Firebase Admin SDK for Elixir(比如firebase_admin包),SDK内置了批量发送的方法,无需手动处理HTTP批量请求的细节。

内容的提问来源于stack exchange,提问作者Karan Madhukar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 13:50:55