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

FCM报错messaging/registration-token-not-registered,但客户端仍用该令牌

解决FCM令牌“未注册”但客户端仍返回同一令牌的问题

问题原因

FCM返回messaging/registration-token-not-registered错误,说明该令牌在FCM服务器端已被标记为无效,但客户端调用getToken()时优先返回本地缓存的旧令牌,不会主动校验令牌在FCM侧的有效性。常见触发场景包括:

  • 用户卸载重装APP后,本地缓存的旧令牌未被清理,但FCM已注销该令牌
  • 设备Google服务组件更新,导致令牌失效但客户端未感知
  • APP被系统清除数据后,本地缓存令牌残留,但FCM端已失效

解决步骤

  • 强制客户端获取新令牌:不要直接依赖getToken()的缓存结果,先调用deleteToken()清除本地缓存,再重新获取新令牌。代码示例:
    // 先清除旧令牌缓存
    await getMessaging().deleteToken();
    // 获取新令牌
    const newToken = await getMessaging().getToken();
    // 将新令牌同步到后端数据库
    
  • 后端及时清理无效令牌:收到messaging/registration-token-not-registered错误时,立即将对应的令牌从数据库中移除,避免后续重复发送无效请求。
  • 监听客户端令牌刷新事件:在客户端注册onTokenRefresh监听,一旦FCM自动刷新令牌,就把新令牌同步到后端,从根源减少无效令牌的产生:
    getMessaging().onTokenRefresh(() => {
      getMessaging().getToken().then(newToken => {
        // 同步新令牌到后端
      });
    });
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 22:50:37