簡體   English   中英

Chrome擴展程序中Firebase Cloud Messaging的getToken()待處理

[英]Firebase Cloud Messaging's getToken() pending in Chrome Extension

我想使用Firebase Cloud Messaging在擴展中顯示推送通知。

我遵循了官方文檔並成功獲得了許可,但是我無法使用messaging.getToken()獲得Firebase令牌。 該方法返回一個promise,但既不解決也不給出錯誤。

當我直接在控制台中調用它時,我得到的只是一個狀態為PendingPromise對象。

我搜索了許多問題,但沒有適用於我的解決方案。

這是我在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。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM