- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在我的项目中实现了 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/
在 background.html : chrome.tabs.query({active:true, currentWindow:true},function(tabs){ chrome.tab
作为 websocket 客户端,我们可以访问 onMessage 函数,该函数在客户端每次从服务器接收到消息时都会触发。我试图了解如果在 onMessage 事件上调用的代码块需要更长的时间来运行接
这是我的代码: initializeApp() async { FirebaseMessaging firebaseMessaging = FirebaseMessaging(); fireb
对于 Delphi Win32 (VCL),我使用: Application.OnMessage := MyAppMessage; FireMonkey 中的等效项是什么? 我有一个例程,需要捕获应用
我使用 Application.OnMessage 事件处理程序来处理来自程序中其他线程的消息(通知)。我发现如果弹出菜单处于事件状态(打开),则不会调用此事件处理程序。测试代码如下(没有线程但原理是
所以我正在为 Firefox 开发我的下一个附加组件,但是,在阅读 ContextMenus 的文档时,似乎永远不会调用 onMessage 事件,这是我的代码: exports.main = fun
我尝试在我的项目中实现 GCM,但 onMessage 函数出现问题。根据例子,我写: @Override protected void onMessage(Context arg0, Intent
hi This : var fees=document.getElementById("conn"); var btn=document.getE
当添加回调以捕获通过 web worker 管道传输的数据时,您通常会这样做: worker.addEventListener("message", function(event) { var
我有一个发送消息的浏览器操作 chrome.browserAction.onClicked.addListener(function(tab) { var message = {
我正在使用 django-channels 在 django 应用程序中实现套接字。 我关注了instructions它起作用了: socket = new WebSocket("ws://127.0
我正在挂载中设置回调: data() { return { code: 'Apple', } }, mounted() { console.log(this.c
我尝试通过 JS-WebSocket 在 Java WebsocketServer ( https://github.com/TooTallNate/Java-WebSocket) 与网页之间进行通信
我遇到过这样的问题,如果我的下面的方法失败或者是异常,我仍然会使用 msg。我希望该功能在捕获期间进行回滚并将消息放回队列/主题。 public void onMessage(Message mess
我正在使用 ActiveMQ 编写应用程序,其中我使用异步 onMessage() 方法从 ActiveMQ 获取消息。 假设我从 activemq 收到 1000 条消息,因此所有消息都将存储在 O
我正在尝试实现我自己的 websocket 服务器,但在使用 JavaScript 中的 onmessage 函数时遇到了一些麻烦。就是火不起来!我将一个警报放入其中,以便在它被调用时触发,但警报永远
如何使用 JavaScript 从 WebSocket 完全读取 event.data? onMessage: function(event) { var msg = event.data; al
我正在实现 MessageListner 类的 onMessgae () 方法,但即使我将调试点放入此方法中,它也不起作用,但调试器也不会进入此方法中。 使用该方法接收来自Queue的消息。下面是我用
我正在订阅 OnMessage 事件,当用户发送消息时它会被调用两次;一旦他/她开始打字,在这种情况下 Message 对象内容如下: Body = null Chatstate = composin
在我的应用程序中,我使用了 GCM 服务。我想在 onMessage 函数中发出哔哔声或播放一个小的 mp3 文件。 我的 GCMIntentService 是从 GCMBaseIntentServi
我是一名优秀的程序员,十分优秀!