无法从Ionic PWA上的firebase-sw获取通知有效负载

时间:2018-06-21 14:54:28

标签: angularjs firebase ionic3 service-worker pwa

对于这个问题,我已经进行了很多搜索,但是我坚持了一周。 我有一个Ionic PWA项目,可以从firebase接收一些通知,我可以毫无问题地接收通知,并且可以在前台(应用程序处于打开状态)获取有效负载,但是当应用程序关闭时却无法获取有效负载,但是我没有弄清楚发生了什么事,所以我来这里请主人帮我。

messaging.setBackgroundMessageHandler(function(payload) {
    var notificationTitle = 'Teste';
    var notificationOptions = {
      body: 'Background Message body.',
      tag: 'campanhas',
      data: payload.data,
      icon: 'https://firebasestorage.googleapis.com/v0/b/hemotomobile-edeb9.appspot.com/o/logo.png?alt=media&token=4a9fc487-b8cf-4d3c-875c-774454ff6f50'
   };


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

self.addEventListener('notificationclick', function(event) {
   event.notification.close();

   event.waitUntil(clients.matchAll({
     type: "window"
   }).then(function(clientList) {
     for (var i = 0; i < clientList.length; i++) {
       var client = clientList[i];
       if (client.url == '/' && 'focus' in client)
       return client.focus();
     }
     if (clients.openWindow)
      return clients.openWindow('/');
   }));
});

在通知的提供者上,我使用以下代码:

public receiveMessage() {
  console.log('notification')
  this.messaging.onMessage((payload) => {
    console.log('payload',payload)
  });
}

我在标签页上将此提供商称为:

ionViewDidLoad(){
  this.notification.receiveMessage()
}

那么,当PWA关闭时,谁能帮助我获得有效载荷?

1 个答案:

答案 0 :(得分:0)

您是否尝试过通过在service worker中初始化firebase并使用它,

self.addEventListener("notificationclick", (event) => {
   //your code 
});

importScripts("https://www.gstatic.com/firebasejs/4.7.0/firebase.js")
importScripts("https://www.gstatic.com/firebasejs/4.7.0/firebase-messaging.js")

// Initialize Firebase
firebase.initializeApp({
'messagingSenderId': 'your sender id'
});

const messaging = firebase.messaging();
messaging.setBackgroundMessageHandler(function(payload) {
  //your code
});

this.messaging.onMessage((payload) => {
   //your code
});

self.addEventListener('notificationclose', function (event) {
  self.registration.getNotifications().then(function (notifications) {
     notifications.forEach(function (notification) {
         notification.close()
     })
  });
})

我已经尝试在服务工作者中使用以上代码,并且在关闭应用程序时显示通知,如果要在关闭浏览器时显示通知,请确保已启用 Continue在Chrome设置中关闭Google Chrome时运行后台应用 选项。