从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
,并且如果需要的话,它将注册服务工作者...
有人可以帮我弄清楚发生了什么事吗?
答案 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
)