【问题标题】:FCM: Cannot click notificationFCM:无法点击通知
【发布时间】:2017-03-05 05:52:55
【问题描述】:

我正在使用最近发布的 FCM messaging 支持 chrome 上的推送通知。当我的应用程序在后台时,我会收到通知,但是当我单击通知时没有任何反应。如何指定用户单击通知时应打开的 URL? (我了解它是如何使用notificationclick 事件使用纯服务工作者概念完成的,我想知道如何使用FCM messaging 来做到这一点。)

messaging.setBackgroundMessageHandler(function(payload) {
  var data = payload || {};
  var shinyData = decoder.run(data);

  console.log('[firebase-messaging-sw.js] Received background message ', shinyData);

  return self.registration.showNotification(shinyData.title, {
    body: shinyData.body,
    icon: shinyData.icon
  })
});

我在这里错过了什么?

【问题讨论】:

    标签: firebase push-notification firebase-cloud-messaging service-worker web-push


    【解决方案1】:

    click_action 不是showNotification 函数的可能参数之一。

    要处理对通知的点击,请定义一个notificationclick 事件处理程序。

    例如:

    self.addEventListener('notificationclick', function(event) {
      event.notification.close();
      event.waitUntil(self.clients.openWindow(YOUR_URL_HERE));
    });
    

    【讨论】:

    • 我更新了我的问题以使其更清楚。我了解如何使用 notificationClick 事件来做到这一点,但我不知道如何使用 firebase 消息传递库来做到这一点。很抱歉造成混乱。
    • 我正在为这个回应而苦苦挣扎......在这种情况下,“自我”指的是什么?是通知、服务工作者注册还是其他对象?
    • 为了回答我之前的评论,self.addEventListener 应该在您注册服务工作者时提供的脚本中。它对我不起作用的原因是因为我的脚本被缓存了。我需要注销我的 service worker,确保脚本不再被缓存,然后重新注册 service worker。
    【解决方案2】:

    马可的回答是正确的。

    Firebase 消息库是 Web 推送 API 之上的包装器。

    notification: { click_action: 'https://...' } 有效负载将显示通知并为您处理点击。要实现相同的数据负载,您应该实现 notificationclick 事件侦听器(如 Marco 建议的那样)。

    self.addEventListener('notificationclick', function(event) {
      event.notification.close();
    
      ... Do your stuff here.
    });
    

    您也可以对 notificationclose 事件执行相同操作:

    self.addEventListener('notificationclose', function(event) {
      ... Do your stuff here.
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-31
      • 2021-11-27
      • 1970-01-01
      • 1970-01-01
      • 2019-04-22
      • 2020-05-21
      相关资源
      最近更新 更多