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

Spring Boot项目中如何获取FCM推送通知的设备送达状态?

第一步:调整现有发送逻辑获取消息唯一标识

你当前的代码未接收FCM接口返回的消息唯一ID,查询送达状态必须依赖这个ID,首先修改发送逻辑存储消息ID:

// 定义FCM发送响应接收类,也可直接用Map<String,Object>快速接收
@Data
public class FCMSendResponse {
    // FCM返回的全局唯一消息标识,格式为 projects/{你的项目ID}/messages/{消息ID}
    private String name;
}

private FCMSendResponse sendNotification(FCMMessageRequestDTO fcmMessageRequestDTO) {
    MultiValueMap<String, String> headers = new LinkedMultiValueMap<>();
    headers.set("Authorization", fcmAuthorizationKey);
    headers.add("Content-Type", "application/json");
    RestTemplate restTemplate = new RestTemplate();
    restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
    HttpEntity<FCMMessageRequestDTO> request = new HttpEntity<>(fcmMessageRequestDTO, headers);
    // 接收发送响应,拿到消息唯一标识
    FCMSendResponse response = restTemplate.postForObject(fcmMessageUrl, request, FCMSendResponse.class);
    // 此处需将消息ID、接收人设备标识、发送时间等信息存入你的业务数据库,后续查询关联用
    return response;
}
第二步:送达状态查询的两种实现方案
  • 方案1:调用FCM官方送达数据API查询
    该方案需要你将Firebase套餐升级到Blaze付费版本,免费版不支持。首先在Google Cloud控制台启用FCM数据查询API,使用Firebase服务账号生成OAuth2.0访问凭证,调用对应查询接口即可获取单条消息的送达状态、展示状态、点击状态等数据,查询结果存在最长15分钟的延迟。
  • 方案2:客户端主动上报状态(无付费门槛,推荐中小项目使用)
    不需要调用FCM额外接口,在客户端集成FCM SDK时新增两个上报逻辑:
    1. 客户端收到通知时,调用你的后端上报接口,传入消息ID、设备标识、送达时间
    2. 用户点击通知时,再次调用后端接口上报点击状态
      后端将上报的状态和发送时存储的消息ID关联,直接查询自有数据库即可获取实时送达状态,适配全平台,不需要额外付费。
注意事项
  • 你当前使用的是FCM旧版HTTP API,官方已公告即将废弃,建议后续升级到FCM v1 API,对消息追踪、错误处理的支持更完善
  • 如果消息发送时就出现错误(比如设备token无效、配额超限),直接从发送请求的响应中就能拿到对应错误码,不需要走后续状态查询流程
  • iOS端后台通知的送达上报需要额外配置通知服务扩展,确保能在后台收到通知时触发上报逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 14:09:05