缺少应用程序配置值:"projectId" 即使我正在传递它

Missing App configuration value: "projectId" even though I am passing it in

我可以正常发送、查看和点击网络通知,没有出现任何错误。但是,当我单击通知时,控制台会产生此信息

Uncaught FirebaseError: Messaging: Missing App configuration value: "projectId" (messaging/missing-app-config-values).

projectId 肯定会传递给配置

Chrome 版本:版本 79.0.3945.130(正式版)(64 位)

这是我配置 firebase 的方式:

var messaging;
if( firebase.messaging.isSupported() ){

    var config = {
      apiKey: "*************",
      authDomain: "*************",
      databaseURL: "*************",
      projectId: "*************",
      storageBucket: "*************",
      messagingSenderId: "*************",
      appId: "*************"
    };
    firebase.initializeApp(config);
    messaging = firebase.messaging();
    messaging.usePublicVapidKey("*************");
    messaging.onMessage(function(payload) {
        ...
        ...
    }
}

还有我的 firebase-messeging-sw.js:

self.addEventListener('notificationclick', function(event) {
    ...
    ...
}
importScripts('https://www.gstatic.com/firebasejs/7.8.2/firebase-app.js');
importScripts('https://www.gstatic.com/firebasejs/7.8.2/firebase-messaging.js');

firebase.initializeApp({'messagingSenderId': '***********'});

const messaging = firebase.messaging();

messaging.setBackgroundMessageHandler(function(payload) {
    ...
});

有什么想法吗?

您必须先调用 initializeApp() ,然后再 调用任何其他 Firebase API。您的代码在 initializeApp() 之前先调用 firebase.messaging.isSupported()。看起来您可能只想在 FCM 正常工作时初始化 Firebase,但这根本不受支持。我建议无条件地初始化 Firebase。如果您实际上不使用任何 Firebase 产品,这样做的成本非常低。

我通过从此处 https://support.google.com/firebase/answer/7015592 重新获取我的应用程序的配置片段并再次将其粘贴为我的 initializeApp 对象参数来修复此问题。这显然是由 Firebase 升级引起的。

我能够通过使用配置详细信息修改 service worker 来解决这个问题。

正在使用配置文件初始化

我通过在 Service Worker 本身内部提供配置值解决了这个问题。

为此,从 environment.ts 文件或 FCM console -> <your-project> ->

复制你的配置文件

-> project settings -> 向下滚动到 your apps ->

点击 <your-app> -> 复制 config.

现在将此 config 粘贴到 firebase.initializeApp() 中的 firebase-messaging-sw.ts 中作为

firebase.initializeApp({
  'messagingSenderId': 'xxxxxxxxxxxxxx',
  'apiKey': "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
  'authDomain': "xxxxxxxxxxxxxxxxxxxxxxxxxxxx",
  'databaseURL': "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
  'projectId': "xxxxxxxxxxxxxx",
  'storageBucket': "xxxxxxxxxxxxxx",
  'messagingSenderId': "599149435887",
  'appId': "x:xxxxxxxxxxxxxx:xxx:xxxxxxxxxxxxxx",
  'measurementId': "xxxxxxxxxxxxxx"
});

这对我有用,希望对你也有用。

替代方法(远景,不确定是否有效)

另一件有用的事情是减少

中的版本
importScripts('https://www.gstatic.com/firebasejs/8.7.0/firebase-app.js');
importScripts('https://www.gstatic.com/firebasejs/8.7.0/firebase-messaging.js');

importScripts('https://www.gstatic.com/firebasejs/5.5.0/firebase-app.js');
importScripts('https://www.gstatic.com/firebasejs/5.5.0/firebase-messaging.js');

但在这种情况下我无法收到任何通知,也许如果它对你有用,你也可以使用它。