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

标签 javascript django firebase firebase-cloud-messaging

从 html 页面(不是 service worker)调用 firebase.messaging() 时出现错误,这毫无意义。

Messaging: Please ensure that 'messagingSenderId' is set correctly in the options passed into firebase.initializeApp(). (messaging/bad-sender-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: Firebase App named '[DEFAULT]' already exists (app/duplicate-app).

我认为我应该能够重复调用 initializeApp(在每个页面上)并且它会在必要时注册 service worker...

谁能帮我弄清楚这是怎么回事?

最佳答案

我真傻...

我使用错误引用的 (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)

关于javascript - Firebase 云消息传递 - 调用 firebase.messaging() 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51293720/

相关文章:

javascript - 删除文本后调整文本区域大小

django - 如何在我的 Django 表单上连接 WMD 编辑器?

python - Django fixtures 和 AttributeError : 'QuerySet' object has no attribute <custom_model_method>

firebase - 在 npm 上使用 firebase 部署时出错 --prefix $RESOURCE_DIR run lint

javascript - 将 html 对象保存到 firebase

javascript - 替换 JSFL 中的填充颜色

javascript - ReactJS componentDidMount、Fetch Spotify API 和 Promise

javascript - React hooks useState 不更新状态

python - 将 Django form.cleaned_data 存储在空模型字段中?

android - 手机授权库错误