2017-08-30 1 views
1

Ich habe Push-Benachrichtigungen mit Service-Mitarbeitern implementiert. Gibt es eine Möglichkeit, die Anzahl der Benachrichtigungen zu ermitteln, die derzeit im Fenster angezeigt werden? Ich beabsichtige, die Anzahl der im Fenster angezeigten Benachrichtigungen zu begrenzen.Ermitteln der Anzahl aktiver Push-Benachrichtigungen von Service-Mitarbeitern

Ich habe Folgendes versucht. Aber die Funktion getNotifications gibt mir ein leeres Array zurück.

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); 
    }) 
); 
}); 

Antwort

3

Sie können serviceWorker.getNotifications() verwenden, die eine Liste von Benachrichtigungen zurückgibt. Sie können es verwenden, etwa so:

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

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

, wenn Sie dies in Ihrer Serviceworker Datei tun, es ist:

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

Die Zahl 0, Ereignis, wenn es Meldungen, die den Benutzer angezeigt werden. self.addEventListener ('push', Funktion (e) { var data = e.data.json(); var Optionen = { body: data.notificationText, Symbol: 'files/assets/staff.png', Daten:. { dateOfArrival: Date.now() } }; e.waitUntil ( self.registration.getNotifications(), dann (function (Mitteilungen) { console.log (notifications.length); Selbst .registration.showNotification (data.title, options) }) ); }); – Stanly

+0

Vor dem Aufruf von showotification möchte ich wissen, ob es Benachrichtigungen gibt, die bereits angezeigt werden. – Stanly

+1

Beachten Sie, dass getNotifications() nur Benachrichtigungen vom Serviceworker zurückgibt und Benachrichtigungen von anderen Apps nicht gezählt werden – jedijulia

Verwandte Themen