Quando si verifica un problema con il push web, può essere difficile eseguirne il debug o trovare aiuto. Questo documento illustra alcuni dei problemi comuni e cosa dovresti se trovi un bug in Chrome o Firefox.
Prima di approfondire il debug push, potresti riscontrare problemi con il debug. ai service worker stessi, al file non aggiornato, alla mancata registrazione o in genere si tratta di un comportamento insolito. C'è un ottimo documento sul debug dei service worker che ti consiglio vivamente di consultare se non conosci lo sviluppo dei Service worker.
Ci sono due fasi distinte da spuntare durante lo sviluppo e il test del push web: ciascuno con il proprio insieme di problemi / problemi comuni:
- Invio di un messaggio: assicurati che l'invio dei messaggi sia riuscito.
Dovresti ricevere un codice HTTP 201. In caso contrario :
- Verifica la presenza di errori di autorizzazione:se ricevi un'autorizzazione vedi il messaggio di errore Sezione Problemi di autorizzazione.
- Altri errori dell'API: se ricevi una risposta con codice di stato diverso da 201, consulta la sezione Codici di stato HTTP per indicazioni sulla causa del problema.
- Ricezione di un messaggio: se riesci a inviare un messaggio correttamente,
ma il messaggio non viene ricevuto dal browser:
- .
- Verifica la presenza di problemi di crittografia: consulta La crittografia del payload Sezione relativa al problema.
- Verificare la presenza di problemi di connessione:se il problema si verifica su Chrome, potrebbe essere una connessione. Consulta la sezione Problemi di connessione. per ulteriori informazioni.
Se non riesci a inviare e ricevere un messaggio push e le sezioni pertinenti in questo documento non aiutano a eseguire il debug del problema, allora potresti aver trovato un nel meccanismo di spinta stesso. In questo caso, fai riferimento Aumento delle segnalazioni di bug per presentare una buona segnalazione di bug con tutte le informazioni necessarie per velocizzare la procedura di correzione dei bug.
Vorrei sottolineare che Firefox e la Mozilla AutoPush Service presenta grandi messaggi di errore. Se rimani bloccato, non sei sicuro del problema, prova in Firefox e controlla se ricevere un messaggio di errore più utile.
Problemi di autorizzazione
I problemi di autorizzazione sono uno dei problemi più comuni riscontrati dagli sviluppatori quando a partire dal web push. In genere questo è un problema relativo alla configurazione Le chiavi server delle applicazioni (o chiavi VAPID) del sito .
Il modo più semplice per supportare il push sia in Firefox che in Chrome è fornire un
applicationServerKey
nella chiamata subscribe()
. Lo svantaggio è che
eventuali discrepanze tra il front-end e le chiavi del server comportano
errore di autorizzazione.
Su Chrome e FCM
Per Chrome, che utilizza FCM come servizio push, ricevi un
UnauthorizedRegistration
risposta da FCM per una serie di diverse
relativi alle chiavi del server delle applicazioni.
Riceverai un errore UnauthorizedRegistration
in una delle seguenti opzioni
situazioni seguenti:
- Se non definisci un'intestazione
Authorization
nella richiesta a FCM. - La chiave dell'applicazione utilizzata per la sottoscrizione dell'utente non corrisponde a quella utilizzata per firmare l'intestazione Authorization.
- La scadenza non è valida nel tuo JWT, ovvero supera 24 ore o il JWT è scaduto.
- Il JWT non è valido o contiene valori non validi.
La risposta di errore completa è simile alla seguente:
<html>
<head>
<title>UnauthorizedRegistration</title>
</head>
<body bgcolor="#FFFFFF" text="#000000">
<h1>UnauthorizedRegistration</h1>
<h2>Error 400</h2>
</body>
</html>
Se ricevi questo messaggio di errore in Chrome, prova a utilizzare Firefox per verificare se fornirà informazioni più dettagliate sul problema.
AutoPush di Firefox e Mozilla
Firefox e Mozilla AutoPush forniscono una serie di messaggi di errore per
Authorization
problemi.
Riceverai inoltre una risposta di errore Unauthorized
da
Mozilla AutoPush se l'intestazione Authorization
non è inclusa nel push
richiesta.
{
"errno": 109,
"message": "Request did not validate missing authorization header",
"code": 401,
"more_info": "http://autopush.readthedocs.io/en/latest/http.html#error-codes",
"error": "Unauthorized"
}
Se la scadenza nel JWT è scaduta, riceverai anche
Unauthorized
errore con un messaggio che spiega che il token ha
scaduto.
{
"code": 401,
"errno": 109,
"error": "Unauthorized",
"more_info": "http://autopush.readthedocs.io/en/latest/http.html#error-codes",
"message": "Request did not validate Invalid bearer token: Auth expired"
}
Se le chiavi del server delle applicazioni sono diverse tra la data e l'ora dell'utente
sottoscritto e al momento della firma dell'intestazione Autorizzazione, un Not Found
verrà restituito l'errore:
{
"errno": 102,
"message": "Request did not validate invalid token",
"code": 404,
"more_info": "http://autopush.readthedocs.io/en/latest/http.html#error-codes",
"error": "Not Found"
}
Infine, se il JWT contiene un valore non valido (ad esempio se il valore "alg" è un valore imprevisto), riceverai il seguente errore da Mozilla Push automatico:
{
"code": 401,
"errno": 109,
"error": "Unauthorized",
"more_info": "http://autopush.readthedocs.io/en/latest/http.html#error-codes",
"message": "Request did not validate Invalid Authorization Header"
}
Codici di stato HTTP
Esiste una serie di problemi che possono comportare la generazione di un codice di risposta non 201 da un servizio push. Di seguito è riportato un elenco dei codici di stato HTTP e del relativo significato in relazione al web push.
Codice di stato | Descrizione |
---|---|
429 | Troppe richieste. Il server delle applicazioni ha raggiunto un limite di frequenza con un servizio push. La risposta del servizio deve includere un messaggio "Riprova dopo" intestazione per indica quanto tempo deve passare prima che sia possibile effettuare un'altra richiesta. |
400 | Richiesta non valida. Una delle intestazioni non è valida oppure con formattazione scadente. |
404 | Non trovato. In questo caso, devi eliminare la sottoscrizione push dal tuo e attendere l'opportunità di riabbonarsi. |
410 | Non più disponibile. L'abbonamento non è più valido e deve essere rimosso dal tuo e il backend. Può essere riprodotto chiamando "unsubscribe()" su `PushSubscription`. |
413 | Dimensioni del payload troppo grandi. Il payload di dimensione minima che un servizio push deve è di 4096 byte (o 4 kB). Qualsiasi valore più grande può causare questo errore. |
Se il codice di stato HTTP non è presente nell'elenco e il messaggio di errore non è utile, controlla il Web Push Protocol specifiche per vedere se viene fatto riferimento al codice di stato insieme a uno scenario in cui può .
Problema di crittografia del payload
Se riesci ad attivare correttamente un messaggio push (ad esempio, puoi inviare un messaggio a un sito web servizio push e ricevono un codice di risposta 201), ma l'evento push non si attiva mai service worker, questo di solito indica che il browser non è riuscito decriptare il messaggio ricevuto.
In questo caso, dovresti visualizzare un messaggio di errore in DevTools di Firefox. in questo modo:
Per verificare se questo è il problema di Chrome, procedi nel seguente modo:
- Vai all'indirizzo about://gcm-internals e fai clic sul pulsante "Avvia registrazione". .
- Attiva un messaggio push e guarda nella sezione "Log degli errori di decrittografia dei messaggi".
Se si verifica un problema con la decrittografia del payload, verrà visualizzato un errore
simile a quello mostrato sopra. (nota come AES-GCM decryption failed
nella colonna dei dettagli).
Se questo è il tuo problema, esistono alcuni strumenti che potrebbero aiutarti a eseguire il debug della crittografia:
- Strumento di verifica della crittografia push di Peter Beverloo.
- Push del web: pagina di test della crittografia dei dati di Mozilla
Problema di connessione
Se non ricevi un evento push nel tuo service worker e vengono visualizzati errori di decrittografia, è possibile che il browser non riesca a connettersi un servizio push.
In Chrome, puoi controllare se il browser sta ricevendo messaggi esaminando
nel campo "Ricevi log dei messaggi" (sic) in about://gcm-internals
.
Se non ricevi il messaggio in modo tempestivo, assicurati di
lo stato della connessione del browser è CONNECTED
:
Se non è "COLLEGATO", potresti dover eliminare il tuo profilo corrente e creane uno nuovo. Se questo non è ancora una soluzione, invia una segnalazione di bug come suggerito di seguito.
Creazione di segnalazioni di bug
Se nessuna delle soluzioni precedenti risolve il problema e non c'è traccia della se il problema potrebbe essere, solleva un problema relativo al browser su cui hai problema con:
Per Chrome, devi sollevare il problema qui: https://bugs.chromium.org/p/chromium/issues/list Per Firefox, dovresti sollevare il problema su: https://bugzilla.mozilla.org/
Per fornire una segnalazione di bug efficace, devi fornire i seguenti dettagli:
- Browser su cui hai eseguito il test (ad es. Chrome versione 50, Chrome versione 51, Firefox versione 50, Firefox versione 51).
- Un esempio di
PushSubscription
che dimostri il problema. - Includi eventuali richieste di esempio (ovvero richieste di contenuti delle reti a un push incluse le intestazioni).
- Includi anche risposte di esempio da richieste di rete.
Se puoi fornire un esempio riproducibile, ovvero codice sorgente o un server sito, spesso velocizzano la diagnosi e la risoluzione del problema.
Passaggi successivi
- Panoramica delle notifiche push web
- Come funziona il push
- Iscrizione di un utente
- Esperienza utente con autorizzazione
- Invio di messaggi con le librerie push sul web
- Protocollo web push
- Gestione degli eventi push
- Visualizzazione di una notifica
- Comportamento delle notifiche
- Pattern di notifica comuni
- Domande frequenti sulle notifiche push
- Problemi comuni e bug di segnalazione