当前位置: 首页 > 知识库问答 >
问题:

有没有一种方法可以将Firebase Cloud Message(FCM)发送的通知更新到web应用程序,而不是创建一个新的通知?

轩辕季同
2023-03-14

我在用FCM做聊天应用。每次用户收到消息时,我都会通过FCM向他发送通知。如果用户没有将我的web应用程序放在前台,则消息处理将在默认的Service Worker中进行,该Worker将使用我在请求正文中指定的参数生成通知。问题是,每次一个新的推送消息被发送,而应用程序在后台,浏览器(在Chrome和Firefox上测试过)都在创建一个新的消息,而不是更新现有的消息。我想保留已经可见的通知,只更新它的值,这可能吗?

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

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

const messaging = firebase.messaging();
{
    "priority" : "normal",
    "collapse_key": "demo",
    "notification": {
        "title": "Felicius Humble",
        "body": "This is a sample message content",
        "click_action": "https://****.herokuapp.com",
        "icon": "****"
    },
    "to": "****",
    "data": {
        "id": 7,
        "timestamp": 1493573846692,
        "content": "teste",
        "type": "MESSAGE",
        "direction": "OUTPUT",
        "sender": {
            "id": 5,
            "name": "Felicius Humble",
            "email": "****@gmail.com",
            "gender": "MALE",
            "picture": "****",
            "facebookID": "****",
            "fcmToken": "****",
            "accessToken": "****"
        },
        "chatID": 3
    }
}

共有2个答案

任伟
2023-03-14

在某些情况下,您可能希望使用替换通知来通知用户,而不是静默更新。聊天应用程序就是一个很好的例子。在这种情况下,您应该将 设置为true。

中编写以下代码

    const title = 'Notification 2 of 2';
    const options = {
      tag: 'renotify',
      renotify: true
    };
    registration.showNotification(title, options);

您可以通过点击 按钮在此处测试演示

充栋
2023-03-14

好的,我找到了这个显示了json主体可用的所有选项。对于我所需要的,我只需要在json主体中的notification obj上添加“tag”param。如果要更新通知,请使用相同的标记发送通知。示例:

{
    "notification": {
        "title": "",
        "body": "",
        "click_action": "",
        "icon": "",
        "tag" : "this must be the same for the notifications you want to update"
    },
    "to": "****",
    "data": {}
    }
}
 类似资料:
  • 假设我有一个简单的JFrame,它有一个包含3个面板的JTabbedPane,第二个面板包含一个JComponent。当“Tab2”面板从其容器中移除时,是否有方法通知JComponent?我的问题是JComponent可能在层次结构的深处。 显然,我在这里寻找的是SWING解决方案...:) 我试图使用setridorRemoved(),但没有成功。我显然做错了什么... ASCII艺术是用Ja

  • 问题内容: 我正在自动执行一个调用CAPTCHA来验证登录名的网页,但是我注意到该页面仅在使用自动化测试代码时才请求此CAPTCHA,而当我手动执行时则不请求。我要求开发人员团队在质量检查环境中禁用它,但是通过安全代码是不可能的。 我需要知道是否有一种方法可以不对浏览器说我正在此页面上使用自动测试。 你能帮我吗? 问题答案: 不 ,没有任何方法可以隐瞒您正在运行自动化测试。 WebDriver界面

  • 问题内容: 通过,我们可以创建/修改连接的参数,但是我想知道是否可以通过API进行相同的操作,以便可以以编程方式设置连接 似乎它只处理实际连接到实例,而不是将其保存到列表中。似乎应该已经实现了一个功能,但是我不确定在哪里可以找到该特定功能的文档。 问题答案: 连接实际上是一个模型,可以用来查询和插入新连接

  • 我正在开发ionic应用程序,需要使用FCM发送推送通知。我只想测试两个设备的推送通知。因为我已经有了这两个设备的令牌。 有没有办法使用angularjs向FCM发送RESTAPI POST请求,以向设备发送推送通知?

  • 在我的应用程序中,我想允许用户打开Google Play商店来查看我的所有其他应用程序。在iOS中,我只是使用以下(示例)iTunes链接将它们全部拉上来:

  • 我用代码名1开发了一个应用程序,在这个应用程序中,如果playstore中有更新,我需要向用户显示关于应用程序更新的通知。LocationManger正在使用版本5及以上的手机,但它不适用于平板电脑。如何在android/ios平板电脑中使用codenameone版本处理通知。