当他们(例如(收到私人消息时,我正在向我的网站用户发送推送通知。该通知将向该用户订阅的所有浏览器。因此可能是台式机,移动,工作计算机等。
我想做的是在用户读取消息后关闭所有已发送的通知。
因此,用户登录移动设备,读取私人消息 - 此时,我希望关闭/取消该PM的所有先前发送的通知。
这是可能的吗?
预先感谢!马特
是的,这是可能的,但不是默默。例如,Chrome将用新通知替换通知,并说"此站点已在后台更新"。
有两个独立的API:推动API,"使Web应用程序能够从服务器接收消息",以及"用于配置和显示向用户配置和显示桌面通知的通知API"。/p>
通知API提供Notification.close()
,它取消了通知的显示。
您可以使用推动API触发Notification.close()
。这是您的服务工作者应该使用的样本:
self.addEventListener('push', async event => {
const data = event.data.json();
if (data.type === 'display_notification') {
self.registration.showNotification(data.title, data.options);
} else if (data.type === 'cancel_notification') {
const notifications = await self.registration.getNotifications({
tag: data.notificationTag
});
for (notification of notifications) {
notification.close();
}
} else {
console.warn("Unknown message type", event, data);
}
});
但是!此设计意味着您的cancel_notification
消息不会显示通知。这违反了一些浏览器策略,例如Chrome将显示一个新的通知,说"此站点已在后台更新"。