4

我正在使用最近发布的FCM messaging支持chrome上的推送通知。当我的应用程序在后台时,我收到通知,但单击通知时没有任何反应。如何指定当用户单击通知时应打开的URL? (我的理解它是如何使用纯粹的服务理念工人使用notificationclick事件做了,我想知道如何在使用FCM messaging做)。FCM:无法单击通知

messaging.setBackgroundMessageHandler(function(payload) { 
    var data = payload || {}; 
    var shinyData = decoder.run(data); 

    console.log('[firebase-messaging-sw.js] Received background message ', shinyData); 

    return self.registration.showNotification(shinyData.title, { 
    body: shinyData.body, 
    icon: shinyData.icon 
    }) 
}); 

缺少什么我在这里?

回答

5

click_action不是showNotification函数的可能参数之一。

要处理通知的点击,请定义一个notificationclick事件处理程序。

例如:

self.addEventListener('notificationclick', function(event) { 
    event.notification.close(); 
    event.waitUntil(self.clients.openWindow(YOUR_URL_HERE)); 
}); 
+0

我更新了我的问题,使之更加清晰。我明白如何使用notificationClick事件来做到这一点,但我不知道如何使用firebase消息库来实现这一点。对困惑感到抱歉。 – Vibgy

+0

我正在努力应对这种反应......在这种情况下,“自我”指的是什么?是通知,服务人员注册还是其他一些对象? – jcaruso

+0

要回答我以前的评论,'self.addEventListener'应该在注册服务工作者时提供的脚本中。它不适合我的原因是因为我的脚本被缓存了。我需要注销我的服务人员,确保脚本不再被缓存,然后重新注册服务人员。 – jcaruso

2

马可的答案是正确的。

Firebase消息传送库是Web推送API的封装。

notification: { click_action: 'https://...' }有效负载将显示通知并处理您的点击。为了达到与数据负载相同的效果,您应该实现notificationclick事件监听器(如Marco建议的那样)。

self.addEventListener('notificationclick', function(event) { 
    event.notification.close(); 

    ... Do your stuff here. 
}); 

你也可以做同样的与notificationclose事件:

self.addEventListener('notificationclose', function(event) { 
    ... Do your stuff here. 
});