2016-11-07 276 views
7

我正在使用FCM對瀏覽器推送通知進行原型開發。我剛剛從快速入門(https://github.com/firebase/quickstart-js/tree/master/messaging)複製了示例代碼。消息收到並顯示它們應該。但是當我嘗試修改Service Worker(messaging.setBackgroundMessageHandler)中的消息時,沒有任何反應。服務工作者被調用,如果我在該服務工作者中爲推送通知實現了一個事件監聽器,它會捕獲該事件。但setBackgroundMessageHandler方法永遠不會被調用。 我試着在Chrome 54上試試這個。firebase雲消息傳遞:setBackgroundMessageHandler未調用

任何想法我需要做些什麼來定製服務工作者的消息?

非常感謝!

回答

1

當您嘗試發送推送消息時,是否在應用程序處於焦點狀態時執行此操作?因爲從文檔中可以看出,setBackgroundMessageHandler僅在Web應用程序關閉時才被調用,或者不在瀏覽器焦點中調用。

基於快速入門示例代碼(https://github.com/firebase/quickstart-js/tree/master/messaging)。

如果您的應用程序是重點:通過messaging.onMessage()收到的index.html的推送消息
如果您的應用程序沒有焦點:通過setBackgroundMessageHandler()收到的德服務人員推送消息文件。

+0

對不起。忘了提及這一點:關注焦點它運作良好,onMessage方法被調用,我可以做我想要的消息。當頁面沒有焦點時,會顯示通知,但我無法在setBackgroundMessageHandler方法中自定義它,因爲它從不會被調用。 – Mathias

22

對於任何人遇到同樣的問題,這裏就是答案:https://github.com/firebase/quickstart-js/issues/71

簡短總結:不要在你的JSON消息的「通知」元素。

+0

這救了我的命。我真的會'瘋子'試圖理解爲什麼我的處理程序沒有被調用。 –

+0

同樣在這裏,謝謝! –

+0

非常有幫助。謝謝:) –

0

這是一個在webapp中爲我工作的解決方案。它顯示帶有標題和正文文字的圖像並處理用戶點擊。

火力的消息-sw.js

importScripts('https://www.gstatic.com/firebasejs/4.8.1/firebase-app.js'); 
importScripts('https://www.gstatic.com/firebasejs/4.8.1/firebase-messaging.js'); 

// Initialize Firebase 
var config = { 
    apiKey: "YOUR_API_KEY", 
    authDomain: "YOUR_AUTH_DOMAIN", 
    databaseURL: "YOUR_DB_URL", 
    projectId: "YOUR_PROJ_ID", 
    storageBucket: "YOUR_STORAGE_BUCKET", 
    messagingSenderId: "YOUR_SENDER_ID" 
}; 
firebase.initializeApp(config); 
const messaging = firebase.messaging(); 
messaging.setBackgroundMessageHandler(function (payload) { 
    console.log('Handling background message ', payload); 

    return self.registration.showNotification(payload.data.title, { 
    body: payload.data.body, 
    icon: payload.data.icon, 
    tag: payload.data.tag, 
    data: payload.data.link 
    }); 
}); 

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

JSON消息

{ 
"message": { 
    "token": "YOUR_TARGET_APP_TOKEN", 
    "data": { 
     "title": "FCM Message", 
     "body": "This is an FCM Message", 
     "icon": "https://shortcut-test2.s3.amazonaws.com/uploads/role_image/attachment/10461/thumb_image.jpg", 
     "link": "https://yourapp.com/somewhere" 
    } 
} 

}