Impostare la durata di un messaggio

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