Ho letto i documenti per l'implementazione di Chrome dell'API Web Push here e ho notato che l'API dice "prometti di mostrare una notifica ogni volta che ricevi una spinta" e sotto le limitazioni è dichiarato "è avere per mostrare una notifica quando si riceve un messaggio push".Notifiche push silenziose Google Chrome
Dopo aver implementato l'esempio sul mio localhost, ho usato cURL per inviare correttamente una notifica push. Ero curioso, quindi ho commentato le righe che in realtà chiamano la funzione showNotification e ho inserito un console.log e ho scoperto che potevo, infatti, inviare, ricevere e ignorare totalmente una notifica push. Ho anche provato a usare un'istruzione if per controllare se mostrarli o meno in base al booleano globale controllato dalla mia pagina principale, e questo ha funzionato. Quindi mi chiedevo se qualcuno sapeva cosa volevano dire dicendo che è necessario mostrare una notifica e che le notifiche push silenziose non erano disponibili?
Questo non era solo per il gusto di farlo, ho legittimamente potrebbe essere necessario controllare se mostrare o meno queste notifiche nella mia app Web, quindi sarebbe bello se fosse effettivamente possibile. Codice sotto nel caso in cui sei curioso.
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: Su Chrome 47, se è rilevante.
AGGIORNAMENTO: Dopo ulteriori esperimenti, ho trovato il problema ovvio che non è possibile aggiornare la variabile globale originale una volta che l'utente si allontana e quindi ri-naviga alla stessa pagina. Tuttavia, sono stato in grado di aggirare questo problema utilizzando una variabile sul servicestore stesso e inviando un messaggio al lavoratore del servizio utilizzando l'API descritta here per attivare il valore booleano showNotifications.
Wow! Grazie per questa risposta. Grande scoperta! –
Nel nostro caso, dopo aver ricevuto una notifica controlliamo lo stato del server e mostrare la notifica solo se una condizione è soddisfatta. Per evitare che una notifica forzata torniamo mai adempiuto promessa come 'event.waitUntil (nuova promessa (function() {}))'. –
Coppia di commenti. Se si vuole rilevare se è necessario mostrare una notifica, controllare i clienti delle finestre attualmente aperte e vedere se qualcuno di loro visibilityState === 'visibile'. C'è una nuova specifica chiamata Budget API che consentirà agli sviluppatori di verificare se possono * not * mostrare una notifica (cioè consentire push silenzioso) ma questo sarà limitato a un determinato importo. –