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

如何获知FCM推送通知无法发送?连续失败时怎么处理Token?

FCM推送失败检测与无效Token清理方案

一、FCM推送失败的获知方式

FCM的推送结果反馈需在服务器端处理(你当前的OnMessageReceived仅负责客户端成功接收通知后的逻辑,无法感知推送失败),核心有两种方式:

1. 同步API即时反馈

当服务器调用FCM发送API(HTTP v1 API或Legacy API)时,FCM会立刻返回响应,其中包含每个目标Token的状态:

  • 返回NotRegistered:对应设备已卸载应用、Token过期或无效,可直接标记删除
  • 返回InvalidRegistration:Token格式错误,直接删除
  • 返回Unavailable/InternalServerError:属于临时服务故障,可重试推送,不直接标记无效

示例响应(Legacy API):

{
  "multicast_id": 123456,
  "success": 0,
  "failure": 1,
  "canonical_ids": 0,
  "results": [
    { "error": "NotRegistered" }
  ]
}

2. 异步送达报告(可选)

若需要更详细的送达数据(如是否被用户点击),可在发送请求中添加delivery_receipt_requested: true参数,开启FCM的送达报告功能,FCM会将推送结果异步发送到你指定的服务器端点。

二、连续失败Token的清理逻辑

  1. 新增统计字段:在你的fcmtoken表中添加fail_count(失败次数)、last_fail_time(最近失败时间)字段,用于追踪每个Token的失败情况
  2. 失败处理规则:
    • 每次调用FCM发送后,解析响应错误码:
      • 若为NotRegistered/InvalidRegistration:直接从表中删除该Token
      • 若为临时错误:将该Token的fail_count加1
    • 定时扫描fcmtoken表,当某个Token的fail_count达到设定阈值(如3次),且最近失败时间超过指定期限(如24小时),则删除该Token

三、关于你当前的OnMessageReceived方法

你提供的客户端代码仅负责成功接收FCM通知后的展示逻辑,与推送失败检测无关。若需在客户端维护Token有效性,可在应用启动时调用FirebaseInstanceId.Instance.Token获取最新Token,对比本地存储的旧Token,若不一致则上传至服务器更新fcmtoken表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 22:43:15