2024年6月后如何向FCM收发上行消息?
替代FCM XMPP的上行消息接收与送达率计算方案
方案1:HTTP v1 API + 自定义后端上报
- 客户端发送上行消息时,先调用你的后端接口,携带消息唯一标识、设备ID等关键信息,后端先记录这条消息的发送记录。
- 接着通过FCM HTTP v1 API发送下行消息,保存FCM返回的
name字段(即下行消息ID),并与之前的上行消息标识关联存储。 - 后续通过
projects.messages.get接口查询该下行消息的送达状态,更新到你的统计数据中,以此计算送达率。 - 优势:完全自主控制流程,无需依赖第三方中间件,能精准追踪每条消息的全链路状态。
方案2:Cloud Functions 触发器
- 配置FCM的
onMessageReceived云函数触发器,当设备向FCM发送上行消息时,自动触发你的云函数。 - 在云函数内,直接将消息内容、消息ID、设备信息同步到你的后端(比如通过HTTP请求写入数据库),后端后续结合下行消息的状态数据完成送达率计算。
- 注意事项:需配置好云函数的权限,确保能访问你的后端资源;高并发场景下要做好函数的扩容和错误重试逻辑。
方案3:自定义Webhook事件通知
- 在FCM控制台配置事件通知,针对消息送达、消息点击等关键事件,设置你的后端接口作为Webhook接收地址。
- 后端先记录上行消息的标识,当FCM触发对应事件时,会主动推送事件数据到你的Webhook接口,后端通过事件中的消息ID关联之前的上行记录,更新送达状态。
- 优势:无需主动轮询FCM获取状态,减少后端资源消耗;但要确保Webhook接口的可靠性,比如实现签名验证、重试机制避免丢数据。
送达率计算的核心要点
- 必须建立上行消息标识与下行消息ID的关联关系,确保每条上行消息对应的下行状态能被准确匹配。
- 建议在数据库中创建专门的统计表,字段包含:上行消息ID、下行消息ID、发送时间、送达状态、设备ID等,定期基于该表数据计算送达率。
内容的提问来源于stack exchange,提问作者Ivan Ivanov
相关产品推荐
相关产品推荐

