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

迁移至FCM HTTP V1 API遇问题:现有注册被标记为未注册

FCM V1 API 报 UNREGISTERED 错误的解决方案

错误原因

你传入的是Web Push标准订阅的endpoint路径ID,但FCM V1 API的token字段要求的是FCM注册令牌——这是两个完全不同的标识体系,因此会返回UNREGISTERED错误。

旧版FCM Send API支持直接处理Web Push订阅对象,而V1 API仅兼容Firebase Messaging SDK生成的注册令牌,两者不互通。


解决方法

方案1:迁移到FCM V1 API(需重新收集用户订阅)

如果要完全切换到V1 API,需要让用户重新订阅以获取FCM注册令牌:

  1. 在Web应用中集成Firebase Messaging SDK。
  2. 用户授权通知权限后,调用SDK的getToken()方法获取FCM注册令牌:
import { getMessaging, getToken } from "firebase/messaging";
const messaging = getMessaging();

async function saveFCMToken() {
  const token = await getToken(messaging, { 
    vapidKey: "你的VAPID公钥" 
  });
  if (token) {
    // 将令牌发送到后端数据库存储,替换原有的Web Push订阅ID
    await fetch('/api/save-fcm-token', {
      method: 'POST',
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify({ token })
    });
  }
}
  1. 调用V1 API时,将这个令牌填入请求体的message.token字段,即可正常发送通知。

方案2:保留现有Web Push订阅(无需重新收集)

如果不想强制用户重新订阅,可以继续使用标准Web Push协议直接推送,不受旧版FCM Send API弃用影响:

  1. 从数据库取出订阅对象的endpoint、p256dh、auth字段。
  2. 使用VAPID密钥生成Authorization头(或使用Firebase项目的服务器密钥,格式为Authorization: key=你的服务器密钥)。
  3. 按照Web Push标准加密payload(采用aesgcm内容编码),直接向endpoint地址发送POST请求即可,无需使用V1 API。

额外注意事项

  • 若用户清除浏览器数据、撤销通知权限或卸载PWA,原有订阅会失效,发送时会返回类似错误,需在后端捕获错误并从数据库中移除无效订阅。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 17:37:33