簡體   English   中英

FCM服務工作者setBackgroundMessageHandler

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM