[英]FCM service worker setBackgroundMessageHandler
我嘗試使用FCM( Firebase雲消息傳遞 )進行Web推送通知。 當Web應用程序選項卡處於焦點時,我成功收到了一條消息。
但是當我關閉選項卡時,它應該調用服務工作者(這是FCM示例中firebase-messaging-sw.js
)。 但它根本沒有調用setBackgroundMessageHandler
。
const messaging = firebase.messaging();
messaging.setBackgroundMessageHandler(function(payload) {
console.log('[firebase-messaging-sw.js] Received background message ', payload);
const notificationTitle = 'Background Message Title';
const notificationOptions = {
body: 'Background Message body.',
icon: 'firebase-logo.png'
};
return self.registration.showNotification(notificationTitle,
notificationOptions);
});
在manifest.json
文件中包含以下內容: {"gcm_sender_id": "103953800507"}
此gcm_sender_id
對於所有fcm用戶都是唯一的,並非特定於您的項目。
在您的服務工作者代碼中添加您的項目特定發件人ID。 服務工作者代碼的工作示例在這里 。
當您的網站標簽未處於焦點/關閉狀態且瀏覽器處於打開狀態時,它應顯示背景通知。
我遇到了這個問題,我在這個鏈接中找到了一個解決方案: https : //github.com/firebase/quickstart-js/issues/71
基本上,問題是您發送的有效負載。 您需要使用“data”對象來調用setBackgroundMessageHandler(payload)函數。
例:
{
"to": "cyn88sDUyZs:APA91bE...",
"notification":
{
"title": "Title",
"body": "Body",
"icon": "https://abs.twimg.com/emoji/v2/72x72/2b50.png",
"click_action": "https://www.test.com/"
}
}
這不會調用setBackgroundMessageHandler(payload)函數,因為它不使用“data”對象,因此通知對象將采用並且其屬性將在推送消息上。 但是,如果使用“data”對象,將調用setBackgroundMessageHandler(payload)函數:
{
"to": "cyn88sDUyZs:APA91bE...",
"data":
{
"notification":
{
"title": "Title",
"body": "Body",
"icon": "https://abs.twimg.com/emoji/v2/72x72/2b50.png",
"click_action": "https://www.test.com/"
}
}
}
因此,在這種情況下,Service Worker將執行函數內部的操作。 此函數接收有效負載作為參數,然后您可以將有效負載屬性設置為推送消息,設置另一條消息或調用API來執行某些操作,例如。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.