我从html页面(而不是服务工作者(调用firebase.messaging()
时遇到一个毫无意义的错误。
消息:请确保在中正确设置了"messagingSenderId"传递到firebase.initializeApp((中的选项。(消息/发件人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:名为"[DEFAULT]"的Firebase应用程序已存在(应用程序/重复应用程序(。
我想我应该能够重复调用initializeApp
(在每一页上(,如果需要的话,它会注册服务工作者。。。
有人能帮我弄清楚发生了什么事吗?
哦,傻我…
我用一个(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
(