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 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 recapita appena possibile. Sebbene questo non sia un problema nella maggior parte dei casi, esistono alcune app che 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 durante il quale FCM archivia e tenta di recapitare il messaggio. Per impostazione predefinita, le richieste che non contengono questo campo durano al massimo 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à:

  • 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 pari a 0 secondi. Tieni presente che un valore ttl pari a 0 indica che i messaggi che non possono essere recapitati immediatamente vengono ignorati. 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 dell'app pubblica un messaggio su FCM e riceve un ID messaggio, 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à Sospensione, un messaggio con priorità bassa viene archiviato da FCM finché il dispositivo non esce dalla modalità Sospensione. Se collapse_key è impostata ed esiste un messaggio con la stessa chiave di compressione e lo stesso token di registrazione in attesa di recapito, il messaggio precedente viene ignorato e sostituito dal nuovo messaggio. Tuttavia, se la chiave di compressione non è impostata, sia i messaggi nuovi che quelli precedenti vengono archiviati per la consegna futura.

Se il dispositivo non è connesso a FCM, il messaggio viene archiviato fino a quando 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 rimosso 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 ignora immediatamente e invalida il token di registrazione. I futuri tentativi 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 ignora immediatamente. Se il dispositivo si connette entro quattro settimane dall'ultimo messaggio di dati che gli hai inviato, l'app client riceve il callback onDeletedMessages().

Per saperne di più sulla distribuzione dei messaggi sulle piattaforme Android o Apple, puoi utilizzare la dashboard dei report di FCM, che registra il numero di messaggi inviati e aperti sui dispositivi Apple e Android, insieme ai dati relativi alle impressioni per le app per Android.