Javascript Firebase:更改服务人员的位置

Javascript Firebase:更改服务人员的位置,javascript,firebase,firebase-cloud-messaging,service-worker,Javascript,Firebase,Firebase Cloud Messaging,Service Worker,我正在尝试使用Firebase消息传递(web)。默认情况下,Firebase会搜索包含服务工作者的文件“Firebase messaging sw.js” 服务工作者脚本应位于应用程序的绝对路径上!例如: 如何更改此默认位置?!在搜索官方文档时,我发现了以下方法:useServiceWorker,它接受服务人员注册,但尝试使用它时,我得到一个错误,该方法甚至不存在 那么,如何为firebase消息更改服务工作者的位置 您应该能够执行firebase.messaging().useService

我正在尝试使用Firebase消息传递(web)。默认情况下,Firebase会搜索包含服务工作者的文件“Firebase messaging sw.js”

服务工作者脚本应位于应用程序的绝对路径上!例如:

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


那么,如何为firebase消息更改服务工作者的位置

您应该能够执行
firebase.messaging().useServiceWorker(注册)
并传入现有的服务人员注册。请注意,在调用例如
getToken()
onMessage()

之前,您应该尽早执行此操作。正如Michael所说,要使用的方法是
useServiceWorker()

消息传递类是调用
firebase.message()
时返回的类

因此,样本为:

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

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

我刚刚在Github上的演示应用程序上尝试了这一点,没有问题:

通过使用
useServiceWorker(注册)
您可以通过退出service worker在Firebase推送消息上使用
notificationonclick
事件

firebase.messaging().useServiceWorker(注册)
正在工作并解决了我的问题,但请记住,我不知道是否:

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

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


我知道这是一个老问题,但由于
useServiceWorker
现在已被弃用,因此最好提一提,您可以将服务人员直接传递给
getToken
。当前

const registration=wait navigator.serviceworner.ready;
const messaging=firebase.messaging();
const token=wait messaging.getToken({
serviceWorkerRegistration:注册,
vapidKey:“,
});

当然可以。但是尝试这个我得到的
方法并不存在
!这对我很有用--你确定你做了
firebase.messaging().useServiceWorker()
而不是
firebase.messaging.useServiceWorker()
?还要注意,这个API是在库的3.5.0版本中添加的,所以请确保你至少更新到了那个版本。@MichaelBleigh,我在quickstart应用程序中按照上面的说明进行了操作,但仍然收到TypeError:无法使用脚本(')为作用域(')注册ServiceWorker:获取脚本错误时收到错误的HTTP响应代码(404)。仍然是firebsace仅查看此位置。这是问题的答案还是您自己在问问题(要点)?要点是我的问题,我不知道与服务人员使用Firebase消息时的安全性和性能。由于此问题与此主题相关,我不会单独创建问题。我已编辑了您答案中的措辞,因此您的要点现在是其他用户的考虑事项(而不是问题)。你的回答是对这个问题的一个很好的补充,谢谢!