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

时间:2018-07-11 20:27:21

标签: javascript django firebase firebase-cloud-messaging

从html页面(不是服务工作者)调用firebase.messaging()时出现错误,这是没有意义的。

  

消息传递:请确保在以下位置正确设置了“ messagingSenderId”   选项传递到firebase.initializeApp()中。   (邮件/错误的发件人ID)。

使用正确的messagingSenderId<script>中的<head>中初始化了该应用。默认应用程序显示在控制台日志中:

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.initializeApp中没有任何应用程序,我之所以只调用firebase.apps是因为当我不首先执行此检查就调用firebase.initializeApp时会收到以下错误:

  

Firebase:名为“ [DEFAULT]”的Firebase应用已存在   (应用程序/重复应用程序)。

我认为我应该能够(在每个页面上)反复调用initializeApp,并且如果需要的话,它将注册服务工作者...

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

1 个答案:

答案 0 :(得分:0)

哦,愚蠢的我...

我用(django)模板标记和错误引用的上下文变量填充了config变量。我是这样做的:

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