Domande frequenti sulle notifiche push

Matt Gaunt

Perché le notifiche push non funzionano quando il browser è chiuso?

Questa domanda si presenta 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, quando ne riceve uno, riattivare l'app per Android appropriata per gestirlo, indipendentemente dal fatto che l'app sia chiusa o meno.

Questo è esattamente lo stesso con qualsiasi browser su Android, il browser verrà riattivato quando viene ricevuto un messaggio push e il browser riattiverà il tuo service worker e invierà l'evento push.

Sui sistemi operativi desktop, la situazione è più complessa ed è più facile spiegarla su Mac OS X, perché esiste un indicatore visivo che aiuta a spiegare i diversi scenari.

Su Mac OS X, puoi capire se un programma è in esecuzione o meno da 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 illustrato dal segno sotto l'icona, mentre Chrome a destra non è in esecuzione, quindi non è presente il segno sotto.

Esempio di OS X

Nel contesto della ricezione di messaggi push su computer, riceverai i messaggi quando il browser è in esecuzione, ovvero ha il contrassegno sotto l'icona.

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

L'unico caso in cui una notifica push non verrà ricevuta è 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 faccio ad aprire l'app web della schermata Home a schermo intero da una notifica push?

In Chrome per Android, un'app web può essere aggiunta alla schermata Home e, quando viene aperta dalla schermata Home, può essere avviata in modalità a schermo intero senza la barra degli URL, come mostrato di seguito.

Icona della schermata Home a schermo intero

Per mantenere questa esperienza coerente, gli sviluppatori vogliono che le notifiche su cui viene fatto clic aprano anche la loro app web a schermo intero.

Chrome ha implementato questa funzionalità "in un certo senso", anche se potresti trovarla inaffidabile e difficile da comprendere. I dettagli di implementazione pertinenti sono:

Ciò significa che, a meno che l'utente non visiti il tuo sito tramite l'icona della schermata Home con una certa regolarità, le notifiche si apriranno nella normale UI del browser.

Questo problema verrà ulteriormente esaminato.

Perché è meglio dei WebSocket?

Un service worker può essere attivato quando la finestra del browser è chiusa. Un web socket rimane attivo solo finché il browser e la pagina web sono aperti.

What is the deal with GCM, FCM, Web Push and Chrome?

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

Dicembre 2014

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

Questo non era un push web. Esistono alcuni motivi per cui questa configurazione iniziale di Chrome e GCM non era un "vero" push web.

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

Luglio 2016

A luglio è stata introdotta una nuova funzionalità per le notifiche push web: le chiavi del server dell'applicazione (o VAPID, come è nota la specifica). 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. Questo è importante per diversi motivi:

  • Chrome e le chiavi del server applicazioni non richiedono la configurazione di alcun tipo di progetto con Google o Firebase. Funzionerà e basta.
  • FCM supporta il protocollo web push, ovvero l'API che verrà supportata da tutti i servizi web push. Ciò significa che, indipendentemente dal servizio push utilizzato da un browser, devi solo effettuare lo stesso tipo di richiesta e il messaggio verrà inviato.

Perché oggi è fonte di confusione?

C'è molta confusione ora che sono stati scritti contenuti sull'argomento delle notifiche push web, molti dei quali fanno riferimento a GCM o FCM. Se i contenuti fanno riferimento a GCM, probabilmente dovresti considerarli come contenuti obsoleti OPPURE troppo incentrati su Chrome. (Io stesso ho commesso questo errore in diversi post precedenti).

Considera invece il web push come un browser che utilizza un servizio push per gestire l'invio e la ricezione di messaggi, in cui il servizio push accetta una richiesta di "protocollo web push". Se pensi in questi termini, puoi ignorare il browser e il servizio push che sta utilizzando e metterti al lavoro.

Questa guida è stata scritta per concentrarsi sull'approccio standard delle notifiche push web e ignora intenzionalmente tutto il resto.

Firebase ha un SDK JavaScript. Cosa e perché?

Se hai trovato l'SDK web di Firebase e hai notato che ha un'API di messaggistica per JavaScript, potresti chiederti in che modo si differenzia dalle notifiche push web.

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

  • Anziché preoccuparti di un PushSubscription e dei suoi vari campi, devi solo preoccuparti di un 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 di 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 la documentazione è scarsa).
  • Infine, FCM supporta Android, iOS e il web, quindi per alcuni team è più facile lavorare con i progetti esistenti.

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

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

Passaggi successivi

Codelab