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

应用无法接收推送通知且出现Firebase FCM token注销失败报错如何解决?

问题原因

这个messaging/token-unsubscribe-failed报错以及404响应是以下几种常见原因导致的:

  • 本地存储的FCM注册令牌已经过期、失效,或者已经被Firebase服务端删除,SDK尝试用该旧令牌执行取消订阅、刷新令牌操作时,服务端找不到对应记录返回404
  • Firebase项目的Cloud Messaging服务器密钥被重置,或项目本身被删除,旧令牌全部失效
  • 用户清除了应用的浏览器缓存/本地存储,或是卸载重装过应用,本地残留的旧令牌与服务端记录不匹配
  • 前端初始化Firebase的配置参数和Firebase控制台的项目配置不一致,导致SDK请求时找不到对应资源
修复方案
  • 主动捕获无效令牌错误,强制刷新令牌
    代码中增加messaging/token-unsubscribe-failed错误的捕获逻辑,出现该错误时直接清理本地存储的所有FCM相关缓存(包括localStorage、IndexedDB中存储的令牌、订阅记录),再重新申请新的FCM令牌,示例代码如下:
    import { getMessaging, getToken, deleteToken } from "firebase/messaging";
    
    const messaging = getMessaging();
    async function refreshFCMToken() {
      try {
        await deleteToken(messaging);
      } catch (err) {
        if (err.code === 'messaging/token-unsubscribe-failed') {
          // 清除本地存储的旧令牌
          localStorage.removeItem('fcm_token');
          // 若令牌存储在IndexedDB中,对应增加删除逻辑
        }
      }
      // 重新申请新令牌
      const newToken = await getToken(messaging, { vapidKey: '你的VAPID公钥' });
      // 将新令牌同步到自有服务端存储
      await fetch('/api/save-fcm-token', {
        method: 'POST',
        headers: {
          'Content-Type': 'application/json'
        },
        body: JSON.stringify({ token: newToken })
      });
    }
    
  • 核对Firebase初始化配置
    检查前端初始化Firebase时用到的apiKey、projectId、messagingSenderId三个参数,确保和Firebase控制台项目设置页给出的配置完全一致,不要使用旧项目的配置参数。
  • 优化服务端令牌管理逻辑
    自有后端调用FCM接口发送通知时,如果返回InvalidRegistration或NotFound错误,直接删除数据库中存储的对应无效令牌,避免后续重复发起无效请求。
  • 验证修复效果
    清除浏览器缓存后重新打开应用,触发新令牌申请流程,再测试推送发送,确认无控制台报错且应用可正常接收通知。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 23:45:01