我想使用 Firebase 云消息在扩展中显示推送通知。
我按照官方文档成功获得了许可,但我无法使用messaging.getToken()
获取Firebase令牌。该方法返回一个承诺,但既未解析,也不给出错误。
当我直接在控制台中调用它时,我得到的只是一个具有Pending
状态的Promise
对象。
我搜索了很多问题,但没有适用于我的解决方案。
这是我用background.js
编写的初始化代码:
var config = {
apiKey: "BWgeK.................MKfP",
authDomain: "****-*****-******.firebaseapp.com",
databaseURL: "https://****-*****-******.firebaseio.com",
projectId: "****-*****-******",
storageBucket: "****-*****-******.appspot.com",
messagingSenderId: "************"
};
firebase.initializeApp(config);
const messaging = firebase.messaging();
messaging.usePublicVapidKey("******");
messaging.requestPermission()
.then(function() {
//It is printing
console.log("=== have permission ===");
return messaging.getToken();
})
.then(function(currentToken) {
//It is not printing
console.log("== f_token ==", currentToken);
})
.catch(function(err) {
console.log("==== error ====", err);
});
这是manifest.json
文件:
{
"manifest_version": 2,
"name": "Chrome Plugin",
"description": "Chrome Plugin",
"version": "1.0.0.1",
"icons": {
"128": "images/small-logo.png"
},
"browser_action": {
"default_icon": "images/small-logo.png",
"default_popup": "index.html"
},
"background": {
"scripts": ["lib/jquery-3.2.1.min.js","lib/firebase.js", "lib/firebase-app.js","lib/firebase-auth.js", "lib/firebase-messaging.js", "firebase-messaging-sw.js", "src/background.js"],
"persistent": true
},
"content_scripts": [
{
"matches": ["https://google.com/*"],
"js": ["lib/jquery-3.2.1.min.js", "src/content.js"],
"css": ["css/dialog.css"],
"run_at": "document_end"
}],
"permissions": ["identity", "tabs", "storage", "notifications", "webRequest", "webRequestBlocking", "<all_urls>", "unlimitedStorage"],
"content_security_policy": "script-src 'self' https://www.gstatic.com/ https://*.firebaseio.com https://www.googleapis.com; object-src 'self'",
"web_accessible_resources": [
"css/dialog.css", "css/popup.css", "images/small-logo.png",
"lib/jquery-3.2.1.min.js", "lib/firebase.js", "lib/firebase-messaging.js", "lib/firebase-app.js", "lib/firebase-auth.js",
"src/main.js", "src/content.js", "firebase-messaging-sw.js"],
"oauth2": {
"client_id": "*******.apps.googleusercontent.com",
"scopes": ["*******"]
},
"gcm_sender_id": "103953800507"
}
输出:
=== have permission ===
在后台控制台中messaging.getToken()
的结果:
Promise {[[PromiseStatus]]: "pending", [[PromiseValue]]: undefined}
我怎样才能让它工作?
我关注了Firebase Google Group上的一个帖子,并能够获得Firebase令牌。
解决方案 1:将谷歌浏览器更新到版本 69。
解决方案 2:将扩展程序 ID (chrome-extension://extensionID( 添加到 Chrome 设置中允许的通知列表中。
这两种解决方案都对我有用,但我会选择解决方案 1。