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

FCM推送重复问题求助:单设备组每次收到4条重复通知

解决FCM设备组重复推送4次的问题

嘿,我来帮你搞定这个头疼的重复推送问题!结合你用fcm-node、fcm-push遇到的情况,我整理了几个排查和解决方向:

1. 先查设备组是不是塞了重复令牌

你说设备组只包含一个设备令牌,但说不定不小心把同一个令牌加了4次?FCM设备组里有几个令牌就会发几次通知,哪怕是同一个设备。你可以用FCM的设备组查询接口,看看当前组里的成员列表,确认有没有重复条目。

2. 排查代码是不是被重复调用了

检查你的Alerts.pushTry函数是不是被触发了4次!比如有没有定时器重复跑、事件监听绑了多次,或者业务逻辑里不小心执行了多次这个函数。最简单的办法是在函数开头加个日志:

console.log(`[${new Date().toISOString()}] pushTry 执行了一次`);

跑起来看看日志里是不是出现了4条记录,要是有,那就是代码调用的问题啦。

3. 换成官方的firebase-admin SDK试试

你用的fcm-node和fcm-push都是第三方旧库,官方现在主推firebase-admin,稳定性和兼容性都好很多,很多旧库的bug在官方SDK里已经修复了。给你个示例代码:

先安装依赖:

npm install firebase-admin --save

然后写发送逻辑:

const admin = require('firebase-admin');

// 用你的服务账号密钥初始化(去Firebase控制台下载)
const serviceAccount = require('./your-service-account-key.json');
admin.initializeApp({
  credential: admin.credential.cert(serviceAccount),
  databaseURL: 'https://your-project-id.firebaseio.com'
});

Alerts.pushTry = function (cb) {
  const groupKey = 'your-group-key'; // 你的设备组key
  const message = {
    notification: {
      title: '告警通知',
      body: '这是一条测试告警内容'
    },
    // 可选:配置安卓/iOS的通知参数
    android: { notification: { sound: 'default' } },
    apns: { payload: { aps: { sound: 'default' } } },
    condition: `'${groupKey}' in topics` // 设备组本质是FCM的隐式话题
  };

  admin.messaging().send(message)
    .then(res => {
      console.log('通知发送成功:', res);
      cb(null, res);
    })
    .catch(err => {
      console.error('通知发送失败:', err);
      cb(err);
    });
};

4. 去FCM控制台看发送记录

登录Firebase控制台,进入Cloud Messaging的消息历史,看看每条告警对应的发送请求数。如果FCM服务器收到了4次发送请求,那问题肯定在你的代码调用;如果服务器只收到1次,但设备端收到4次,那就要查设备端的通知处理逻辑了。

5. 检查设备端的通知监听

要是前面都没问题,那看看设备端代码:比如Android的FirebaseMessagingService是不是重复注册了广播接收器,iOS的UNUserNotificationCenter是不是多次加了通知代理,导致同一个通知被多次处理展示。


内容的提问来源于stack exchange,提问作者Sanjay Kumar N S

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:26:50