Impostare e gestire la priorità dei messaggi Android

Hai due opzioni per assegnare la priorità di pubblicazione ai messaggi downstream su Android: 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 consegnati immediatamente quando il dispositivo non è in modalità di sospensione. Quando il dispositivo è in modalità Doze, la consegna potrebbe essere ritardata per risparmiare batteria fino a quando il dispositivo non esce dalla modalità Doze. Per i messaggi meno urgenti, come le notifiche di nuove email, la sincronizzazione dell'interfaccia utente o la sincronizzazione dei dati dell'app in background, scegli la priorità di pubblicazione normale.

  • Priorità alta.FCM tenta di consegnare immediatamente i messaggi con priorità alta, consentendo a FCM di riattivare un dispositivo in modalità di sospensione quando necessario e di eseguire un'elaborazione limitata (incluso l'accesso alla rete molto limitato). In genere, i messaggi con priorità alta dovrebbero comportare l'interazione dell'utente con la tua app o le relative notifiche.

Scegliere tra messaggi con priorità alta e normale

Sebbene i messaggi con priorità normale siano 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, se imposti la maggior parte delle notifiche visibili all'utente con priorità alta, queste verranno 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 con priorità alta.

Elaborazione dei messaggi con priorità alta e normale

Sia per i messaggi con priorità alta sia 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 po' di tempo in più allocato per i messaggi con priorità alta rispetto a quelli con priorità normale. Si prevede che questo tempo sia sufficiente solo per visualizzare immediatamente una notifica. Se devi eseguire ulteriori operazioni, ad esempio caricare un'immagine dallo spazio sul dispositivo o chiamare i server per raccogliere contenuti aggiuntivi, dovrai eseguire passaggi aggiuntivi.

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, in quanto ciò potrebbe causare l'uscita della tua applicazione da un ciclo di vita del processo valido prima che il payload venga elaborato completamente. In questo caso, potresti notare che alcuni messaggi FCM inviati comportano notifiche ritardate o mancanti.

Se hai bisogno di ulteriore 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 onMessageReceivedmetodo , devi seguire le seguenti indicazioni per verificare che le notifiche vengano elaborate completamente.

  • Per le notifiche con priorità alta: avvia un job accelerato utilizzando Android WorkManager per verificare che alla notifica con priorità alta venga assegnato un tempo di elaborazione prioritario per verificare che il rendering della notifica venga eseguito fino al completamento. La buona notizia è che non devi preoccuparti di esaurire le quote dei processi rapidi a causa dell'elaborazione FCM con priorità alta. È prevista una breve esenzione per i processi rapidi pianificati immediatamente dopo l'invio di un onMessageReceived FCM con priorità alta.
  • Per le notifiche con priorità normale: avvia invece un normale WorkRequest utilizzando Android WorkManager. In questo modo, il lavoro aggiuntivo necessario per elaborare la notifica verrà elaborato alla fine, senza utilizzare l'elaborazione con priorità e causare problemi di consumo della batteria non necessari.

Impostare la priorità per i messaggi

Puoi inviare notifiche agli utenti utilizzando il Admin SDK, l' FCM REST API 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 scoprire come impostare la priorità su alta. Per le notifiche inviate dalla console, l'impostazione dei campi di notifica specifici di 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 con priorità alta in modalità Doze

Per assicurarti che le notifiche con priorità alta vengano ricevute ed elaborate correttamente quando vengono ricevute da un utente, segui queste istruzioni per testare le notifiche:

  1. Imposta il dispositivo in modalità Doze seguendo le istruzioni riportate in Testare l'app con Doze.
  2. Accedi al token di registrazione FCM dalla tua app sul dispositivo di test. Per maggiori informazioni su come accedere al token, consulta Inviare un messaggio di test a un'app in background.
  3. Una volta ottenuto il token FCM, invia la notifica con priorità alta al dispositivo di test utilizzando il codice di invio delle notifiche FCM o un comando cURL con parametri di configurazione corrispondenti alla notifica con priorità alta.

Riduzione della priorità di FCM con priorità alta su Android

I messaggi con priorità alta su Android sono destinati a contenuti urgenti e visibili all'utente e devono generare notifiche rivolte all'utente. Se FCM rileva un pattern in cui i messaggi non generano notifiche rivolte all'utente, la priorità dei 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 ridurre la priorità o inviare i messaggi tramite proxy messaggi; questa determinazione viene effettuata in modo indipendente per ogni istanza della tua applicazione. Se, in risposta ai messaggi con priorità alta, le notifiche vengono visualizzate in modo visibile all'utente, i futuri messaggi con priorità alta non saranno interessati.

Delega delle notifiche con Google Play Services

I messaggi di notifica con priorità alta che soddisfano determinati criteri vengono inviati tramite proxy da Google Play Services anziché essere ridotti di priorità. Ciò significa che le notifiche vengono visualizzate da Google Play Services per conto dell'app, senza la necessità di avviare l'app. Questa operazione viene eseguita per offrire un'esperienza utente complessiva migliore sui dispositivi Android.

Tieni presente che i messaggi di notifica inviati tramite proxy introducono modifiche nella modalità di generazione dei report delle analisi relative ai messaggi ricevuti:

  • Affinché le analisi delle notifiche inviate tramite proxy vengano generate, 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 inviate tramite proxy. Questo perché le analisi delle notifiche inviate tramite proxy vengono generate solo all'avvio dell'app e potrebbero non essere generate affatto se la notifica non comporta l'apertura dell'app.

L'invio tramite 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 precedenti non verranno inviati tramite proxy. Tieni presente che questa funzionalità è attualmente in versione beta ed è soggetta a modifiche.

Sebbene ti consigliamo vivamente di lasciare attiva 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 file manifest dell'app, aggiungi la direttiva <meta-data android:name= "delivery_metrics_exported_to_big_query_enabled" android:value="false"/>.
  • A livello di istanza dell'app: per l'istanza dell'app, imposta fun setNotificationDelegationEnabled(disable: Boolean): Task<Void!> nel flusso dell'interfaccia utente dell'app, a seconda del caso d'uso specifico.
  • Per ogni messaggio: imposta la chiave proxy su DENY nell'oggetto AndroidNotification per la richiesta di invio.

Misurare la riduzione della priorità dei messaggi su Android

  • Singoli messaggi. Al momento della pubblicazione, puoi determinare se la priorità di un singolo messaggio è stata ridotta confrontando la priorità di pubblicazione, da getPriority(), con la priorità originale, da getOriginalPriority().

  • Tutti i messaggi. L'FCMAPI Aggregate Delivery Data può segnalare la percentuale di tutti i messaggi inviati ad Android la cui priorità è stata ridotta. Alcuni messaggi potrebbero essere omessi dai report dei dati aggregati, ma in generale dovrebbero fornire una visione globale delle percentuali di riduzione della priorità dei messaggi. Per maggiori informazioni e codice campione per l'esecuzione di query sull'API, consulta il nostro articolo sui dati di consegna aggregati. Puoi anche esplorare l' Explorer API.

  • Notifiche inviate tramite proxy. Le notifiche inviate tramite proxy non verranno conteggiate nelle metriche di consegna FCM o GA attuali, pertanto potresti riscontrare un calo fino al 15% nelle metriche di consegna delle notifiche. Per i report sui messaggi inviati tramite proxy, utilizza l' FCMAPI Aggregate Delivery Data. ProxyNotificationInsightPercents segnala la percentuale di notifiche inviate tramite proxy correttamente, nonché i dettagli dei messaggi che non possono essere inviati tramite proxy correttamente.

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 alcuna notifica e, di conseguenza, la priorità dei messaggi verrà ridotta. Prima di inviare messaggi con priorità alta a un'istanza dell'applicazione, devi verificare che le notifiche siano attive.

  • Evita di effettuare chiamate di rete aggiuntive durante l'elaborazione della notifica. Poiché una piccola parte della popolazione mobile Android utilizza reti a latenza elevata, evita di aprire una connessione ai server prima di visualizzare una notifica. Richiamare il server prima della fine del tempo di elaborazione consentito potrebbe essere rischioso per gli utenti su reti a latenza elevata.

    Includi invece i contenuti della notifica nel messaggio FCM e visualizzali immediatamente. Se devi sincronizzare contenuti aggiuntivi in-app su Android, puoi pianificare un'attività con WorkManager per gestirla in background.