【发布时间】:2018-04-18 11:59:12
【问题描述】:
我遇到了一个奇怪的问题,似乎找不到任何解决方案。我为用户订阅我的网络推送服务,当他们收到通知时,我会跟踪通知显示的时间,如果它被点击或关闭。但是,当我发送带有需要交互标志或持久标志的通知并将其打开大约 1 分钟时,它会被禁用。
我所说的禁用是什么意思:
- 不能点击按钮
- 无法自行点击通知
- 只能点击X关闭它
然后当用户关闭通知或系统关闭它时,我的服务人员不会注册关闭事件。
我在 Firefox 上遇到的问题之一是,当用户点击通知时,它只关注 Firefox 中的空选项卡。
这是我的服务工作者代码:
self.addEventListener('push', function(event) {
console.log('[Service Worker] Push Received.');
data = event.data.json();
const title = data.title;
const options = data.options;
event.waitUntil(
self.registration.showNotification(title, options)
.then((notificationEvent)=>{
let payload = {
campaign_id: data.campaign_id,
subscriber_id:data.subscriber_id,
action:'display'
}
sendData(api_url+'touch',payload,'display');
})
);
});
self.addEventListener('notificationclick',function(event){
if(data.url){
console.log('Notification clicked !');
const clickedNotification = event.notification;
let promiseChain = null;
clickedNotification.close();
let payload = {
campaign_id: data.campaign_id,
subscriber_id:data.subscriber_id,
action:'click'
}
if(event.action === 'button1Link')
{
promiseChain = clients.openWindow(data.button1Link);
}else if(event.action === 'button2Link')
{
promiseChain = clients.openWindow(data.button2Link);
}else if(event.action === 'button3Link')
{
promiseChain = clients.openWindow(data.button3Link);
}else if(event.action === 'closeButton')
{
payload.action = 'close';
}else
{
promiseChain = clients.openWindow(data.url);
}
sendData(api_url+'touch',payload).then(()=>console.log('Stat
sent!'));
event.waitUntil(promiseChain);
}
})
self.addEventListener('notificationclose',function(event){
console.log('Notification closed !');
let payload = {
campaign_id: data.campaign_id,
subscriber_id:data.subscriber_id,
action:'close'
}
event.waitUntil(sendData(api_url+'touch',payload,'close'));
})
function sendData(url,payload)
{
let data = new FormData();
Object.keys(payload).map((field)=>{
data.append(field,payload[field]);
});
return fetch(api_url+'touch', {
method: 'POST',
body: data,
mode:'cors'
});
}
我真的可以使用一些建议和帮助,因为我在整个网络上查找了发生这种情况的原因,但似乎找不到任何有用的东西。
我的有效载荷结构如下所示:
array(7) {
["title"]=>
string(25) "Noise reducing headphones"
["url"]=>
string(76) "https://www.bestbuy.com/site/audio/headphones/abcat0204000.c?id=abcat0204000"
["campaign_id"]=>
string(2) "49"
["button1Link"]=>
string(120) "https://cdn.iconscout.com/public/images/icon/premium/png-512/headphones-phones-music-player-3b0242ebbd8df45e-512x512.png"
["button2Link"]=>
string(120) "https://cdn.iconscout.com/public/images/icon/premium/png-512/headphones-phones-music-player-3b0242ebbd8df45e-512x512.png"
["button3Link"]=>
string(120) "https://cdn.iconscout.com/public/images/icon/premium/png-512/headphones-phones-music-player-3b0242ebbd8df45e-512x512.png"
["options"]=>
array(7) {
["actions"]=>
array(3) {
[0]=>
array(2) {
["action"]=>
string(11) "button1Link"
["title"]=>
string(5) "Order"
}
[1]=>
array(2) {
["action"]=>
string(11) "button2Link"
["title"]=>
string(6) "Cancel"
}
[2]=>
array(2) {
["action"]=>
string(11) "button3Link"
["title"]=>
string(17) "Order on facebook"
}
}
["body"]=>
string(40) "Listen to your music without disturbance"
["image"]=>
string(56) "campaignimg1.jpg"
["icon"]=>
string(53) "image2.png"
["vibrate"]=>
array(1) {
[0]=>
string(0) ""
}
["silent"]=>
bool(false)
["requireInteraction"]=>
bool(false)
}
}
【问题讨论】:
标签: google-chrome firefox push-notification notifications service-worker