Firebase JS - getToken()不返回令牌

时间:2016-10-25 12:26:54

标签: javascript firebase-cloud-messaging

我有以下代码,基于Google's Documentation

var config = {
    apiKey: "XX",
    authDomain: "XX",
    databaseURL: "XX",
    storageBucket: "XX",
    messagingSenderId: "XX"
};
firebase.initializeApp(config);

const messaging = firebase.messaging();

messaging.requestPermission()
.then(function() {
    console.log('Notification permission granted.');
    messaging.getToken()
    .then(function(currentToken) {
        if (currentToken) {
            console.log(currentToken);
        } else {
            console.log('No Instance ID token available. Request permission to generate one.');
        }
    })
    .catch(function(err) {
        console.log('An error occurred while retrieving token. ', err);
    });
})
.catch(function(err) {
    console.log('Unable to get permission to notify. ', err);
});

奇怪的是,then的{​​{1}}函数从未被调用过。控制台确实显示messaging.getToken(),但在此之后,它会保持安静(即我也没有收到任何错误)。

我做错了吗?

编辑:请注意,我尝试在Chrome扩展程序中实现此功能。

5 个答案:

答案 0 :(得分:8)

我遇到同样的问题,我花了6个多小时来解决这个问题。您需要在主目录中创建虚拟" firebase-messaging-sw.js"(空文件)文件。

我的html页面位置为" http://localhost:56050/Notification/index.html "
我的 firebase-messaging-sw.js 是" http://localhost:56050/firebase-messaging-sw.js "

答案 1 :(得分:0)

每个人都有一个重要的注意事项。 您必须在本地服务器上运行它,如nginx或apache,并将firebase-messaging-sw.js文件放在我面前。 所以我在根文件夹中有 index.html firebase-messaging-sw.js文件。

答案 2 :(得分:0)

如果您不想在项目的根目录中配置firebase-messaging-sw.js,则可以使用useServiceworker方法。例如:

messaging.useServiceWorker('pathToYourSW');

答案 3 :(得分:0)

对我来说,提示是使用自生成的本地SSL证书在HTTPS上运行客户端和api。然后,我的getToken()开始解决。

甚至在文档中:

  

FCM SDK仅在通过HTTPS服务的页面中受支持。这个到期了   其使用服务工作者的方式,仅在HTTPS上可用   网站。

如果getToken()在这种情况下拒绝而不是永远吊死,将会很有帮助。

答案 4 :(得分:0)

在对“ firebase-messaging-sw.js ”脚本进行更改之后,我发现“ messaging.getToken()。then(function(currentToken){ / em>”将不会返回。

我进入了Chrome的“ 开发人员工具”->“ 应用程序”->“ 服务人员”(如下图所示) )和未注册旧服务人员。之后,“ messaging.getToken()。then(function(currentToken){”)返回正常。

我遇到的另一个问题是,我最初在一个域名上有两个 Firebase项目,由于SSL证书的限制,这是不允许的。

Stop and Unregister an existing Firebase Messaging Service Worker in Chrome's Developer Tools