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

Node.js中使用FCM订阅主题失败问题求助

正确实现Node.js中FCM主题订阅的方法

问题分析

你在使用fcm-node库订阅FCM主题时遇到两类错误:

  1. 用Promise链式调用时触发TypeError: CB is not a function——因为该库的subscribeToTopic方法仅支持回调模式,不兼容Promise语法。
  2. 改用回调模式后返回{ statusCode: 400, message: 'Bad Request' }——因为参数格式不符合FCM API要求,需传入包含令牌数组的特定结构对象。

正确实现步骤

1. 初始化FCM客户端

确保已安装fcm-node依赖,并用Firebase项目的Server Key完成初始化:

var FCM = require("fcm-node");
let fcm = new FCM(process.env.SERVER_KEY);

2. 收集令牌并调用订阅方法

将设备令牌存入数组,再按照fcm-node要求的参数格式调用订阅方法:

const tokens = [];
// 确保deviceToken是从客户端获取的有效FCM设备令牌
tokens.push(deviceToken);

// 正确调用格式:第一个参数是含registration_ids的对象,第二个是主题名,第三个是回调函数
fcm.subscribeToTopic({ registration_ids: tokens }, "general", (err, response) => {
  if (err) {
    console.error("订阅主题失败:", err);
  } else {
    console.log("订阅主题成功:", response);
  }
});

关键注意事项

  • 必须使用回调函数处理订阅结果,fcm-node的该方法不支持Promise语法。
  • 第一个参数必须是包含registration_ids字段的对象,字段值为设备令牌数组(即使只有一个令牌,也要用数组包裹)。
  • 确保deviceToken是有效的FCM令牌,格式为无空格的长字符串,且未过期。
  • 确认process.env.SERVER_KEY是Firebase控制台中正确的服务器密钥(来自项目设置→云消息传递)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 23:19:01