Chrome推送通知:发送隐形推送
Chrome Push Notifications: send invisible push
我不仅想发送带有消息的推送(通过获取),有时还想发送不可见的推送(即根本不显示通知),只是为了检查仍有多少用户订阅以及他们接收推送的速度。
我试过这段代码。它似乎有效,但在某些设备上我收到 "This site has been updated in the background" 消息,这令人困惑。
self.addEventListener('push', function(event) {
event.waitUntil(
fetch(my_awesome_url)
.then(function(response) {
if (response.status !== 200) {
throw new Error('Server code: ' + response.status);
}
return response.json().then(function(data) {
if (typeof data.data !== 'object') return; // invisible push, show nothing
var notificationData = {
body: data.content,
data: data.data,
tag: data.id || Math.random(),
icon: typeof data.data == 'object' ? data.data.image : ''
};
return self.registration.showNotification(data.title, notificationData);
});
})
.catch(function (err) {
})
);
});
我怎样才能真正阻止浏览器显示任何内容?
你不能。
在您的客户端代码中,您必须编写以下行:
subscribe({userVisibleOnly: true});
这是因为浏览器仅支持显示消息的推送通知。
除非万不得已,否则不要尝试发送消息,然后捕获错误订阅的错误响应。
这个问题有一个很好的答案,这里有更多细节:
我不仅想发送带有消息的推送(通过获取),有时还想发送不可见的推送(即根本不显示通知),只是为了检查仍有多少用户订阅以及他们接收推送的速度。
我试过这段代码。它似乎有效,但在某些设备上我收到 "This site has been updated in the background" 消息,这令人困惑。
self.addEventListener('push', function(event) {
event.waitUntil(
fetch(my_awesome_url)
.then(function(response) {
if (response.status !== 200) {
throw new Error('Server code: ' + response.status);
}
return response.json().then(function(data) {
if (typeof data.data !== 'object') return; // invisible push, show nothing
var notificationData = {
body: data.content,
data: data.data,
tag: data.id || Math.random(),
icon: typeof data.data == 'object' ? data.data.image : ''
};
return self.registration.showNotification(data.title, notificationData);
});
})
.catch(function (err) {
})
);
});
我怎样才能真正阻止浏览器显示任何内容?
你不能。
在您的客户端代码中,您必须编写以下行:
subscribe({userVisibleOnly: true});
这是因为浏览器仅支持显示消息的推送通知。
除非万不得已,否则不要尝试发送消息,然后捕获错误订阅的错误响应。
这个问题有一个很好的答案,这里有更多细节: