更改Service Worker后Firebase getToken不工作



对于Firebase 9.5.0推送通知,我们有一个服务工作者接收Firebase推送,服务工作者都工作得很好。

然而,我们正在从旧的服务工作者注册(从第三方(迁移到我们自己的注册,全新的用户都可以很好地注册和获得令牌,但当我们想为现有的注册用户(使用来自第三方的旧服务工作者(使用新的服务工作者时,我们会遇到错误。

错误发生在getToken上,导致错误


FirebaseError: Messaging: A problem occurred while subscribing the user to FCM: 
Request is missing required authentication credential. 
Expected OAuth 2 access token, login cookie or other valid authentication credential.

我希望我们可以在catch中添加一些代码来做一些事情,比如重新注册用户之类的,但通过firebase文档,我找不到任何东西。我们如何在没有错误的情况下向自己注册用户?

import { initializeApp } from "https://www.gstatic.com/firebasejs/9.5.0/firebase-app.js";
import { deleteToken, getMessaging, getToken, isSupported, onMessage  } from "https://www.gstatic.com/firebasejs/9.5.0/firebase-messaging.js";

const firebaseConfig = { 
apiKey: ...
authDomain: ...
projectId: ...
storageBucket: ...
messageSenderId: ...
appId: ...
measurementId: ...
};
const firebaseApp = initializeApp(firebaseConfig);
const messaging = getMessaging(firebaseApp);
const registerServiceWorker = () => {
if ('serviceWorker' in navigator) {
navigator.serviceWorker.register('serviceworkerfilename.js')
.then( function( registration) {
console.log('reg successful', registration); // gets here ok

getToken( messaging, { serviceWorkerRegistration: registration } )
.then(function(currentToken) {
// do stuff, this normally works for a new user, but not on old service worker
})
.catch( function(err) {
// always gets here for old user from old service worker
Notification.requestPermission().then(function(permission) {
console.log(permission); // gets here, and shows 'granted', but stuck from here what we can do to reset the user
});
});
})
}
}

所以我首先绕过了这个问题,用文件名检查服务人员是否有

navigator.serviceWorker.controller.scriptURL.match(<someregex>)

然后,如果需要,请注销现有的服务工作者。。。

navigator.serviceWorker.getRegistrations()
.then( function(registrations) { 
for(let registration of registrations) { 
registration.unregister(); 
} 
});

然后,如果需要,调用一个函数重新注册。

相关内容

  • 没有找到相关文章

最新更新