Domande frequenti sulle notifiche push

Matt Gaunt

Perché il push non funziona alla chiusura del browser?

Questa domanda ci sorge spesso, soprattutto perché esistono alcuni scenari che rendono difficile ragionare e comprendere.

Iniziamo con Android. Il sistema operativo Android è progettato per ascoltare i messaggi push e, al momento della ricezione, attiva l'app Android appropriata per la gestione dei messaggi push, indipendentemente dal fatto che l'app sia chiusa o meno.

È esattamente la stessa cosa con qualsiasi browser su Android: il browser si attiva alla ricezione di un messaggio push e il browser riattiva il service worker e invia l'evento push.

Sui sistemi operativi desktop, è più sfaccettata ed è più facile da spiegare su Mac OS X perché c'è un indicatore visivo che spiega i diversi scenari.

Su Mac OS X, puoi capire se un programma è in esecuzione o meno grazie a un contrassegno sotto l'icona dell'app nel dock.

Se confronti le due icone di Chrome nel dock seguente, quella a sinistra è in esecuzione, come mostrato dal contrassegno sotto l'icona, mentre quella di Chrome a destra non è in esecuzione, per cui manca il contrassegno sotto.

Esempio di OS X

Nell'ambito della ricezione di messaggi push su computer, li ricevi quando il browser è in esecuzione, ad esempio presenta il contrassegno sotto l'icona.

Ciò significa che il browser non può avere finestre aperte e continuerai a ricevere il messaggio push nel service worker perché il browser è in esecuzione in background.

L'unica volta che un push non viene ricevuto è quando il browser è completamente chiuso, ovvero non è in esecuzione (nessun contrassegno). Lo stesso vale per Windows, anche se è un po' più difficile determinare se Chrome è in esecuzione in background o meno.

Come posso fare in modo che la mia app web nella schermata Home si apra a schermo intero con un push?

Su Chrome per Android, è possibile aggiungere un'app web alla schermata Home e quando l'app web viene aperta dalla schermata Home, può essere avviata in modalità a schermo intero senza la barra dell'URL, come mostrato di seguito.

Icona della schermata Home a schermo intero

Per garantire un'esperienza coerente, gli sviluppatori vogliono che anche i clic sulle notifiche aprano la loro app web a schermo intero.

Chrome ha implementato in qualche modo questa funzionalità, anche se potrebbe essere inaffidabile e difficile da ragionare. I dettagli di implementazione pertinenti sono:

Ciò significa che, a meno che l'utente non visiti regolarmente il tuo sito tramite l'icona della schermata Home, le notifiche si aprono nella normale interfaccia utente del browser.

Questo problema verrà analizzato ulteriormente.

Perché è meglio delle prese web?

Un service worker può essere attivato quando la finestra del browser è chiusa. Un web socket funziona finché il browser e la pagina web rimangono aperti.

Qual è il contratto con GCM, FCM, Web Push e Chrome?

Questa domanda ha diversi aspetti e il modo più semplice per spiegarla è ripercorrere la storia del web push e di Chrome. Non preoccuparti, è breve.

Dicembre 2014

Quando Chrome ha implementato per la prima volta web push, Chrome ha utilizzato Google Cloud Messaging (GCM) per potenziare l'invio di messaggi push dal server al browser.

Non era un web push. Ci sono diversi motivi per cui questa configurazione iniziale di Chrome e GCM non è stata "reale" web push.

  • GCM richiede agli sviluppatori di creare un account su Google Developers Console.
  • Per poter configurare correttamente i messaggi, Chrome e GCM avevano bisogno di un ID mittente speciale da condividere da un'app web.
  • I server di GCM accettavano una richiesta API personalizzata che non era uno standard web.

Luglio 2016

A luglio è stata rilasciata una nuova funzionalità di push web: le chiavi server delle applicazioni (o VAPID, come sono note le specifiche). Quando Chrome ha aggiunto il supporto per questa nuova API, ha utilizzato Firebase Cloud Messaging (noto anche come FCM) anziché GCM come servizio di messaggistica. Ciò è importante per diversi motivi:

  • Non è necessario configurare alcun tipo di progetto con Google o Firebase in Chrome e nelle chiavi di server delle applicazioni. Funzionerà semplicemente.
  • FCM supporta il protocollo web push, ovvero l'API supportata da tutti i servizi web push. Ciò significa che, indipendentemente dal servizio push utilizzato da un browser, effettui lo stesso tipo di richiesta e il messaggio verrà inviato.

Perché oggi è poco chiara?

Ora che sono stati scritti contenuti sull'argomento web push, c'è molta confusione e in gran parte si fa riferimento a GCM o FCM. Se i contenuti fanno riferimento a GCM, probabilmente dovresti considerarli come un segnale che si tratta di contenuti obsoleti OPPURE che si concentrano troppo su Chrome. (Sono colpevole di averlo fatto in una serie di vecchi post.)

Pensa invece al push web come a un browser, che utilizza un servizio push per gestire l'invio e la ricezione dei messaggi, in cui il servizio accetterà una richiesta di "protocollo push web". Se pensi in questi termini, puoi ignorare quale browser e quale servizio push sta utilizzando e iniziare a lavorare.

Questa guida è stata scritta per concentrarsi sull'approccio standard del web push e ignora intenzionalmente qualsiasi altra cosa.

Firebase dispone di un SDK JavaScript. Cosa e perché?

Se hai trovato l'SDK web Firebase e hai notato che dispone di un'API di messaggistica per JavaScript, ti starai chiedendo in che modo differisce dal web push.

L'SDK di messaggistica (noto come SDK Firebase Cloud Messaging JS) esegue alcuni trucchetti dietro le quinte per semplificare l'implementazione del push web.

  • Anziché preoccuparti di un PushSubscription e dei suoi vari campi, devi solo preoccuparti del token FCM (una stringa).
  • Utilizzando i token per ogni utente, puoi utilizzare l'API FCM proprietaria per attivare i messaggi push. Questa API non richiede la crittografia dei payload. Puoi inviare un payload in testo normale nel corpo di una richiesta POST.
  • L'API proprietaria di FCM supporta funzionalità personalizzate, ad esempio FCM Topics (funziona anche sul web, anche se è documentato male).
  • Infine, FCM supporta Android, iOS e web, quindi per alcuni team è più semplice lavorare con i progetti esistenti.

Questo metodo utilizza il web push dietro le quinte, ma il suo obiettivo è quello di astrarlo.

Come indicato nella domanda precedente, se consideri il push web come un semplice browser e come servizio push, puoi considerare l'SDK Messaging in Firebase come una libreria per semplificare l'implementazione del push web.

Passaggi successivi

Codelab