0

我已经为这个我坚持了一周的问题进行了很多搜索。我有一个 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 关闭时帮助我获取有效负载吗?

4

1 回答 1

0

您是否尝试过在服务人员中初始化 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()
     })
  });
})

我已经尝试在服务工作者中使用上面的代码,它会在应用程序关闭时显示通知,如果您想在浏览器关闭时显示通知,请确保您已启用Google Chrome 关闭时继续运行后台应用程序选项在镀铬设置。

于 2018-06-22T02:59:18.437 回答