Ich habe die Dokumentation für die Chrome-Implementierung der Web Push-API here durchgelesen und festgestellt, dass die API sagt "Sie versprechen, eine Benachrichtigung zu zeigen, wenn Sie einen Push erhalten" und unter den angegebenen Einschränkungen "Sie haben, um eine Benachrichtigung anzuzeigen, wenn Sie eine Push-Nachricht erhalten".Google Chrome Silent Push-Benachrichtigungen
Nachdem ich das Beispiel auf meinem localhost implementiert habe, habe ich cURL verwendet, um eine Push-Benachrichtigung erfolgreich zu senden. Ich war neugierig, also habe ich die Zeilen, die eigentlich die showNotification-Funktion aufrufen, auskommentiert und stattdessen eine console.log-Datei eingefügt und festgestellt, dass ich tatsächlich eine Push-Benachrichtigung senden, empfangen und vollständig ignorieren kann. Ich habe sogar versucht, eine if-Anweisung zu verwenden, um zu steuern, ob sie auf der Basis eines globalen Booleans angezeigt werden sollen, das ich von meiner Hauptseite aus gesteuert habe, und das hat funktioniert. Also fragte ich mich, ob jemand wusste, was sie meinten, indem ich sagte, dass du eine Benachrichtigung anzeigen musst und dass keine stillen Push-Benachrichtigungen verfügbar waren?
Dies war nicht nur für den Teufel davon, ich muss möglicherweise kontrollieren, ob diese Benachrichtigungen in meiner Web-App angezeigt werden, so wäre es toll, wenn das tatsächlich möglich wäre. Code unten, falls Sie neugierig sind.
self.addEventListener('push', function(event) {
var title = 'New Message';
var body = 'You have received a new message!';
var icon = '/img/favicon.png';
var tag = 'well-notification';
console.log("DID RECEIVE NOTIFICATION")
if(settingsShowNotification) {
event.waitUntil(
self.registration.showNotification(title, {
body: body,
icon: icon,
tag: tag
})
);
}
});
EDIT: Auf Chrome 47, wenn es relevant ist.
UPDATE: Nach weiterem Experimentieren fand ich das offensichtliche Problem, dass ich nicht die ursprüngliche globale Variable aktualisieren, sobald der Benutzer die Seite verlässt und dann wieder navigiert zu der gleichen Seite. Allerdings konnte ich dies umgehen, indem ich eine Variable auf dem Servicearbeiter selbst verwendete und eine Nachricht an den Service-Mitarbeiter über die API here verschickte, um den booleschen Befehl showNotifications umzuschalten.
Wow! Danke für diese Antwort. Toller Fund! –
In unserem Fall überprüfen wir nach Erhalt einer Benachrichtigung den Status auf dem Server und zeigen die Benachrichtigung nur an, wenn eine Bedingung erfüllt ist. Um eine erzwungene Benachrichtigung zu verhindern, geben wir nie erfüllte Versprechen wie 'event.waitUntil (new Promise (function() {}))' zurück. –
Einige Kommentare. Wenn Sie feststellen möchten, ob Sie eine Benachrichtigung anzeigen müssen, überprüfen Sie die derzeit geöffneten Fensterclients, und prüfen Sie, ob einer davon visibilityState === 'visible' anzeigt. Es gibt eine neue Spezifikation namens Budget-API, mit der Entwickler überprüfen können, ob sie * keine * Benachrichtigungen anzeigen können (d. H. Stilles Push zulassen), aber dies ist auf einen bestimmten Betrag beschränkt. –