问题描述
我面临的通知消息的问题是,只要定义的 click_action 的完整 URL 与任何打开的选项卡不匹配,就会打开一个新选项卡。
假设 click_action 等于 mydomain.com
并且有一个 URL 为 mydomain.com/anyroute
的已打开标签。将打开一个新选项卡,因为 URL 不匹配。但我希望关注已经打开的标签,而不是打开新标签。
在用户点击消息后,Service Worker 能否捕捉到通知消息?还有其他可能吗?
编辑:到目前为止,服务工作者的事件如 onBackgroundMessage
或 notificationclick
没有通过,因为推送通知是 if type notification_message
。
解决方法
您可以像解释的here一样使用on
。
messaging.onBackgroundMessage((payload) => {
console.log(
"[firebase-messaging-sw.js] Received background message ",payload
);
// Customize notification here
const notificationTitle = "Background Message Title";
const notificationOptions = {
body: "Background Message body.",icon: "/firebase-logo.png",};
// Loop trough all clients controled by the SW
self.clients.matchAll(options).then(function (clients) {
// Let's see if we already have a chat window open:
const url = new URL(client.url);
if (url.pathname == "/custom_url/") {
// Excellent,let's use it!
client.focus();
}
// do something with your clients list
});
self.registration.showNotification(notificationTitle,notificationOptions);
});
您可以在其中使用 self.clients
来循环浏览由软件控制的应用程序的所有选项卡/客户端。如果网址/补丁匹配,您可以关注特定客户端。