Impostare la durata di un messaggio

FCM in genere recapita i messaggi immediatamente dopo l'invio. Tuttavia, questo potrebbe non essere sempre possibile. Ad esempio, il dispositivo potrebbe essere non disponibile o FCM potrebbe ritardare intenzionalmente i messaggi per impedire a un'app di consumare risorse eccessive e influire negativamente sulla durata della batteria.

In questi casi, FCM archivia il messaggio e lo recapita il prima possibile. Sebbene questo vada bene nella maggior parte dei casi, alcune app richiedono l'invio immediato delle notifiche. Ad esempio, una notifica per un a chiamata in arrivo o un invito a un evento.

Su Android e web, puoi specificare la durata massima di un messaggio. Il valore deve essere una durata compresa tra 0 e 2.419.200 secondi (28 giorni) e corrisponde al periodo di tempo massimo in cui FCM archivia e tenta di recapitare il messaggio. Per impostazione predefinita, le richieste che non contengono questo campo durano per un periodo massimo di quattro settimane.

Su iOS, puoi impostare l'intestazione apns-expiration nell'oggetto ApnsConfig. Per ulteriori dettagli, consulta la documentazione di Apple sull'invio di richieste di notifica ad APN.

Ecco alcuni possibili utilizzi di questa funzionalità:

  • Videochiamate in arrivo
  • Eventi di invito in scadenza
  • Eventi nel calendario

Un altro vantaggio della specifica della durata di un messaggio è che FCM non applica la limitazione dei messaggi comprimibili ai messaggi con un valore di durata di 0 secondi. Tieni presente che un valore ttl pari a 0 indica che i messaggi che non possono essere recapitati immediatamente vengono eliminati. Tuttavia, poiché questi messaggi non vengono mai archiviati, questa opzione offre la latenza migliore per l'invio di messaggi di notifica.

Ecco un esempio di richiesta che include ttl:

{
  "message":{
    "token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
    "data":{
      "Nick" : "Mario",
      "body" : "great match!",
      "Room" : "PortugalVSDenmark"
    },
    "apns":{
      "headers":{
        "apns-expiration":"1604750400"
      }
    },
    "android":{
      "ttl":"4500s"
    },
    "webpush":{
      "headers":{
        "TTL":"4500"
      }
    }
  }
}

Durata di un messaggio

Quando un server app pubblica un messaggio su FCM e riceve un ID messaggio indietro, non significa che il messaggio sia già stato recapitato al dispositivo. Significa invece che è stato accettato per la consegna. Il momento in cui il messaggio viene recapitato dipende da molti fattori.

Se il dispositivo è connesso ma in modalità Doze, un messaggio a bassa priorità viene archiviato da FCM finché il dispositivo non esce dalla modalità Doze. Se collapse_key è impostato e c'è un messaggio esistente con la stessa chiave di compressione e lo stesso token di registrazione in attesa di essere recapitato, il vecchio messaggio viene eliminato e sostituito dal nuovo. Tuttavia, se la chiave di compressione non è impostata, sia il nuovo che il vecchio messaggio vengono archiviati per la consegna futura.

Se il dispositivo non è connesso a FCM, il messaggio viene archiviato finché non viene stabilita una connessione. Quando viene stabilita una connessione, FCM recapita tutti i messaggi in attesa al dispositivo. Se il dispositivo non si connette più, il messaggio scade e viene eliminato dall'archiviazione di FCM. Il timeout predefinito è di quattro settimane, a meno che non sia impostato il flag ttl. Se l' app è stata disinstallata quando FCM tenta di recapitare un messaggio al dispositivo, FCM elimina immediatamente il messaggio e invalida il token di registrazione. I tentativi futuri di inviare un messaggio a quel dispositivo generano un errore NotRegistered.

Per i dispositivi Android, se il dispositivo non si è connesso a FCM per più di un mese, FCM accetta comunque il messaggio, ma lo elimina immediatamente. Se il dispositivo si connette entro quattro settimane dall'ultimo messaggio di dati inviato, l'app client riceve il onDeletedMessages() callback.

Per ottenere maggiori informazioni sulla consegna dei messaggi su piattaforme Android o Apple, puoi utilizzare la FCM dashboard di reporting, che registra il numero di messaggi inviati e aperti su dispositivi Apple e Android, insieme ai dati sulle impressioni per le app Android.