Su Android, hai due opzioni per assegnare la priorità di pubblicazione ai messaggi downstream: priorità normale e alta. La consegna dei messaggi con priorità normale e alta funziona nel seguente modo:
Priorità normale.Questa è la priorità predefinita per i messaggi di dati e di notifica. I messaggi con priorità normale vengono inviati immediatamente quando il dispositivo non è in modalità Sospensione. Quando il dispositivo è in modalità Doze, l'invio potrebbe essere ritardato per risparmiare batteria finché il dispositivo non esce dalla modalità Doze. Per i messaggi meno urgenti, ad esempio le notifiche di nuove email, la sincronizzazione dell'interfaccia utente o la sincronizzazione dei dati delle app in background, scegli la priorità di invio normale.
Priorità elevata.FCM tenta di inviare messaggi con priorità elevata immediatamente, consentendo a FCM di riattivare un dispositivo inattivo quando necessario e di eseguire un'elaborazione limitata (incluso l'accesso alla rete molto limitato). I messaggi con priorità elevata in genere devono comportare l'interazione dell'utente con la tua app o le relative notifiche.
Scegliere tra messaggi ad alta priorità e a priorità normale
Mentre i messaggi con priorità normale sono adatti per gli aggiornamenti generali, scegli la priorità alta quando devi garantire la consegna immediata per questioni o azioni urgenti. Poiché il tempo di consegna dei messaggi con priorità normale può essere influenzato dalla modalità Doze, l'impostazione della priorità alta per la maggior parte delle notifiche visibili agli utenti garantisce che vengano consegnate tempestivamente. Ad esempio, le notifiche come i messaggi di chat, i problemi con un account o gli aggiornamenti sulla consegna di cibo devono essere impostate su priorità alta.
Elaborazione dei messaggi ad alta e normale priorità
Per i messaggi con priorità alta e normale ricevuti su un dispositivo Android, vengono concessi diversi secondi per elaborare il payload del messaggio nel gestore onMessageReceived, con un tempo leggermente superiore allocato per i messaggi con priorità alta rispetto a quelli con priorità normale. Questo periodo di tempo dovrebbe essere sufficiente
per visualizzare immediatamente una notifica. Se devi eseguire ulteriori operazioni, ad esempio caricare un'immagine dallo spazio sul dispositivo o chiamare i tuoi server per raccogliere contenuti aggiuntivi, dovrai eseguire passaggi aggiuntivi.
Se hai bisogno di più tempo per elaborare il messaggio, ad esempio per recuperare
un imageUrl contenuto nel payload del messaggio, dovrai utilizzare un
costrutto come WorkManager o un servizio in primo piano per estendere il ciclo di vita
dell'applicazione. Devi seguire le seguenti indicazioni quando
esegui l'override del metodo onMessageReceived
per verificare che le notifiche siano completamente elaborate.
- Per le notifiche ad alta priorità:avvia un
processo rapido
utilizzando
WorkManagerdi Android per verificare che la notifica ad alta priorità riceva un tempo di elaborazione prioritario per verificare che il rendering della notifica venga completato. La buona notizia è che non devi preoccuparti di esaurire le quote dei processi rapidi a causa dell'elaborazione FCM ad alta priorità. È prevista una breve esenzione per i processi rapidi pianificati immediatamente dopo l'invio di un messaggio FCM ad alta prioritàonMessageReceived. - Per le notifiche con priorità normale:avvia una
normale
WorkRequestutilizzando l'WorkManagerdi Android. In questo modo, verrà verificato che il lavoro aggiuntivo necessario per elaborare la notifica venga elaborato alla fine, senza utilizzare l'elaborazione con priorità e causare problemi di utilizzo della batteria non necessari.
Impostare la priorità dei messaggi
Puoi inviare notifiche ai tuoi utenti utilizzando Admin SDK, l'API REST FCM e la console Firebase. Per modificare l'impostazione della priorità dall'API REST Admin SDK e FCM, devi aggiornare il payload JSON del messaggio. Puoi utilizzare il seguente esempio di codice per vedere come impostare la priorità su alta. Per le notifiche inviate dalla console, l'impostazione dei campi di notifica specifici per Android non è supportata.
{
"message": {
"notification": {
"body": "Purchase exceeding $500 detected",
"title": "Credit card purchase"
},
"data": {
"purchaser": "Your child",
"items": "Gravity Defier Sneakers"
},
"android": {
"priority": "high"
},
"apns": {
"headers": {
"apns-priority": "5"
}
}
}
}
Testare le notifiche di priorità elevata in modalità Doze
Per assicurarti che le notifiche di priorità elevata vengano ricevute ed elaborate correttamente quando vengono ricevute da un utente, segui queste istruzioni per testare le notifiche:
- Imposta il dispositivo sulla modalità Doze seguendo le istruzioni riportate in Testare l'app con Doze.
- Accedi al token di registrazione FCM dalla tua app sul dispositivo di test. Per maggiori informazioni su come accedere al token, vedi Inviare un messaggio di test a un'app in background.
- Una volta ottenuto il token FCM, invia la notifica di priorità elevata al dispositivo di test utilizzando il codice di invio delle notifiche FCM o un comando cURL con parametri di configurazione corrispondenti alla notifica di priorità elevata.
Riduzione della priorità delle notifiche ad alta priorità FCM su Android
I messaggi con priorità elevata su Android sono pensati per contenuti urgenti e visibili agli utenti e devono generare notifiche rivolte agli utenti. Se FCM rileva un pattern in cui i messaggi non generano notifiche visibili agli utenti, la priorità dei tuoi messaggi potrebbe essere ridotta a normale o delegata per la gestione da parte di Google Play Services.
FCM utilizza 7 giorni di comportamento dei messaggi per determinare se declassare o inviare tramite proxy i messaggi; questa determinazione viene effettuata in modo indipendente per ogni istanza dell'applicazione. Se, in risposta ai messaggi con priorità elevata, le notifiche vengono visualizzate in modo visibile all'utente, i tuoi futuri messaggi con priorità elevata non saranno interessati.
Delega delle notifiche con Google Play Services
I messaggi di notifica con priorità elevata che soddisfano determinati criteri vengono inviati tramite proxy da Google Play Services anziché essere declassati. Ciò significa che le notifiche vengono visualizzate da Google Play Services per conto dell'app, senza bisogno di avviarla. Questo viene fatto per fornire un'esperienza utente complessiva migliore sui dispositivi Android.
Tieni presente che i messaggi di notifica proxy introducono modifiche al modo in cui vengono segnalate le analisi relative alla ricezione dei messaggi:
- Affinché vengano generati report sull'analisi delle notifiche proxy, la tua app deve utilizzare l'SDK FCM versione 24.0.0 o successive.
- Potresti notare ritardi o cali nel numero di messaggi ricevuti rispetto al numero precedente all'introduzione delle notifiche proxy. Questo perché le analisi per le notifiche proxy vengono generate solo all'avvio dell'app e potrebbero non essere generate affatto se la notifica non comporta l'apertura dell'app.
Il proxy dei messaggi di notifica in questo modo è il comportamento predefinito per le app che utilizzano Android Q+ e Google Play Services versione 19054000 o successive. I messaggi inviati tramite l'API HTTP v1 vengono inviati tramite proxy, ma i messaggi inviati tramite la console Firebase o le API legacy non verranno inviati tramite proxy. Tieni presente che questa funzionalità è attualmente in versione beta ed è soggetta a modifiche.
Sebbene ti consigliamo vivamente di lasciare attivata la delega per i vantaggi che offre alla batteria e alla memoria del dispositivo, puoi disattivare questo comportamento in uno dei seguenti modi:
- A livello di app: nel manifest dell'app, aggiungi la direttiva
<meta-data android:name= "delivery_metrics_exported_to_big_query_enabled" android:value="false"/>. - In base all'istanza dell'app: per l'istanza dell'app, imposta
fun setNotificationDelegationEnabled(disable: Boolean): Task<Void!>nel flusso UI per la tua app, a seconda del caso d'uso specifico. - Per ogni messaggio: imposta il tasto
proxysuDENYnell'oggettoAndroidNotificationper la richiesta di invio.
Misurazione della riduzione della priorità dei messaggi su Android
Messaggi individuali. Al momento della consegna, puoi determinare se un singolo messaggio è stato declassato o meno confrontando la sua priorità di consegna, ottenuta da getPriority(), con la sua priorità originale, ottenuta da getOriginalPriority().
Tutti i messaggi. L'FCMAPI Aggregate Delivery Data può segnalare la percentuale di tutti i tuoi messaggi per Android che vengono deprioritizzati. Alcuni messaggi potrebbero essere omessi dai report sui dati aggregati, ma nel complesso dovrebbero fornire una visione globale dei tassi di deprioritizzazione dei messaggi. Per maggiori informazioni e codice campione per eseguire query sull'API, consulta il nostro articolo sui dati di pubblicazione aggregati. L'API può essere esplorata anche dall'API Explorer.
Notifiche proxy.Le notifiche proxy non verranno conteggiate nelle metriche di pubblicazione attuali di FCM o GA, pertanto potresti riscontrare un calo fino al 15% nelle metriche di pubblicazione delle notifiche. Per i report sui messaggi proxy, utilizza l'API Aggregate Delivery Data.
ProxyNotificationInsightPercentsriporta la percentuale di notifiche proxy pubblicate correttamente, nonché i dettagli dei messaggi per i quali non è possibile eseguire il proxy.FCM
Risoluzione dei problemi relativi ai ritardi nelle notifiche
Assicurati che le notifiche siano attive per l'istanza dell'app.Se l'utente ha disattivato l'autorizzazione alle notifiche per la tua app, nessuna delle tue notifiche verrà pubblicata e, di conseguenza, i tuoi messaggi avranno una priorità inferiore. Ti consigliamo di verificare che le notifiche siano attive prima di inviare messaggi ad alta priorità a un'istanza dell'applicazione.
Evita di effettuare chiamate di rete aggiuntive durante l'elaborazione della notifica: poiché una piccola parte della popolazione mobile Android si trova su reti ad alta latenza, evita di aprire una connessione ai tuoi server prima di visualizzare una notifica. Il richiamo al server prima della fine del tempo di elaborazione consentito potrebbe essere rischioso per gli utenti su reti ad alta latenza.
Includi invece i contenuti della notifica nel messaggio FCM e visualizzali immediatamente. Se devi eseguire la sincronizzazione per ulteriori contenuti in-app su Android, puoi pianificare un'attività con WorkManager per gestirla in background.