2016-11-15 73 views
4

林试着让火力地堡FCM在我的阵营项目的工作(使用的WebPack)Firebase FCM React项目问题 - firebase-messaging-sw.js错误的类型?

当使用试图为gettoken():

messaging.requestPermission() 
    .then(function() { 
    console.log('Notification permission granted.'); 
    return messaging.getToken(); 
    }) 
    .then(function(token) { 
    console.log('token') 
    }) 
    .catch(function(err) { 
    console.log('Unable to get permission to notify.', err); 
    }); 

如下抛出异常:

browserErrorMessage: "Failed to register a ServiceWorker: The scrip 
has an unsupported MIME type ('text/html') 

我知道这个问题与缺少的服务工作者文件相关:firebase-messaging-sw.js,我将其添加到项目的根目录,但仍然收到相同的错误。

林不知道什么即时做错了什么,我已经设置了香草Java脚本项目,它工作正常....

有关此问题的任何想法?

回答

2

为了接收消息,您需要创建一个名为firebase-messaging-sw.js的文件。请参见Handle messages when your web app is in the foreground的火力地堡文档中:

为了获得在onMessage事件,您的应用程序必须在firebase-messaging-sw.js定义火力地堡消息服务工作者。

+0

在反应中,调用'firebase''导入Firebase时未处理服务?它看起来像firebase-messaging-sw.js导入我已经导入的东西....你能详细说明吗? – Sean

1

这里的问题是我的项目设置没有'看到'服务工作者文件。

由于我在Express中使用节点,因此firebase-messaging-sw.js必须放置在快速拾取静态内容的地方。在我的案例中:

server.use(Express.static(path.join(__dirname, '../..', 'dist'))); 

意味着我必须将firebase-messaging-sw.js放入/ dist文件夹。

+0

它也适用于我与create-react-app工具的反应。 只需将sw文件放入/ public –

3

对于使用create反应的应用程序内的,你一个创建公共文件夹中的火力点的消息,sw.js和上index.js补充:

if ('serviceWorker' in navigator) { 
    navigator.serviceWorker.register('../firebase-messaging-sw.js') 
    .then(function(registration) { 
    console.log('Registration successful, scope is:', registration.scope); 
    }).catch(function(err) { 
    console.log('Service worker registration failed, error:', err); 
    }); 
} 
0

我有完全相同的问题,因为在原来的问题,在过去的3天里我没有任何运气经历过各种解决方案。我正在使用ReactJS和Webpack。我试图在我的根文件夹中包含名为firebase-messaging-sw.js的文件,但它什么也不做。

有人,请大家帮忙,因为火力通知是在我开发的项目急需的功能...

编辑。

我设法通过安装名为sw-precache-webpack-plugin的webpack插件来解决注册问题。这个插件为你自动生成一个服务工作者文件到你的build目录中。

+0

这不会提供问题的答案。你可以[搜索类似的问题](// stackoverflow.com/search),或者参考页面右侧的相关和链接问题来找到答案。如果你有一个相关但不同的问题,请[提出一个新问题](// stackoverflow.com/questions/ask),并包含一个链接来帮助提供上下文。见:[问问题,得到答案,没有分心](// stackoverflow.com/tour) –

+0

我的不好,我只是想这个问题得到关注,得到一个可能的解决方案。我应该删除答案并将其添加为评论或其他内容吗? –

+0

这个帖子应该删除,是的。关注注意事项:最好的办法是[设置赏金](https://stackoverflow.com/help/privileges/set-bounties),但这需要75点声望。像这样的帖子和评论在这方面不太可能有帮助。 –