FCM V1版本无需主题批量发送多条消息的Endpoint咨询
解决FCM一次性发送多条消息的问题
FCM HTTP v1 API没有专门的批量发送Endpoint,你需要通过HTTP批量请求来实现一次性发送多条消息,具体实现方式如下:
核心修改点
- 请求头调整:将
Content-Type改为multipart/mixed; boundary=batch_<随机唯一字符串>,这个boundary用于分隔批量请求中的单条消息。 - 请求体构造:把每条消息的请求(和你当前单条请求的结构一致)作为独立的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
相关产品推荐
相关产品推荐

