Protocollo HTTP di Firebase Cloud Messaging

Questo documento fornisce un riferimento per la sintassi HTTP utilizzata per trasmettere i messaggi dal server dell'app alle app client tramite Firebase Cloud Messaging.

Quando utilizzi il protocollo HTTP precedente, il server dell'app deve indirizzare tutte le richieste HTTP a questo endpoint:

https://fcm.googleapis.com/fcm/send

I parametri e le opzioni disponibili rientrano nelle seguenti categorie generali:

Sintassi dei messaggi downstream

Questa sezione fornisce la sintassi per l'invio di messaggi a valle e l'interpretazione delle risposte HTTP da Firebase Cloud Messaging.

Messaggi HTTP downstream (JSON)

La tabella seguente elenca i target, le opzioni e il payload per i messaggi JSON HTTP.

Tabella 1. Destinatari, opzioni e payload per i messaggi HTTP a valle (JSON).

Parametro Utilizzo Descrizione
Target
to Facoltativo, stringa

Questo parametro specifica il destinatario di un messaggio.

Il valore può essere il token di registrazione di un dispositivo, la chiave di notifica di un gruppo di dispositivi o un singolo argomento (con prefisso /topics/). Per l'invio a più argomenti, utilizza il parametro condition.

registration_ids
Facoltativo, array di stringhe

Questo parametro specifica il destinatario di un messaggio multicast, un messaggio inviato a più di un token di registrazione.

Il valore deve essere un array di token di registrazione a cui inviare il messaggio multicast. L'array deve contenere almeno 1 e al massimo 1000 token di registrazione. Per inviare un messaggio a un singolo dispositivo, utilizza il parametro to.

I messaggi multicast sono consentiti solo utilizzando il formato JSON HTTP.

condition Facoltativo, stringa

Questo parametro specifica un'espressione logica di condizioni che determinano il target del messaggio.

Condizione supportata: Argomento, formattato come "'yourTopic' in topics". Questo valore non è sensibile alle maiuscole.

Operatori supportati: &&, ||. Sono supportati al massimo due operatori per messaggio dell'argomento.

notification_key
Deprecato
Facoltativo, stringa

Questo parametro è deprecato. Utilizza invece to per specificare i destinatari del messaggio. Per saperne di più su come inviare messaggi su più dispositivi, consulta la documentazione della tua piattaforma.

Opzioni
collapse_key Facoltativo, stringa

Questo parametro identifica un gruppo di messaggi (ad es. con collapse_key: "Updates Available") che possono essere compressi, in modo che solo il ultimo messaggio venga inviato quando è possibile riprendere l'invio. L'obiettivo è evitare di inviare troppi messaggi uguali quando il dispositivo torna online o diventa attivo.

Tieni presente che non è garantito l'ordine in cui i messaggi vengono inviati.

Nota: in un determinato momento sono consentite al massimo 4 chiavi di collasso diverse. Ciò significa che FCM può memorizzare contemporaneamente 4 messaggi diversi per app client. Se superi questo numero, non è garantito quali 4 chiavi di collasso verranno conservate da FCM.

priority Facoltativo, stringa

Imposta la priorità del messaggio. I valori validi sono "normale" e "alto". Sulle piattaforme Apple, queste corrispondono alle priorità APN 5 e 10.

Per impostazione predefinita, i messaggi di notifica vengono inviati con priorità elevata e i messaggi di dati vengono inviati con priorità normale. La priorità normale ottimizza il consumo della batteria dell'app client e deve essere utilizzata a meno che non sia richiesta l'invio immediato. Per i messaggi con priorità normale, l'app potrebbe riceverli con un ritardo non specificato.

Quando un messaggio viene inviato con priorità elevata, viene inviato immediatamente e l'app può mostrare una notifica.

content_available Facoltativo, booleano

Sulle piattaforme Apple, utilizza questo campo per rappresentare content-available nel payload APN. Quando viene inviata una notifica o un messaggio e questo valore è impostato su true, viene risvegliata un'app client inattiva e il messaggio viene inviato tramite APN come notifica silenziosa e non tramite FCM. Tieni presente che non è garantito che le notifiche silenziose negli APN vengano inviate e che possono dipendere da fattori quali l'attivazione della modalità Risparmio energetico da parte dell'utente, l'uscita forzata dall'app e così via. Su Android, i messaggi di dati riattivano l'app per impostazione predefinita. Su Chrome, non è attualmente supportato.

mutable_content Facoltativo, booleano JSON

Sulle piattaforme Apple, utilizza questo campo per rappresentare mutable-content nel payload APNs. Quando viene inviata una notifica e questo valore è impostato su true, i contenuti della notifica possono essere modificati prima della visualizzazione utilizzando un' Estensione dell'app per il servizio di notifica. Questo parametro verrà ignorato per Android e il web.

time_to_live Facoltativo, numero

Questo parametro specifica per quanto tempo (in secondi) il messaggio deve essere conservato nello spazio di archiviazione FCM se il dispositivo è offline. La durata (TTL) massima supportata è di 4 settimane e il valore predefinito è 4 settimane. Per ulteriori informazioni, vedi Impostare la durata di un messaggio.

restricted_package_
name
(solo Android)
Facoltativo, stringa Questo parametro specifica il nome del pacchetto dell'applicazione a cui devono corrispondere i token di registrazione per ricevere il messaggio.
dry_run Facoltativo, booleano

Se questo parametro viene impostato su true, consente agli sviluppatori di testare una richiesta senza inviare effettivamente un messaggio.

Il valore predefinito è false.

Payload
data Facoltativo, oggetto

Questo parametro specifica le coppie chiave-valore personalizzate del payload del messaggio.

Ad esempio, con data:{"score":"3x1"}:

Sulle piattaforme Apple, se il messaggio viene inviato tramite APN, rappresenta i campi di dati personalizzati. Se viene inviato tramite FCM, verrà rappresentato come dizionario di valori chiave in AppDelegate application:didReceiveRemoteNotification:.

Su Android, si otterrà un extra intent denominato score con il valore di stringa 3x1.

La chiave non deve essere una parola riservata ("from", "message_type" o qualsiasi parola che inizi con "google" o "gcm"). Non utilizzare le parole definite in questa tabella (ad esempio collapse_key).

Si consiglia di utilizzare valori di tipo stringa. Devi convertire i valori in oggetti o altri tipi di dati non di stringa (ad es. interi o booleani) in stringa.

notification Facoltativo, oggetto Questo parametro specifica le coppie chiave/valore predefinite visibili all'utente del payload della notifica. Per maggiori dettagli, consulta il supporto del payload della notifica. Per ulteriori informazioni sulle opzioni dei messaggi di notifica e dei messaggi di dati, consulta Tipi di messaggi. Se viene fornito un payload di notifica o se l'opzione content_available è impostata su true per un messaggio inviato a un dispositivo Apple, il messaggio viene inviato tramite APN, altrimenti viene inviato tramite FCM.

Supporto del payload delle notifiche

Le seguenti tabelle elencano le chiavi predefinite disponibili per la creazione di messaggi di notifica per iOS e Android.

Tabella 2a. iOS: chiavi per i messaggi di notifica

Parametro Utilizzo Descrizione
title Facoltativo, stringa

Il titolo della notifica.

Questo campo non è visibile su smartphone e tablet.

body Facoltativo, stringa

Il corpo del testo della notifica.

sound Facoltativo, stringa

Il suono da riprodurre quando il dispositivo riceve la notifica.

Stringa che specifica i file audio nel bundle principale dell'app client o nella cartella Library/Sounds del contenitore di dati dell'app. Per scoprire di più, consulta la libreria degli sviluppatori iOS.

badge Facoltativo, stringa

Il valore del badge sull'icona dell'app nella schermata Home.

Se non viene specificato, il badge non viene modificato.

Se impostato su 0, il badge viene rimosso.

click_action Facoltativo, stringa

L'azione associata al clic di un utente sulla notifica.

Corrisponde a category nel payload APN.

subtitle Facoltativo, stringa

Il sottotitolo della notifica.

body_loc_key Facoltativo, stringa

La chiave della stringa del corpo nelle risorse stringa dell'app da utilizzare per localizzare il testo del corpo in base alla localizzazione corrente dell'utente.

Corrisponde a loc-key nel payload APN.

Per ulteriori informazioni, consulta Riferimento alle chiavi del payload e Localizzazione dei contenuti delle notifiche remote.

body_loc_args Facoltativo, array JSON come stringa

Valori di stringa variabili da utilizzare al posto degli specificatori di formato in body_loc_key da utilizzare per localizzare il testo del corpo in base alla localizzazione corrente dell'utente.

Corrisponde a loc-args nel payload APN.

Per ulteriori informazioni, consulta Riferimento alle chiavi del payload e Localizzazione dei contenuti delle notifiche remote.

title_loc_key Facoltativo, stringa

La chiave della stringa del titolo nelle risorse stringa dell'app da utilizzare per localizzare il testo del titolo in base alla localizzazione corrente dell'utente.

Corrisponde a title-loc-key nel payload APN.

Per ulteriori informazioni, consulta Riferimento alle chiavi del payload e Localizzazione dei contenuti delle notifiche remote.

title_loc_args Facoltativo, array JSON come stringa

Valori di stringa variabili da utilizzare al posto degli specificatori di formato in title_loc_key da utilizzare per localizzare il testo del titolo in base alla localizzazione corrente dell'utente.

Corrisponde a title-loc-args nel payload APN.

Per ulteriori informazioni, consulta Riferimento alle chiavi del payload e Localizzazione dei contenuti delle notifiche remote.

Tabella 2b. Android: chiavi per i messaggi di notifica

Parametro Utilizzo Descrizione
title Facoltativo, stringa

Il titolo della notifica.

body Facoltativo, stringa

Il corpo del testo della notifica.

android_channel_id Facoltativo, stringa

L' ID canale della notifica (novità di Android O).

L'app deve creare un canale con questo ID prima che venga ricevuta una notifica con questo ID canale.

Se non invii questo ID canale nella richiesta o se l'ID canale fornito non è stato ancora creato dall'app, FCM utilizza l'ID canale specificato nel file manifest dell'app.

icon Facoltativo, stringa

L'icona della notifica.

Imposta l'icona di notifica su myicon per la risorsa drawable myicon. Se non invii questa chiave nella richiesta, FCM mostra l'icona del programma di avvio specificata nel file manifest dell'app.

sound Facoltativo, stringa

Il suono da riprodurre quando il dispositivo riceve la notifica.

Supporta "default" o il nome file di una risorsa audio inclusa nell'app. I file audio devono trovarsi in /res/raw/.

tag Facoltativo, stringa

Identificatore utilizzato per sostituire le notifiche esistenti nel riquadro a scomparsa delle notifiche.

Se non specificato, ogni richiesta crea una nuova notifica.

Se specificato e se è già visualizzata una notifica con lo stesso tag, la nuova notifica sostituisce quella esistente nel riquadro delle notifiche.

color Facoltativo, stringa

Il colore dell'icona della notifica, espresso in formato #rrggbb.

click_action Facoltativo, stringa

L'azione associata al clic di un utente sulla notifica.

Se specificato, un'attività con un filtro per intenzione corrispondente viene avviata quando un utente fa clic sulla notifica.

body_loc_key Facoltativo, stringa

La chiave della stringa del corpo nelle risorse stringa dell'app da utilizzare per localizzare il testo del corpo in base alla localizzazione corrente dell'utente.

Per saperne di più, consulta la sezione Risorse stringa.

body_loc_args Facoltativo, array JSON come stringa

Valori di stringa variabili da utilizzare al posto degli specificatori di formato in body_loc_key da utilizzare per localizzare il testo del corpo in base alla localizzazione corrente dell'utente.

Per ulteriori informazioni, consulta Formattazione e stili.

title_loc_key Facoltativo, stringa

La chiave della stringa del titolo nelle risorse stringa dell'app da utilizzare per localizzare il testo del titolo in base alla localizzazione corrente dell'utente.

Per saperne di più, consulta la sezione Risorse stringa.

title_loc_args Facoltativo, array JSON come stringa

Valori di stringa variabili da utilizzare al posto degli specificatori di formato in title_loc_key da utilizzare per localizzare il testo del titolo in base alla localizzazione corrente dell'utente.

Per ulteriori informazioni, consulta Formattazione e stili.

Tabella 2c. Web (JavaScript): chiavi per i messaggi di notifica

Parametro Utilizzo Descrizione
title Facoltativo, stringa

Il titolo della notifica.

body Facoltativo, stringa

Il corpo del testo della notifica.

icon Facoltativo, stringa

L'URL da utilizzare per l'icona della notifica.

click_action Facoltativo, stringa

L'azione associata al clic di un utente sulla notifica.

Per tutti i valori dell'URL, è obbligatorio HTTPS.

Messaggi HTTP downstream (testo normale)

La tabella seguente elenca la sintassi per i target, le opzioni e il payload nei messaggi HTTP downstream in testo normale.

Tabella 3. Destinatari, opzioni e payload per i messaggi HTTP in testo normale a valle.

Parametro Utilizzo Descrizione
Target
registration_id Obbligatorio, stringa

Questo parametro specifica le app client (token di registrazione) che ricevono il messaggio.

La messaggistica multicast (invio a più di un token di registrazione) è consentita solo utilizzando il formato JSON HTTP.

Opzioni
collapse_key Facoltativo, stringa Per informazioni dettagliate, consulta la tabella 1.
time_to_live Facoltativo, numero Per informazioni dettagliate, consulta la tabella 1.
restricted_package_name Facoltativo, stringa Per informazioni dettagliate, consulta la tabella 1.
dry_run Facoltativo, booleano Per informazioni dettagliate, consulta la tabella 1.
Payload
data.<key> Facoltativo, stringa

Questo parametro specifica le coppie chiave/valore del payload del messaggio. Non esiste un limite al numero di parametri chiave-valore, ma esiste un limite di dimensione totale del messaggio di 4096 byte.

Ad esempio, in Android, "data.score"."3x1" genererà un extra intent chiamato score con il valore di stringa 3x1.

La chiave non deve essere una parola riservata ("from", "message_type" o qualsiasi parola che inizi con "google" o "gcm"). Non utilizzare le parole definite in questa tabella (ad esempio collapse_key).

Interpretazione di una risposta di messaggio a valle

Il server dell'app deve valutare sia l'intestazione che il corpo della risposta al messaggio per interpretare la risposta al messaggio inviata da FCM. La seguente tabella descrive le possibili risposte.

Tabella 4. Intestazione della risposta del messaggio HTTP a valle.

Risposta Descrizione
200 Il messaggio è stato elaborato correttamente. Il corpo della risposta conterrà maggiori dettagli sullo stato del messaggio, ma il relativo formato dipenderà dal fatto che la richiesta sia in formato JSON o in testo normale. Per ulteriori dettagli, consulta la tabella 5.
400 Si applica solo alle richieste JSON. Indica che la richiesta non è stata analizzata come JSON o che conteneva campi non validi (ad esempio, è stata passata una stringa dove era previsto un numero). Il motivo esatto dell'errore è descritto nella risposta e il problema deve essere risolto prima che sia possibile riprovare a inviare la richiesta.
401 Si è verificato un errore durante l'autenticazione dell'account mittente.
5xx Gli errori nell'intervallo 500-599 (ad esempio 500 o 503) indicano che si è verificato un errore interno nel backend di FCM durante il tentativo di elaborazione della richiesta o che il server non è temporaneamente disponibile (ad esempio a causa di timeout). Il mittente deve riprovare in un secondo momento, rispettando qualsiasi intestazione Retry-After inclusa nella risposta. I server delle applicazioni devono implementare il backoff esponenziale.

La tabella seguente elenca i campi nel corpo della risposta del messaggio a valle (JSON).

Tabella 5. Corpo della risposta del messaggio HTTP a valle (JSON).

Parametro Utilizzo Descrizione
multicast_id Obbligatorio, numero ID (numero) univoco che identifica il messaggio multicast.
success Obbligatorio, numero Numero di messaggi elaborati senza errori.
failure Obbligatorio, numero Numero di messaggi che non è stato possibile elaborare.
results Obbligatorio, array di oggetti Array di oggetti che rappresentano lo stato dei messaggi elaborati. Gli oggetti sono elencati nello stesso ordine della richiesta (ovvero, per ogni ID registrazione nella richiesta, il relativo risultato è elencato nello stesso indice nella risposta).
  • message_id: stringa che specifica un ID univoco per ogni messaggio elaborato correttamente.
  • error: stringa che specifica l'errore riscontrato durante l'elaborazione del messaggio per il destinatario. I valori possibili sono riportati nella tabella 9.

Tabella 6. Corpo della risposta HTTP del messaggio argomento (JSON).

Parametro Utilizzo Descrizione
message_id Facoltativo, numero L'ID messaggio dell'argomento quando FCM ha ricevuto correttamente la richiesta e tenterà di inviarla a tutti i dispositivi iscritti.
error Facoltativo, stringa Errore che si è verificato durante l'elaborazione del messaggio. I valori possibili sono riportati nella tabella 9.

Tabella 7. Risposta di successo per il corpo della risposta del messaggio HTTP a valle (testo normale).

Parametro Utilizzo Descrizione
id Obbligatorio, stringa Questo parametro specifica l'ID messaggio univoco FCM elaborato correttamente.
registration_id Facoltativo, stringa Questo parametro specifica il token di registrazione per l'app client a cui è stato elaborato e inviato il messaggio.

Tabella 8. Risposta di errore per il corpo della risposta del messaggio HTTP a valle (testo normale).

Parametro Utilizzo Descrizione
Error Obbligatorio, stringa Questo parametro specifica il valore dell'errore durante l'elaborazione del messaggio per il destinatario. Per informazioni dettagliate, consulta la tabella 9.

Codici di risposta di errore dei messaggi a valle

La tabella seguente elenca i codici di risposta di errore per i messaggi a valle.

Tabella 9. Codici di risposta di errore dei messaggi a valle.

Errore Codice HTTP Azione consigliata
Token di registrazione mancante 200 + error:MissingRegistration Verifica che la richiesta contenga un token di registrazione (in registration_id in un messaggio in testo normale o nel campo to o registration_ids in JSON).
Token di registrazione non valido 200 + error:InvalidRegistration Controlla il formato del token di registrazione che passi al server. Assicurati che sia corrispondente al token di registrazione ricevuto dall'app client dopo la registrazione a Firebase Notifications. Non troncare né aggiungere altri caratteri.
Dispositivo non registrato 200 + error:NotRegistered Un token di registrazione esistente potrebbe non essere più valido in una serie di scenari, tra cui:
  • Se l'app client si annulla la registrazione con FCM.
  • Se l'app client non è registrata automaticamente, il che può accadere se l'utente disinstalla l'applicazione. Ad esempio, su iOS, se il servizio di feedback APNs ha segnalato il token APNs come non valido.
  • Se il token di registrazione scade (ad esempio, Google potrebbe decidere di aggiornare i token di registrazione o il token APN è scaduto per i dispositivi iOS).
  • Se l'app client è aggiornata, ma la nuova versione non è configurata per ricevere messaggi.
Per tutti questi casi, rimuovi questo token di registrazione dall'app server e smetti di utilizzarlo per inviare messaggi.
Nome del pacchetto non valido 200 + error:InvalidPackageName Assicurati che il messaggio sia stato indirizzato a un token di registrazione il cui nome del pacchetto corrisponde al valore passato nella richiesta.
Errore di autenticazione 401 Non è stato possibile autenticare l'account mittente utilizzato per inviare un messaggio. Le possibili cause sono:
  • Intestazione di autorizzazione mancante o con sintassi non valida nella richiesta HTTP.
  • Il progetto Firebase a cui appartiene la chiave del server specificata non è corretto.
  • Solo chiavi server precedenti: la richiesta è stata originata da un server non inserito nella lista consentita degli IP delle chiavi server.
Verifica che il token inviato all'interno dell'intestazione Authentication sia la chiave del server corretta associata al tuo progetto. Per maggiori dettagli, consulta Verificare la validità di una chiave del server . Se utilizzi una chiave server precedente, ti consigliamo di eseguire l'upgrade a una nuova chiave senza limitazioni IP. Consulta la sezione Eseguire la migrazione delle chiavi server precedenti.
Mittente non corrispondente 200 + error:MismatchSenderId Un token di registrazione è associato a un determinato gruppo di mittenti. Quando un'app client si registra per FCM, deve specificare quali mittenti sono autorizzati a inviare messaggi. Devi utilizzare uno di questi ID mittente quando invii messaggi all'app client. Se passi a un altro mittente, i token di registrazione esistenti non funzioneranno.
JSON non valido 400 Verifica che il messaggio JSON sia formattato correttamente e contenga campi validi (ad esempio, assicurati che venga passato il tipo di dati corretto).
Parametri non validi 400 + error:InvalidParameters Verifica che i parametri forniti abbiano il nome e il tipo corretti.
Messaggio troppo grande 200 + error:MessageTooBig Verifica che la dimensione totale dei dati del payload inclusi in un messaggio non superi i limiti di FCM: 4096 byte per la maggior parte dei messaggi o 2048 byte per i messaggi agli argomenti. Sono inclusi sia le chiavi sia i valori.
Chiave dei dati non valida 200 + errore:
InvalidDataKey
Verifica che i dati del payload non contengano una chiave (ad esempio from o gcm o qualsiasi valore con prefisso google) utilizzata internamente da FCM. Tieni presente che alcune parole (ad es. collapse_key) vengono utilizzate anche da FCM, ma sono consentite nel payload. In questo caso, il valore del payload verrà sostituito dal valore FCM.
Durata non valida 200 + error:InvalidTtl Verifica che il valore utilizzato in time_to_live sia un numero intero che rappresenti una durata in secondi compresa tra 0 e 2.419.200 (4 settimane).
Timeout Errore 5xx o 200 e oltre:non disponibile

Il server non è riuscito a elaborare la richiesta in tempo. Riprova a inviare la stessa richiesta, ma devi:

  • Rispetta l'intestazione Retry-After se è inclusa nella risposta del FCM Connection Server.
  • Implementa il backoff esponenziale nel meccanismo di nuovo tentativo. Ad esempio, se hai aspettato un secondo prima del primo tentativo, attendi almeno due secondi prima del successivo, poi 4 secondi e così via. Se invii più messaggi, ritardali singolarmente di un'ulteriore quantità casuale per evitare di emettere una nuova richiesta per tutti i messaggi contemporaneamente.

I mittenti che causano problemi rischiano di essere inseriti nella lista nera.

Errore interno del server 500 o 200 + error:InternalServerError Il server ha riscontrato un errore durante il tentativo di elaborazione della richiesta. Puoi riprovare la stessa richiesta seguendo i requisiti elencati in "Timeout" (vedi riga sopra). Se l'errore persiste, contatta l'assistenza Firebase.
Frequenza dei messaggi del dispositivo superata Errore superiore a 200:
DeviceMessageRate
superato

La frequenza dei messaggi inviati a un determinato dispositivo è troppo elevata. Se un'app Apple invia messaggi a una frequenza che supera i limiti degli APN, potrebbe ricevere questo messaggio di errore

Riduci il numero di messaggi inviati a questo dispositivo e utilizza il backoff esponenziale per ritentare l'invio.

Frequenza dei messaggi degli argomenti superata Errore superiore a 200:
TopicsMessageRate
Superato
La frequenza dei messaggi inviati agli iscritti a un determinato argomento è troppo elevata. Riduci il numero di messaggi inviati per questo argomento e utilizza il backoff esponenziale per riprovare a inviare.
Credenziali APN non valide 200 + errore:
InvalidApnsCredential
Non è stato possibile inviare un messaggio indirizzato a un dispositivo Apple perché la chiave di autenticazione APN obbligatoria non è stata caricata o è scaduta. Verifica la validità delle credenziali di sviluppo e di produzione.

Gestione dei gruppi di dispositivi

La tabella seguente elenca le chiavi per creare gruppi di dispositivi e aggiungere e rimuovere membri. Per ulteriori informazioni, consulta la guida per la tua piattaforma, iOS+ o Android.

Tabella 10. Chiavi di gestione dei gruppi di dispositivi.

Parametro Utilizzo Descrizione
operation Obbligatorio, stringa L'operazione da eseguire.I valori validi sono create, add e remove.
notification_key_name Obbligatorio, stringa Il nome definito dall'utente del gruppo di dispositivi da creare o modificare.
notification_key Obbligatorio (tranne per l'operazione create, stringa Identificatore univoco del gruppo di dispositivi. Questo valore viene restituito nella risposta di un'operazione create riuscita ed è obbligatorio per tutte le operazioni successive sul gruppo di dispositivi.
registration_ids Obbligatorio, array di stringhe I token dispositivo da aggiungere o rimuovere. Se rimuovi tutti i token di registrazione esistenti da un gruppo di dispositivi, FCM elimina il gruppo di dispositivi.