Firebase:更改服务工作者的位置

时间:2017-01-15 10:11:28

标签: javascript firebase firebase-cloud-messaging service-worker

我正在尝试使用Firebase消息传递(Web)。 Firebase默认搜索保存服务工作者的文件“firebase-messaging-sw.js”。

服务工作者脚本应该位于应用程序的绝对路径上!例如:http://localhost/firebase-messaging-sw.js

如何更改此默认位置?!搜索官方文档我发现这个方法:useServiceWorker接受服务工作者注册,但尝试使用它我得到一个错误,该方法甚至不存在!

那么,如何更改服务工作者的位置以进行firebase消息传递?

4 个答案:

答案 0 :(得分:45)

正如Michael所说,使用的方法是useServiceWorker(<registration>)

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

Messaging类是您致电firebase.message()时返回的内容。

所以样本将是:

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

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

我刚刚在Github上的演示应用上尝试了这个问题,没有问题:https://github.com/firebase/quickstart-js/tree/master/messaging

答案 1 :(得分:8)

您应该能够firebase.messaging().useServiceWorker(registration)并传入现有的服务工作者注册。请注意,您应该在拨打电话之前尽早执行此操作。 getToken()onMessage()

答案 2 :(得分:5)

我知道这是一个老问题,但由于 useServiceWorker 现在已被弃用,值得一提的是您可以将 Service Worker 直接传递给 getToken。当前document

const registration = await navigator.serviceWorker.ready;

const messaging = firebase.messaging();

const token = await messaging.getToken({
            serviceWorkerRegistration: registration,
            vapidKey: "",
        });

答案 3 :(得分:0)

使用useServiceWorker(registration),您可以通过退出服务工作人员对Firebase推送消息传递使用notificationonclick事件。

firebase.messaging().useServiceWorker(registration)正在解决我的问题,但请记住,我不知道是否:

  • 这是从服务器获取有效负载的安全方式

  • 这是处理推送通知的最佳方式。