Javascript Angular 2和FireBase messagning-无法注册
我正在开发Angular 2 web应用程序,希望注册Firebase消息并获取令牌 我正在使用angularfire2作为angularfire2。我使用Angular ng服务于本地开发环境。 不幸的是,浏览器控制台显示以下错误: 五 浏览器错误消息 : “注册ServiceWorker失败:获取脚本时收到错误的HTTP响应代码(404)。” 代码 : “消息传递/serviceworker注册失败” 消息 : “消息:我们无法注册默认的服务工作者。注册服务工作者失败:获取脚本时收到错误的HTTP响应代码(404)。(消息/服务工作者注册失败)。” 堆栈 : “FirebaseError:消息传递:我们无法注册默认的服务工作者。注册ServiceWorker失败:获取脚本时收到错误的HTTP响应代码(404)。(消息传递/ServiceWorker注册失败)。↵ 在↵ 在ZoneDelegate.invoke()处↵ 在Object.onInvoke()处↵ 在ZoneDelegate.invoke()处↵ 在Zone.run()处↵ 在↵ 在ZoneDelegate.invokeTask()上↵ 在Object.onInvokeTask()处↵ 在ZoneDelegate.invokeTask()上↵ 在Zone.runTask()处↵ 在drainMicroTaskQueue()上 proto : 错误 下面是我的服务代码。Javascript Angular 2和FireBase messagning-无法注册,javascript,rest,angular,web,Javascript,Rest,Angular,Web,我正在开发Angular 2 web应用程序,希望注册Firebase消息并获取令牌 我正在使用angularfire2作为angularfire2。我使用Angular ng服务于本地开发环境。 不幸的是,浏览器控制台显示以下错误: 五 浏览器错误消息 : “注册ServiceWorker失败:获取脚本时收到错误的HTTP响应代码(404)。” 代码 : “消息传递/serviceworker注册失败” 消息 : “消息:我们无法注册默认的服务工作者。注册服务工作者失败:获取脚本时收到错误的H
从“@angular/core”导入{Inject,Injectable}”;
从“angularfire2”导入{FirebaseApp};
从“firebase”导入*作为firebase;
@可注射()
导出类FirebaseMessagingService{
私人消息:firebase.messaging.messaging;
构造函数(@Inject(FirebaseApp)私有FirebaseApp:firebase.app.app){
log(“FirebaseMessagingService初始化…”);
this.messaging=firebase.messaging(this.firebaseApp);
}
init(){
this.messaging.requestPermission()
.然后(()=>{
这个。onfirebeinitialized();
})
.catch((错误)=>{
log(“FirebaseMessagingService请求权限错误:+错误”);
});
}
私有化{
log(“FirebaseMessagingService已初始化”);
/*this.messaging.setBackgroundMessageHandler(message=>{
})*/
这个。getToken();
//更新实例ID令牌时触发回调。
this.messaging.onTokenRefresh(()=>{
这个。getToken();
});
this.messaging.onMessage((有效负载)=>{
console.log(“收到消息”,有效载荷);
// ...
});
}
getToken(){
this.messaging.getToken()
。然后((currentToken)=>{
log('getToken()已接收');
如果(当前令牌){
this.sendTokenToServer(currentToken);
此.updateUIForPushEnabled(currentToken);
}否则{
//显示权限请求。
log('没有可用的实例ID令牌。请求生成一个令牌的权限');
//显示权限界面。
此.updateUIForPushPermissionRequired();
this.setTokenSentToServer(false);
}
})
.catch(函数(err){
console.log('检索令牌时出错',err);
//this.showToken('检索实例ID令牌时出错',err);
//this.setTokenSentToServer(false);
});
}
sendTokenToServer(令牌){
}
updateUIForPushEnabled(令牌){
}
updateUIForPushPermissionRequired(){
}
setTokenSentToServer(isSent:boolean){
}
}
您需要注册一名服务人员:
<link rel="manifest" href="/manifest.json">
<script>
if ('serviceWorker' in navigator) {
navigator.serviceWorker.register('/firebase-messaging-sw.js').then(function(registration) {
// Registration was successful
console.log('ServiceWorker registration successful with scope: ', registration.scope);
}).catch(function(err) {
// registration failed :(
console.log('ServiceWorker registration failed: ', err);
});
}
</script>
if(导航器中的“serviceWorker”){
navigator.serviceWorker.register('/firebase messaging sw.js')。然后(函数(注册){
//注册成功
console.log('ServiceWorker注册成功,作用域:',registration.scope);
}).catch(函数(err){
//注册失败:(
console.log('ServiceWorker注册失败:',错误);
});
}
firebase.messaging(firebaseApp.getToken()的响应
尝试在应用程序选项卡下的开发工具中打开Service worker部分,注销应用程序的Service worker,然后重新加载。在Firefox上不应该出现问题。编译的应用程序代码中很可能缺少firebase-messaging-sw.js:
- 确保src文件夹中有一个名为firebase-messaging-sw.js的文件。可以是空文件
- 如果使用angular cli修改.angular-cli.json文件的内容,以在编译代码中包含firebase-messaging-sw.js,请确保在运行应用程序时可以从'/'提供此文件:
您必须在www dir中添加
firebase messaging sw.js
,因为页面会查找http://localhost/firebase-messaging-sw.js
而不是我们的项目目录
// ..... .angular-cli.json
"apps": [{
"root": "src",
"outDir": "dist",
"assets": [
"assets",
"favicon.ico",
"firebase-messaging-sw.js" // this will copy this file in the root path of the compilation folder
],
// ..... more config options