从 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/