【问题标题】:Firebase Cloud Messaging: Prevent background notifications in javascript clientFirebase 云消息传递:防止 javascript 客户端中的后台通知
【发布时间】:2018-03-16 13:00:41
【问题描述】:

我有一个使用 Google 的频道 API 实现的实时比分显示网站,可以将实时比分更新推送到浏览器。由于 Google 正在关闭通道 API,我必须转向 Firebase Cloud Messaging。

当我迁移到 FCM 时,我必须添加一个 service worker javascript 文件 (firebase-messaging-sw.js)。每当向浏览器推送分数更新时,如果用户在另一个浏览器选项卡中或用户已关闭我的网页选项卡,则会向用户显示一条通知。

我不需要此通知,我想禁用它。另外,当用户移动到另一个浏览器选项卡时,我想阻止推送消息进入服务工作者并将其路由到我的网页,以便当用户再次返回选项卡时,网页中会更新最新分数。

有什么办法可以做到吗?

【问题讨论】:

  • 如果您只需要在应用程序的浏览器选项卡处于活动状态时才需要更新,我建议您使用 Firebase Realtime DatabaseCloud Firestore 之类的东西,而不是 FCM。
  • @FrankvanPuffelen 我的网页显示用户注册的单个匹配的分数,因此我不需要将所有匹配的分数同步到浏览器。是否可以使用 Firebase 实时数据库来实现这一目标?
  • 您找到解决方案了吗?

标签: javascript firebase firebase-cloud-messaging


【解决方案1】:

您应该像这样在消息正文中传递一个参数(取决于您需要做什么):

$msg = [
  'title' => pushTitle,
  'body'=> pushBody,
  'icon'=> icon.png,
  'image'=> image.png,
  'active'=> 1
];

上面是 PHP,但在任何编程语言中也以相同的方式工作。如果您使用 Firebase,那么您应该使用云功能。

然后在你的 js 文件中:

messaging.setBackgroundMessageHandler(function(payload) {
  console.log('Received background message', payload);

  if(payload.data.active == 1){
    return;
  }
  var notificationTitle = payload.data.title;
  var notificationOptions = {
    body: payload.data.body,
    icon: payload.data.icon,
    image: payload.data.image
  };

  return self.registration.showNotification(notificationTitle, notificationOptions);
});

如果我有你的代码(到目前为止你做了什么),我会给你一个准确的答案。 如果您有更多问题,请随时提问。

【讨论】:

    猜你喜欢
    • 2022-08-19
    • 2021-02-07
    • 2017-12-14
    • 2017-02-06
    • 2020-06-25
    • 1970-01-01
    • 2016-12-25
    • 2016-12-13
    • 2021-07-22
    相关资源
    最近更新 更多