gpt4 book ai didi

javascript - Firebase 消息 onMessage 仅在窗口中可用

转载 作者:行者123 更新时间:2023-11-30 13:52:54 26 4
gpt4 key购买 nike

我在我的项目中实现了 Firebase 云消息传递来发送和接收推送通知。我可以接收推送通知,但我无法让通知事件起作用。具体来说,我想让 onMessage 事件起作用,但出于某种原因,它给了我这个错误:

Messaging: This method is available in a Window context. (messaging/only-available-in-window).

这是我的消息服务人员:

// Give the service worker access to Firebase Messaging.
// Note that you can only use Firebase Messaging here, other Firebase libraries
// are not available in the service worker.
importScripts('https://www.gstatic.com/firebasejs/6.3.4/firebase-app.js')
importScripts('https://www.gstatic.com/firebasejs/6.3.4/firebase-messaging.js')

// Initialize the Firebase app in the service worker by passing in the
// messagingSenderId.
firebase.initializeApp({
messagingSenderId: 'XXXXXXXX'
})

// Retrieve an instance of Firebase Messaging so that it can handle background
// messages.
const messaging = firebase.messaging()
// messaging.setBackgroundMessageHandler(payload => {
// console.log(payload)
// })
messaging.onMessage(function(payload) {
// Messages received. Either because the
// app is running in the foreground, or
// because the notification was clicked.
// `payload` will contain your data.
console.log('Message received. ', payload)
})

我也尝试将函数添加到我的 Vue 组件中,但我仍然遇到同样的错误。我做错了什么?

最佳答案

onMessage 回调不应该从 service worker 中注册。在你应该使用的服务 worker 中(参见 Firebase docs ):

messaging.setBackgroundMessageHandler(function(payload) {
console.log('[firebase-messaging-sw.js] Received background message ', payload);
// ...
});

我可以确认这目前对我有用。请注意,仅当您的应用处于后台并且您正在发送数据消息时才会触发此事件。如果您要发送通知,则 SDK 将自动处理消息的显示,并且不会触发您的 setBackgroundMessageHandler 回调。即使您发送包含数据通知 内容的负载,SDK 也会进行干预。

如果您想在 service worker 之外对消息使用react,请注意包含您网站的选项卡应该在前台。那么下面的代码应该可以工作(和你用的一样):

messaging.onMessage((payload) => {
console.log('Message received. ', payload);
// ...
});

我的 Vue 组件中有上面的代码片段(尽管我使用的是 Vue 3),但我没有收到错误,但也没有触发回调。也许你会有更好的运气。这应该针对任何类型的消息触发,无论是数据通知还是两者。

另请注意链接文档顶部的表格,以了解何时触发回调。

编辑:显然,当您通过 npm/Yarn 安装的 Firebase JS SDK 与您导入的版本不同时,不会触发 onMessage 回调来自服务人员。比如我的npm版本是7.2.3,service worker导入的是6.3.4。使用 7.2.3 更新 service worker 后,onMessage 回调在应用程序处于前台时被触发。 Thanks to ErAz7 !

关于javascript - Firebase 消息 onMessage 仅在窗口中可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57884721/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com