16

Tôi đang cố sử dụng tính năng nhắn tin Firebase (web). Firebase theo tìm kiếm mặc định cho tệp "firebase-messaging-sw.js" chứa nhân viên dịch vụ.Firebase: thay đổi vị trí của nhân viên dịch vụ

Kịch bản công nhân dịch vụ dự kiến ​​sẽ nằm trên đường dẫn tuyệt đối của ứng dụng! Ví dụ: http://localhost/firebase-messaging-sw.js

Cách thay đổi vị trí mặc định này ?! Tìm kiếm các tài liệu chính thức mà tôi đã tìm thấy phương thức này: useServiceWorker chấp nhận đăng ký nhân viên dịch vụ, nhưng cố gắng sử dụng nó tôi nhận được lỗi rằng phương pháp thậm chí không tồn tại!

Vì vậy, Làm cách nào để thay đổi vị trí của nhân viên dịch vụ cho nhắn tin Firebase?

Trả lời

28

Như Michael đã gọi, phương pháp sử dụng là userServiceWorker(<registration>).

https://firebase.google.com/docs/reference/js/firebase.messaging.Messaging#useServiceWorker

Lớp Tin nhắn là những gì được trả lại khi bạn gọi firebase.message().

Vì vậy, mẫu sẽ là:

navigator.serviceWorker.register('./example/sw.js') 
.then((registration) => { 
    messaging.useServiceWorker(registration); 

    // Request permission and get token..... 
}); 

Tôi chỉ cố gắng này trên ứng dụng bản demo trên Github mà không vấn đề: https://github.com/firebase/quickstart-js/tree/master/messaging

6

Bạn có thể thực hiện firebase.messaging().useServiceWorker(registration) và chuyển vào đăng ký nhân viên dịch vụ hiện có. Lưu ý rằng bạn nên thực hiện việc này càng sớm càng tốt, trước khi có bất kỳ cuộc gọi nào, ví dụ: getToken() hoặc onMessage().

+0

Vâng, chắc chắn. Nhưng cố gắng này tôi nhận được 'phương pháp không tồn tại'! – Dewan159

+0

Điều này làm việc cho tôi - bạn có chắc chắn rằng bạn đã làm 'firebase.messaging(). UseServiceWorker()' và không phải 'firebase.messaging.useServiceWorker()'? –

+0

Cũng lưu ý rằng API này đã được thêm vào trong phiên bản 3.5.0 của thư viện, vì vậy hãy đảm bảo bạn đã cập nhật lên ít nhất phiên bản đó. – jwngr

0

Bằng cách sử dụng useServiceWorker(registration) bạn có thể sử dụng notificationonclick sự kiện trên tin nhắn push căn cứ hỏa lực thông qua dịch vụ thoát công nhân.

firebase.messaging().useServiceWorker(registration) đang làm việc và giải quyết vấn đề của tôi, nhưng hãy nhớ rằng tôi không biết nếu:

  • đây là một cách an toàn để có được tải trọng từ máy chủ.

  • đây là cách tốt nhất để xử lý thông báo đẩy.

+0

Đây có phải là câu trả lời cho câu hỏi hoặc bạn có tự đặt câu hỏi (các dấu đầu dòng) không? –

+0

Điểm bullet là các truy vấn của tôi, tôi không có ý tưởng về bảo mật và hiệu suất trong khi sử dụng Nhắn tin Firebase với nhân viên dịch vụ. Vì câu hỏi này liên quan đến chủ đề này, tôi sẽ không tạo ra câu hỏi riêng. –

+0

Tôi đã chỉnh sửa từ ngữ trong câu trả lời của bạn, vì vậy các điểm bullet của bạn bây giờ là cân nhắc cho những người dùng khác (thay vì câu hỏi). Câu trả lời của bạn là một bổ sung tốt cho câu hỏi này, cảm ơn! –

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