Per assegnare la priorità di pubblicazione ai messaggi downstream su Android, hai due opzioni: priorità normale e priorità alta. La consegna dei messaggi con priorità normale e alta funziona come segue:
Priorità normale. Questa è la priorità predefinita per i messaggi di dati e di notifica. I messaggi con priorità normale vengono recapitati immediatamente quando il dispositivo non è in modalità Sospensione. Quando il dispositivo è in modalità di sospensione, la consegna potrebbe essere ritardata per risparmiare batteria finché il dispositivo non esce dalla modalità di sospensione. Per i messaggi meno urgenti, come le notifiche di nuove email, la sincronizzazione della UI o la sincronizzazione dei dati dell'app in background, scegli la priorità di pubblicazione normale.
Priorità alta.FCM tenta di recapitare immediatamente i messaggi ad alta priorità, consentendo a FCM di riattivare un dispositivo in stato di sospensione quando necessario e di eseguire alcune elaborazioni limitate (incluso un accesso alla rete molto limitato). I messaggi ad alta priorità in genere dovrebbero comportare l'interazione dell'utente con la tua app o le sue notifiche.
Scelta tra messaggi con priorità alta e 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é i tempi di consegna dei messaggi con priorità normale possono essere influenzati dalla modalità di sospensione, l'impostazione della priorità alta per la maggior parte delle notifiche visibili agli utenti ne garantirà la consegna tempestiva. Ad esempio, le notifiche come i messaggi chat, i problemi con un account o gli aggiornamenti sulla consegna di cibo devono essere impostate su priorità alta.
Elaborazione dei messaggi con priorità alta e normale
Sia per i messaggi con priorità alta che per quelli con priorità normale ricevuti su un dispositivo Android, vengono concessi alcuni secondi per elaborare il payload del messaggio nel gestore onMessageReceived, con un tempo leggermente superiore per i messaggi con priorità alta rispetto a quelli con priorità normale. Questo tempo dovrebbe essere sufficiente solo per visualizzare immediatamente una notifica. Se devi eseguire altre operazioni, ad esempio caricare un'immagine dallo spazio sul dispositivo o chiamare i tuoi server per raccogliere contenuti aggiuntivi, dovrai seguire altri passaggi.
Il metodo onMessageReceived viene chiamato su un thread di lavoro separato. Come best practice, devi elaborare il payload del messaggio e visualizzare immediatamente una notifica all'interno del metodo onMessageReceived. Non devi effettuare chiamate di rete asincrone aggiuntive o elaborare il payload su un thread separato all'interno del metodo onMessageReceived, altrimenti l'applicazione potrebbe non rientrare in un ciclo di vita del processo valido prima che il payload venga elaborato completamente. In questo caso, potresti notare che alcuni messaggi FCM inviati generano notifiche in ritardo o mancanti.
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. Quando esegui l'override del metodo onMessageReceived, devi seguire le indicazioni riportate di seguito per verificare che le notifiche vengano elaborate completamente.
- Per le notifiche ad alta priorità: avvia un
processo rapido
utilizzando l'API
WorkManagerdi Android per verificare che la tua notifica ad alta priorità riceva un tempo di elaborazione prioritario per verificare che il rendering della notifica venga completato. La buona notizia è che, se temi di esaurire le quote dei processi rapidi a causa dell'elaborazione FCM ad alta priorità, non devi preoccuparti. Esiste una breve esenzione per i processi rapidi pianificati immediatamente dopo l'invio di un FCMonMessageReceivedad alta priorità. - Per le notifiche con priorità normale: avvia un
WorkRequestnormale utilizzando inveceWorkManagerdi Android. In questo modo, verrà verificato che il lavoro aggiuntivo richiesto per elaborare la notifica venga elaborato alla fine, senza utilizzare l'elaborazione con priorità e causare problemi di utilizzo della batteria non necessari.
Impostazione della priorità dei messaggi
Puoi inviare notifiche agli utenti utilizzando l'Admin SDK, l'API REST FCM e la console Firebase. Per modificare l'impostazione della priorità dall'Admin SDK e dall'API REST 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"
}
}
}
}
Testa le notifiche ad alta priorità in modalità Doze
Per assicurarti che le notifiche ad alta priorità vengano ricevute ed elaborate correttamente quando vengono ricevute da un utente, segui queste istruzioni per testare le notifiche:
- Imposta il dispositivo in modalità Doze seguendo le istruzioni riportate in Testa l'app con Doze.
- Accedi al token di registrazione FCM dalla tua app sul dispositivo di test. Per saperne di più su come accedere al token, consulta Invia un messaggio di prova a un'app in background.
- Una volta ottenuto il token FCM, invia la notifica ad alta priorità al dispositivo di test utilizzando il codice di invio delle notifiche FCM o un comando cURL con parametri di configurazione corrispondenti alla notifica ad alta priorità.
Deprioritizzazione di FCM ad alta priorità su Android
I messaggi ad alta priorità su Android sono destinati a contenuti sensibili al fattore tempo e visibili agli utenti e dovrebbero generare notifiche rivolte agli utenti. Se FCM rileva un pattern in cui i messaggi non generano notifiche rivolte agli utenti, i tuoi messaggi potrebbero essere declassati alla priorità normale o delegati per la gestione da parte di Google Play Services.
FCM utilizza 7 giorni di comportamento dei messaggi per determinare se ridurre la priorità o utilizzare un proxy per i messaggi; questa determinazione viene effettuata in modo indipendente per ogni istanza della tua applicazione. Se, in risposta ai messaggi ad alta priorità, le notifiche vengono visualizzate in modo visibile all'utente, i tuoi futuri messaggi ad alta priorità non saranno interessati.
Delega delle notifiche con Google Play Services
I messaggi di notifica ad alta priorità 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 che sia necessario avviarla. Questo viene fatto per offrire un'esperienza utente complessiva migliore sui dispositivi Android.
Tieni presente che i messaggi di notifica con proxy introducono modifiche al modo in cui vengono registrati i dati di analisi relativi ai messaggi ricevuti:
- Affinché i dati di analisi per le notifiche con proxy vengano registrati, l'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 con proxy. Questo perché i dati di analisi per le notifiche con proxy vengono registrati solo all'avvio dell'app e potrebbero non essere registrati affatto se la notifica non comporta l'apertura dell'app.
L'invio di messaggi di notifica tramite proxy in questo modo è il comportamento predefinito per le app che utilizzano Android Q e versioni successive e Google Play Services 19054000 o versioni successive. I messaggi inviati tramite l'API HTTP v1 vengono inoltrati tramite proxy, ma i messaggi inviati tramite la console Firebase o le API legacy non verranno inoltrati tramite proxy. Tieni presente che questa funzionalità è attualmente in versione beta ed è soggetta a modifiche.
Sebbene consigliamo vivamente di lasciare attiva la delega per i suoi vantaggi in termini di batteria e memoria del dispositivo, puoi disattivare questo comportamento in uno dei seguenti modi:
- A livello di app: nel file manifest dell'app, aggiungi l'istruzione
<meta-data android:name= "delivery_metrics_exported_to_big_query_enabled" android:value="false"/>. - Per istanza dell'app: per l'istanza dell'app, imposta
fun setNotificationDelegationEnabled(disable: Boolean): Task<Void!>nel flusso della UI per la tua app, a seconda del caso d'uso specifico. - Per singolo messaggio: imposta la chiave
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 deprioritizzato o meno confrontando la sua priorità di pubblicazione, da getPriority(), con la sua priorità originale, da getOriginalPriority().
Tutti i messaggi. L'API Aggregate Delivery Data di FCM può segnalare la percentuale di tutti i messaggi inviati ad 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 ulteriori informazioni e un codice campione per eseguire query sull'API, consulta il nostro articolo sui dati di pubblicazione aggregati. Puoi anche esplorare l'Explorer API.
Notifiche con proxy. Le notifiche con proxy non verranno conteggiate nelle attuali metriche di invio di FCM o GA, pertanto potresti riscontrare un calo fino al 15% nelle metriche di invio delle notifiche. Per i report sui messaggi con proxy, utilizza l'API Aggregate Delivery Data di FCM.
ProxyNotificationInsightPercentssegnala la percentuale di notifiche inoltrate correttamente tramite proxy, nonché i dettagli dei messaggi che non possono essere inoltrati correttamente tramite proxy.
Risoluzione dei problemi relativi ai ritardi delle 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, non verrà pubblicata nessuna delle tue notifiche e, di conseguenza, i tuoi messaggi verranno declassati. Devi 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 di dispositivi mobili Android utilizza reti con latenza elevata, evita di aprire una connessione ai tuoi server prima di visualizzare una notifica. La chiamata al server prima della fine del tempo di elaborazione consentito potrebbe essere rischiosa per gli utenti su reti con latenza elevata.
Includi invece i contenuti della notifica nel messaggio FCM e visualizzali immediatamente. Se devi sincronizzare altri contenuti in-app su Android, puoi pianificare un'attività con WorkManager per gestirla in background.