Firebase 消息传递错误:在获取令牌之前使用服务工作者

Has*_*Ajk 6 javascript firebase firebase-cloud-messaging

我正在尝试将 FCM 与 angularjs 一起使用,因此在初始化 firebase 后,我编写了以下代码:

messaging = firebase.messaging();
$window.navigator.serviceWorker.register($rootScope.app.base_url + '/app/lib/firebaseCustomWorker.js')
.then(function(registration) {
    messaging.useServiceWorker(registration);
    messaging.requestPermission().then(function(){  
    messaging.getToken()
    .then(function(currentToken) {
        console.log(currentToken);
    })
    .catch(function(err) {
        console.log('An error occurred while retrieving token. ', err);
    });
}).catch(function(err){console.log(err)});
Run Code Online (Sandbox Code Playgroud)

问题是最后一行有时会捕获出现在控制台中的错误,其中包含以下代码"messaging/use-sw-before-get-token"和消息:

FirebaseError: Messaging: 您必须在调用 getToken() 之前调用 useServiceWorker() 以确保使用您的 Service Worker。(消息/使用-sw-before-get-token)。

正如你可以在上面的代码中看到,我只能打电话getToken()叫后useServiceWorker()和后requestPermission()

我firebase-messaging.js在第 35 行挖掘了原始文件,但不幸的是没有得到任何关于为什么会发生这种情况的线索

Has*_*Ajk 2

我知道这可能很疯狂并且会适得其反,但它确实有效。

 .
 .
 .
 if('undefined' !== typeof messaging.b )
      delete(messaging.b);
 messaging.useServiceWorker(registration);
 .
 .
 .
Run Code Online (Sandbox Code Playgroud)

受到阅读 firebase-messaging.js 的启发