2016-11-07 25 views
7

Tôi đang tạo mẫu thông báo đẩy trình duyệt bằng FCM. Tôi vừa sao chép mã mẫu từ quickstart (https://github.com/firebase/quickstart-js/tree/master/messaging). Tin nhắn được nhận và hiển thị như chúng cần. Nhưng khi tôi cố gắng sửa đổi thông báo trong Service Worker (message.setBackgroundMessageHandler) thì không có gì xảy ra. Nhân viên dịch vụ được gọi và nếu tôi triển khai trình xử lý sự kiện trong nhân viên dịch vụ đó cho các thông báo đẩy, nó sẽ bắt sự kiện. Nhưng phương thức setBackgroundMessageHandler không bao giờ được gọi. Tôi đang thử tính năng này trên Chrome 54.Nhắn tin qua đám mây firebase: setBackgroundMessageHandler không được gọi là

Bất kỳ ý tưởng nào tôi cần làm để tùy chỉnh thông báo trong nhân viên dịch vụ?

Cảm ơn bạn rất nhiều!

Trả lời

1

Khi bạn cố gắng gửi tin nhắn push, bạn có đang thực hiện khi ứng dụng của bạn đang tập trung hay không? Bởi vì từ tài liệu, nó nói rằng setBackgroundMessageHandler chỉ được gọi khi ứng dụng Web bị đóng hoặc không ở tiêu điểm trình duyệt.

Dựa trên mã mẫu từ quickstart (https://github.com/firebase/quickstart-js/tree/master/messaging).

Nếu ứng dụng của bạn đang được lấy nét: thông báo đẩy được nhận qua tin nhắn.onMessage() trên index.html
Nếu ứng dụng của bạn không tập trung: thông báo đẩy được nhận qua setBackgroundMessageHandler() trên nhân viên dịch vụ tập tin.

+0

Xin lỗi. Quên đề cập đến điều này: về tập trung nó hoạt động tốt và phương pháp onMessage được gọi và tôi có thể làm những gì tôi muốn với thông điệp. Khi trang không có tiêu điểm, thông báo được hiển thị nhưng tôi không thể tùy chỉnh nó trong phương thức setBackgroundMessageHandler vì nó không bao giờ được gọi. – Mathias

22

Đối với bất cứ ai trải qua cùng một vấn đề, đây là câu trả lời: https://github.com/firebase/quickstart-js/issues/71

tóm tắt ngắn gọn: không bao gồm một yếu tố "thông báo" trong thông điệp json của bạn.

+0

Điều này đã cứu mạng tôi. Tôi đã thực sự đi 'crazier' cố gắng hiểu tại sao người xử lý của tôi không được gọi. –

+0

Cùng ở đây, cảm ơn! –

+0

Rất hữu ích. Cảm ơn :) –

0

Đây là giải pháp phù hợp với tôi trong webapp. Nó hiển thị thông báo với tiêu đề và nội dung văn bản cùng với hình ảnh và xử lý nhấp chuột của người dùng.

căn cứ hỏa lực-tin nhắn-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 nhắn

{ 
"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" 
    } 
} 

}

Các vấn đề liên quan