FCM in genere recapita i messaggi immediatamente dopo l'invio. Tuttavia, potrebbe non essere sempre possibile. Ad esempio, il dispositivo potrebbe non essere 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 memorizza il messaggio e lo invia il prima possibile. Anche se nella maggior parte dei casi questo non è un problema, alcune app richiedono l'invio di notifiche senza ritardi. Ad esempio, una notifica per una chiamata in arrivo o un invito a un evento.
Su Android e sul 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 memorizza 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 maggiori dettagli, consulta la documentazione di Apple sull'invio di richieste di notifica ad APN.
Ecco alcuni possibili utilizzi di questa funzionalità:
- Chiamate in arrivo con chat video
- Eventi di invito in scadenza
- Eventi di 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 Time to Live di 0 secondi. Tieni presente che un valore ttl
pari a 0 indica
che i messaggi che non possono essere consegnati immediatamente vengono eliminati. Tuttavia, poiché
questi messaggi non vengono mai archiviati, ciò garantisce la migliore latenza 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 il server di un'app pubblica un messaggio su FCM e riceve un ID messaggio di risposta, 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 memorizzato 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
token di registrazione in attesa di consegna, il vecchio messaggio viene eliminato e poi
il nuovo messaggio prende il suo posto. Tuttavia, se la chiave di compressione non è impostata, sia i messaggi nuovi che quelli vecchi vengono archiviati per la consegna futura.
Se il dispositivo non è connesso a FCM, il messaggio viene memorizzato finché non viene stabilita una
connessione. Quando viene stabilita una connessione, FCM
invia tutti i messaggi in attesa al dispositivo. Se il dispositivo non si connette
più, il messaggio scade e viene eliminato dallo spazio di 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 lo scarta immediatamente e invalida il token di registrazione. I tentativi futuri di inviare un messaggio a quel dispositivo genereranno
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 che gli hai inviato, la tua app client riceve il callback onDeletedMessages()
.
Per ottenere maggiori informazioni sulla distribuzione dei messaggi sulle piattaforme Android o Apple, puoi utilizzare la dashboard dei report, che registra il numero di messaggi inviati e aperti su dispositivi Apple e Android, nonché i dati sulle impressioni per le app per Android.FCM