我正在使用Firebase Service Worker进行网络推送通知。目前,我面临此错误:
Uncaught FirebaseError: Messaging: This method is available in a Window context. (messaging/only-available-in-window).
我正在使用桌面上的网站来注册软件。如何解决此问题?
我在控制台中遇到的错误堆栈。
browserErrorMessage: "Failed to register a ServiceWorker: ServiceWorker script evaluation failed"
code :"messaging/failed-serviceworker-registration"
message :"Messaging: We are unable to register the default service worker. Failed to register a ServiceWorker: ServiceWorker script evaluation failed (messaging/failed-serviceworker-registration)."
stack: "FirebaseError: Messaging: We are unable to register the default service worker. Failed to register a ServiceWorker: ServiceWorker script evaluation failed (messaging/failed-serviceworker-registration).↵ at https://www.gstatic.com/firebasejs/3.7.0/firebase.js:555:225"
__proto__: Error
谢谢
此方法应该在主 javascript 文件中,而不是在 service worker 中。服务工作进程在后台工作。
messaging.onMessage(function(payload) {
console.log("Message received. ", payload);
// ...
});
请保留该行,这在SW中是非常需要的:
const messaging = firebase.messaging((;
问题不在于消息传递本身,而很可能是软件中使用的部分,但是那里不支持。
可悲的是,我无法从软件中看到您的代码,但是导致此问题的原因是,当网站位于前台时,我实现了以下内容来接收消息:
messaging.onMessage(function(payload) {
console.log("Message received. ", payload);
// ...
});
但是,这需要窗口上下文,并且需要在实际网站而不是软件中实现。对我来说,这导致了您描述的错误。
尝试使用 Firebase 示例软件。这是它需要做的一切,并允许您在后台接收通知。
如果您想分享您的软件代码,我们可以看看它。
是因为您可能已在服务工作者文件(firebase-messaging-sw.js(中添加了以下代码。const messaging = firebase.messaging((;
删除它并查看代码是否有效。
上面的行应仅添加到索引中.html。
我收到了类似的错误。更新我的 JavaScript 以使用新的服务器密钥而不是旧的服务器密钥消除了错误。要获取新密钥,请转到 Firebase 控制台 --> 云消息传递。请注意,Firebase 控制台概览页面上的网络应用快速入门仍使用旧密钥。
var config = {
apiKey: "<**newAPIKey**>",
authDomain: "<domain>",
databaseURL: "<databaseUrl>",
projectId: "<id>",
storageBucket: "",
messagingSenderId: "<SenderId>"
};
firebase.initializeApp(config);