FCM消息分组与应用启动时批量关闭消息的实现方案咨询
FCM消息分组与应用启动时批量关闭消息的实现方案咨询
我已经成功实现了FCM推送消息的收发功能,用到的代码如下:
服务端代码
const admin = require('firebase-admin'); const message1 = { token: '<Token>', data: { title: "Test", body: "Test", }, webpush: { fcmOptions: { link: '/', } } }; const messages = [message1]; try { const result = await admin.messaging().sendEach(messages); console.log(result?.responses); } catch (error) { console.log(error); }
Service Worker 代码
importScripts('https://www.gstatic.com/firebasejs/10.13.2/firebase-app-compat.js'); importScripts('https://www.gstatic.com/firebasejs/10.13.2/firebase-messaging-compat.js'); const firebaseApp = firebase.initializeApp({ <AUTHORISATION DATA> }); const messaging = firebase.messaging(); messaging.onMessage((payload) => { console.log('Foreground Message recieved', payload); }); messaging.onBackgroundMessage((payload) => { console.log('Background Message recieved', payload); const notificationTitle = payload.data.title; const notificationOptions = { body: payload.data.body, icon: '/images/icons-192.png', data: { url: "/" } } self.registration.showNotification(notificationTitle, notificationOptions); }); self.addEventListener('notificationclick', function (event) { event.notification.close(); event.waitUntil( clients.matchAll({ type: "window" }) .then(function (clientList) { for (var i = 0; i < clientList.length; i++) { var client = clientList[i]; if (client.url == '/' && 'focus' in client) return client.focus(); } if (clients.openWindow) { return clients.openWindow('/'); } }) ); });
现在我还有两个需求没搞明白怎么实现,想请教大家:
- 对消息进行分组,避免用户被大量推送消息轰炸
- 当应用打开时,自动关闭所有已显示的推送消息
关于消息分组的问题
我查了资料,知道这个功能应该和collapse_key标签有关,但官方文档没有给出具体的示例,而且我找到的一些实现方法似乎都是旧版FCM的,在当前版本里没法正常工作。
根据我的理解,collapse_key的作用是用同一个key来分组消息,这样用户不会收到多条独立的推送,而是会收到一条提示有X条新消息的汇总推送,这正是我想要的效果,但不知道在当前的代码里该怎么正确配置。
关于应用启动时关闭所有消息的问题
我猜测可能需要在应用打开时发送一条特定的推送消息,让Service Worker处理并关闭所有当前的推送,但我完全找不到相关的实现资料,不知道具体该怎么操作。
总结
这两个应该是比较常见的需求吧?有没有朋友能指点一下,或者告诉我该去哪里找对应的实现方案呢?
备注:内容来源于stack exchange,提问作者Alexander Mason
相关产品推荐
相关产品推荐

