Firebase 云消息传递 - 调用 firebase.messaging() 出错

3
我在从HTML页面(而不是服务工作者)调用firebase.messaging()时遇到了一个毫无意义的错误。

Messaging:请确保在传递给firebase.initializeApp()的选项中正确设置“messagingSenderId”。 (messaging / bad-sender-id)。

应用程序已在<head>更高处的<script>中正确初始化messagingSenderId。默认应用程序显示在控制台日志中:
function deviceRegistration() {
    console.log('in deviceRegistration()');
    console.log("firebase.apps:", firebase.apps);
    console.log("firebase.apps.length: ", firebase.apps.length);
    if (firebase.apps.length == 0) {
        // firebase.initializeApp({{ fcm_config.messagingSenderId }});
        firebase.initializeApp({"messagingSenderId": "1234567890"});
    }
    console.log("after initializeApp");  // prints to console
    var messaging = firebase.messaging();  // error happens here
    console.log("after firebase.messaging()");  // doesn't print to console

我只在 firebase.apps 中没有应用程序时才调用 firebase.initializeApp 的原因是,当我在没有进行此检查的情况下调用 firebase.initializeApp 时,会出现以下错误:

Firebase:Firebase 应用程序名为“[DEFAULT]”已存在(app/duplicate-app)。

我以为我能够反复地调用 initializeApp(在每个页面上)并且它会在必要时注册服务工作者...

有人可以帮我弄清楚发生了什么吗?

1个回答

0

哦,我真傻...

我用(django)模板标签和上下文变量填充了配置变量,但我引用错误。我这样做了:

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

当我打算做这个时:
var config = {
    apiKey: "{{ fcm_config.config.apiKey }}",
    authDomain: "{{ fcm_config.config.authDomain }}",
    databaseURL: "{{ fcm_config.config.databaseURL }}",
    projectId: "{{ fcm_config.config.projectId }}",
    storageBucket: "{{ fcm_config.config.storageBucket }}",
    messagingSenderId: "{{ fcm_config.config.messagingSenderId }}"
};
firebase.initializeApp(config);

所以 Firebase 对于一个错误的发送者 ID 抱怨是正确的,因为我传递了一个等效于以下内容的对象:

firebase.initializeApp({
    apiKey: "",
    authDomain: "",
    databaseURL: "",
    projectId: "",
    storageBucket: "",
    messagingSenderId: ""
});

现在那部分已经可以运行了,我接下来要解决下一个错误!

(如果你想知道为什么我把那些变量放在fcm_config.config.*中,看起来似乎有点多余,那是因为我还存储了fcm_config.VAPID)


2
这个答案帮助我意识到我将messagingSenderId设置为整数值,而实际上它需要被设置为字符串值。当我将其从整数改为字符串后,错误就消失了。唉! - tyler.frankenstein

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接