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
相关产品推荐
相关产品推荐

