缺少应用程序配置值:"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');
但在这种情况下我无法收到任何通知,也许如果它对你有用,你也可以使用它。
我可以正常发送、查看和点击网络通知,没有出现任何错误。但是,当我单击通知时,控制台会产生此信息
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');
但在这种情况下我无法收到任何通知,也许如果它对你有用,你也可以使用它。