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. 
});