Chrome扩展程序中的FCM-getToken()为空

时间:2018-09-05 11:21:45

标签: javascript firebase google-chrome-extension firebase-cloud-messaging

我正在开发一个chrome扩展程序,该扩展程序应该能够接收FCM消息。要获取我的FCM令牌,我使用以下代码

messaging.requestPermission().then(function(permission) {
    messaging.getToken().then(function(current_token) {
        if(current_token) {
            //update user token
            console.log('token', current_token);
        } else {
            // you don't have permission to show notifications
            // detect whether they are blocked or not, then show your custom UI
        }
    }).catch(function(err) {
        // retrieving token failed, analyze the error
        console.error('retrieving token failed, analyze the error', err);
    });
}

但是问题是我得到的permission的类型未定义,然后我没有从getToken()得到任何结果,没有空令牌,没有错误,没什么。

2 个答案:

答案 0 :(得分:0)

好的,感谢@ Mr.Rebot的评论,我发现这很可能是Chrome漏洞,解决方法是在Chrome Notification Settings中手动将扩展名列入白名单。您的扩展程序链接看起来像chrome-extension://<extension-id>/

答案 1 :(得分:0)

要获取令牌,有两件事要做:

  1. 在项目根目录中创建空的firebase-messaging-sw.js,并将其作为后台脚本包含在manifest.json中。例如,我这样做:
"background": {
    "scripts": [
        "js/firebase-app.js",
        "js/firebase-messaging.js",
        "firebase-messaging-sw.js",
        "js/background.js"
    ],
    "persistent": false
}
  1. 现在在manifest.json中添加"notifications"权限。我的样子:
"permissions": [
    "storage",
    "tabs",
    "notifications"
]

现在,messaging.getToken()(在background.js中)即使不使用messaging.requestPermission()也可以正常工作。