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

如何调试Firebase Cloud Messaging?如何通过message_id查询消息状态?

如何调试Firebase Cloud Messaging?

调试FCM得从客户端到服务器端一步步排查,我整理了几个关键环节:

  • 客户端侧排查

    • 先确认设备token有效性:用FirebaseMessaging.getInstance().getToken()(新版)获取当前设备的token,和你发送请求时用的token对比,确保完全一致——很多时候问题就出在token写错或者过期。
    • 查看客户端日志:Android打开Logcat,过滤FirebaseMessaging标签;iOS看Xcode控制台的FCM相关输出,重点找接收消息时的错误提示,比如权限未开启(iOS要确认推送权限、Android要开通知和后台权限)、消息处理逻辑报错。
    • 先测前台接收:把应用放在前台,发送测试消息,看onMessageReceived(Android)或didReceiveRemoteNotification(iOS)是否触发——如果前台能收到,那大概率是后台推送的配置问题(比如Android的后台通道设置、iOS的APNs配置)。
  • 服务器侧排查

    • 检查请求payload格式:FCM对通知消息和数据消息的格式要求不同,通知消息必须包含notification字段,数据消息放在data里,混合消息两者都要有。如果是主题推送,确认主题名称拼写正确;设备组推送的话,设备组ID要有效。
    • 验证服务器密钥:请求头里的Authorization: key=你的服务器密钥必须正确,这个密钥在Firebase控制台「项目设置」→「云消息传递」里找,别误用Web API密钥(那是给客户端SDK用的)。
    • 解析响应细节:别只看有没有message_id,还要留意响应里的其他字段——比如如果有error字段,会直接告诉你问题(比如InvalidRegistration表示token无效);有些时候即使返回message_id,也可能存在隐性问题(比如token已过期但FCM还没标记)。
已发送消息获成功响应但手机没收到,如何通过message_id查询状态?

这种情况确实头疼,不过FCM提供了两种方式查询消息状态:

  • Firebase控制台UI渠道

    • 打开Firebase控制台,进入你的项目,找到「云消息传递」模块,点击「消息历史记录」。这里会列出你近期发送的所有消息,你可以通过发送时间、目标类型(设备/主题/设备组)筛选,找到对应的message_id后点击进入详情页。
    • 详情页里能看到消息的送达数、展示数、点击数,还有失败原因的统计(比如设备未注册、权限不足、设备离线等),甚至能看到单条消息的处理日志。注意:消息历史记录仅保留30天,超过时间就查不到了。
  • Firebase CLI工具渠道

    • 如果你习惯用命令行,可以用Firebase CLI的messaging:message:get命令来查询,格式如下:
      firebase messaging:message:get YOUR_MESSAGE_ID --project=YOUR_PROJECT_ID
      
      执行后会返回该消息的完整状态信息,包括每个目标设备的处理结果、错误代码(如果有失败的话)。
    • 前提是你已经安装了Firebase CLI,并且通过firebase login登录,关联了对应的项目。
  • 补充说明

    • 有时候即使返回message_id,也可能因为设备处于离线状态、token过期/无效、Android设备进入Doze模式、iOS设备开启低功耗模式导致消息延迟或无法送达,这些情况在查询结果里都会有明确的状态提示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:17:47