Stanly
Stanly

Reputation: 673

Finding the number of active push notifications from service worker

I’ve implemented push notifications using service workers. Is there any way to find out the number of notifications which are currently shown in the window? My intention is to limit the number of notifications shown in the window.

I tried the following. But the getNotifications function returning me empty array.

self.addEventListener('push', function(event) {
 if (!(self.Notification && self.Notification.permission === 'granted')) {
      return;
  }
  var data = event.data.json();
  var options = {
    body: data.notificationText,
    icon: 'files/assets/staff.png',
    vibrate: [100, 50, 100],
    data: {
      dateOfArrival: Date.now(),
      onClickUrl: data.onClickUrl,
      event_id: data.event_id,
      productName: data.product_name
    }
  };

  event.waitUntil(
    self.registration.getNotifications().then(function(notifications) {
      console.log(notifications);
      if (notifications && notifications.length > 0) {
        notifications.forEach(function(notification) {
          notification.close();
        });
      }
      showNotification(data.title, options);
    })
  );
});

Upvotes: 2

Views: 1023

Answers (1)

jedijulia
jedijulia

Reputation: 126

You can use serviceWorker.getNotifications() which returns a list of notifications. You can use it like so:

navigator.serviceWorker.register('sw.js');

navigator.serviceWorker.ready.then(function(registration) {
  registration.getNotifications().then(function(notifications) {
    // get the number of notifications
  }) 
});

if you're doing this in your serviceworker file, it's:

self.registration.getNotifications().then(function(notifications) {
  // get the number of notifications
}) 

Upvotes: 3

Related Questions