Firebase: change the location of the service worker

假装没事ソ 提交于 2019-12-17 07:26:39

问题


I am trying to use Firebase messaging (web). Firebase by default searches for the file "firebase-messaging-sw.js" which holds the service worker.

The service worker script is expected to be on the absolute path of the application! For example : http://localhost/firebase-messaging-sw.js

How to change this default location?! Searching the official docs I found this method: useServiceWorker which accepts a service worker registeration, but trying to use it I get an error that the method doesn't even exist!

So, How to change the location of the service worker for firebase messaging?


回答1:


As Michael has called out, the method to use is useServiceWorker(<registration>).

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

The Messaging class is what is returned when you callfirebase.message().

So the sample would be:

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

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

I just tried this on the demo app on Github without issue: https://github.com/firebase/quickstart-js/tree/master/messaging




回答2:


You should be able to do firebase.messaging().useServiceWorker(registration) and pass in an existing service worker registration. Note that you should do this as early as possible, before any calls to e.g. getToken() or onMessage().




回答3:


By using useServiceWorker(registration) you can use notificationonclick event on Firebase push messaging via exiting service worker.

firebase.messaging().useServiceWorker(registration) is working and solved my problem, but keep in mind that I don't know if:

  • this is a secure way to get payload from the server.

  • this is the best way to handle push notifications.



来源:https://stackoverflow.com/questions/41659970/firebase-change-the-location-of-the-service-worker

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!