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à elevata. La consegna dei messaggi con priorità normale ed elevata funziona in questo modo:

  • 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à Sospensione, la consegna potrebbe essere ritardata per risparmiare la batteria fino a quando il dispositivo non esce dalla modalità Sospensione. Per i messaggi meno urgenti, come notifiche di nuove email, il mantenimento della sincronizzazione dell'interfaccia utente o la sincronizzazione dei dati delle app in background, scegli la priorità di pubblicazione normale.

  • Priorità elevata.FCM tenta di consegnare immediatamente i messaggi con priorità elevata, 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). I messaggi con priorità elevata in genere dovrebbero comportare l'interazione dell'utente con la tua app o le relative notifiche.

Scegliere tra messaggi con priorità elevata e normale

Sebbene i messaggi con priorità normale siano adatti per gli aggiornamenti generali, scegli la priorità elevata quando devi assicurarti 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à elevata, ti assicuri 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 con priorità elevata.

Elaborazione dei messaggi con priorità elevata e normale

Per i messaggi con priorità elevata e 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à elevata rispetto a quelli con priorità normale. Si prevede che questo tempo sia sufficiente solo per eseguire immediatamente il rendering di 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 far sì che la tua applicazione si trovi al di fuori di 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 metodo, devi seguire le seguenti indicazioni per verificare che le notifiche vengano elaborate completamente.onMessageReceived

  • Per le notifiche con priorità elevata: avvia un processo rapido utilizzando Android WorkManager per verificare che alla notifica con priorità elevata 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à elevata. È prevista una breve esenzione per i job rapidi pianificati immediatamente dopo l'invio di un onMessageReceived FCM con priorità elevata.
  • Per le notifiche con priorità normale: avvia invece un normale WorkRequest utilizzando Android WorkManager. In questo modo, verificherai 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à 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 vedere come impostare la priorità su elevata. 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à elevata in modalità Doze

Per assicurarti che le notifiche con priorità elevata 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 ulteriori 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à elevata 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à elevata.

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

I messaggi con priorità elevata 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à elevata, le notifiche vengono visualizzate in modo visibile all'utente, i messaggi con priorità elevata futuri 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 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 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 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 abilitata 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 consegna, puoi determinare se la priorità di un singolo messaggio è stata ridotta confrontando la priorità di consegna, 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 ulteriori informazioni e codice campione per l'esecuzione di query sull'API, consulta il nostro articolo sui dati di consegna aggregati. Puoi anche esplorare l'API dall' 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.

Risolvere i problemi relativi ai ritardi delle notifiche

  • Assicurati che le notifiche siano attivate 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à elevata a un'istanza dell'applicazione, devi verificare che le notifiche siano attivate.

  • 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. La richiamata al server prima della fine del tempo di elaborazione consentito potrebbe essere rischiosa per gli utenti su reti a latenza elevata.

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