【发布时间】:2021-06-16 05:20:01
【问题描述】:
我真的不知道这些事情是怎么回事。 我正在为我的网站正常使用 FCM 网络推送。如果我在前台,我可以在网站上收到消息,如果我在后台,我会收到通知。到目前为止一切顺利。
importScripts('https://www.gstatic.com/firebasejs/8.2.5/firebase-app.js');
importScripts('https://www.gstatic.com/firebasejs/8.2.5/firebase-messaging.js');
firebase.initializeApp({
...
});
const messaging = firebase.messaging();
问题在于 firebase-messaging-sw.js 的默认配置会在后台显示一个通知,显示 chrome 图标。我希望能够自定义此通知并显示我的应用程序图标。然后上网看了下发现需要用onBackgroundMessage()截取消息。
importScripts('https://www.gstatic.com/firebasejs/8.2.5/firebase-app.js');
importScripts('https://www.gstatic.com/firebasejs/8.2.5/firebase-messaging.js');
firebase.initializeApp({
...
});
const messaging = firebase.messaging();
if (messaging) {
messaging.onBackgroundMessage(payload => {
const notificationTitle = payload.notification.title || payload.data.title;
const notificationOptions = {
body: payload.notification.body || payload.data.subtitle || '',
icon: 'https://firebasestorage.googleapis.com/v0/b/yes-4-web.appspot.com/o/pontonos%2Ficons%2Fandroid-chrome-192x192.png?alt=media&token=35616a6b-5e70-43a0-9284-d780793fa076',
data: payload.data
};
return self.registration.showNotification(notificationTitle, notificationOptions);
});
self.addEventListener('notificationclick', event => {
event.notification.close();
event.waitUntil(clients.matchAll({ type: "window" }).then(function(clientList) {
for (let i = 0; i < clientList.length; i++) {
const client = clientList[i];
if (client.url === '/' && 'focus' in client) {
if (event.notification.data.route) client.href(event.notification.data.route);
return client.focus();
}
}
if (clients.openWindow)
return clients.openWindow(event.notification.data.route || '/');
}));
});
}
问题是现在,当使用 onBackgroundMessage() 时,我会看到两个通知,一个是带有 chrome 图标的原始通知,另一个是带有我的应用程序图标的个性化消息(见图)
另一个问题是,如果我点击原始通知,带有我的网站的标签会成为主要焦点,但如果我点击个性化通知,则会打开一个带有我的网站的新标签。
【问题讨论】:
-
你找到解决办法了吗?
标签: firebase push-notification firebase-cloud-messaging web-push