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 illustra la sintassi per inviare messaggi downstream e interpretare le 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.
Parametro | Utilizzo | Descrizione | |
---|---|---|---|
Obiettivi | |||
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 (preceduto con |
|
registration_ids | Facoltativo, array di stringhe |
Questo parametro specifica il destinatario di un messaggio multicast, ovvero 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
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: |
|
notification_key Deprecato |
Facoltativo, stringa | Questo parametro è deprecato. Utilizza invece |
|
Opzioni | |||
collapse_key |
Facoltativo, stringa | Questo parametro identifica un gruppo di messaggi (ad es. con
Tieni presente che non possiamo garantire l'ordine di invio dei messaggi. Nota: in un determinato momento sono consentite al massimo 4 chiavi di collasso diverse. Ciò significa che FCM può archiviare contemporaneamente 4 messaggi diversi per ogni app client. Se superi questo numero, non c'è alcuna garanzia di quali 4 chiavi di compressione verranno conservate da FCM. |
|
priority |
Facoltativo, stringa | Imposta la priorità del messaggio. I valori validi sono "normale" e "alto". Sulle piattaforme Apple, corrispondono alle priorità 5 e 10 degli APN. Per impostazione predefinita, i messaggi di notifica vengono inviati con priorità elevata, mentre i messaggi relativi ai 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 ricevere il messaggio con un ritardo non specificato. Quando un messaggio viene inviato con priorità elevata, viene inviato immediatamente e l'app può visualizzare una notifica. |
|
content_available |
Valore booleano facoltativo | Sulle piattaforme Apple, utilizza questo campo per rappresentare |
|
mutable_content |
Facoltativo, booleano JSON | Sulle piattaforme Apple, utilizza questo campo per rappresentare
|
|
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_
(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 impostato su Il valore predefinito è |
|
Payload | |||
data |
Facoltativo, oggetto | Questo parametro specifica le coppie chiave-valore personalizzate del payload del messaggio. Ad esempio, con Sulle piattaforme Apple, se il messaggio viene inviato tramite APN, rappresenta i campi di dati personalizzati. Se viene inviato tramite FCM,
viene rappresentato come dizionario in base alle coppie chiave-valore in Su Android, si otterrà un extra intent denominato 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 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 |
Oggetto facoltativo | 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 saperne di più sulle opzioni relative ai messaggi di notifica e di dati, consulta la sezione
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 payload notifica
Le seguenti tabelle elencano le chiavi predefinite disponibili per la creazione di messaggi di notifica per iOS e Android.
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 |
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 |
click_action |
Facoltativo, stringa |
L'azione associata al clic di un utente sulla notifica.
Corrisponde a |
subtitle |
Facoltativo, stringa |
Sottotitolo della notifica. |
body_loc_key |
Facoltativo, stringa |
La chiave per la stringa del corpo nelle risorse di stringa dell'app da utilizzare per localizzare il corpo del testo nella localizzazione corrente dell'utente.
Corrisponde a 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
Corrisponde a Per ulteriori informazioni, consulta Riferimento alle chiavi del payload e Localizzazione dei contenuti delle notifiche remote. |
title_loc_key |
Facoltativo, stringa |
La chiave per la stringa del titolo nelle risorse di stringa dell'app da utilizzare per localizzare il testo del titolo nella localizzazione attuale dell'utente.
Corrisponde a 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
Corrisponde a Per ulteriori informazioni, consulta Riferimento alle chiavi del payload e Localizzazione dei contenuti delle notifiche remote. |
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 canale prima di ricevere qualsiasi 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 |
sound |
Facoltativo, stringa |
Il suono da riprodurre quando il dispositivo riceve la notifica.
Supporta |
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 viene già mostrata una notifica con lo stesso tag, la nuova notifica sostituisce quella esistente nel riquadro a scomparsa delle notifiche. |
color |
Facoltativo, stringa |
Il colore dell'icona della notifica, espresso in formato |
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 per la stringa del corpo nelle risorse di stringa dell'app da utilizzare per localizzare il corpo del testo nella 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
Per saperne di più, consulta Formattazione e stile. |
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
Per saperne di più, consulta Formattazione e stile. |
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.
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 |
Valore booleano facoltativo | 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 dimensioni totali del messaggio di 4096 byte. Ad esempio, in Android, 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 |
Interpretazione di una risposta di messaggio a valle
L'app server deve valutare sia l'intestazione della risposta al messaggio che il corpo per interpretare la risposta al messaggio inviata da FCM. La seguente tabella descrive le possibili risposte.
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 del 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 seguente tabella elenca i campi in un corpo della risposta del messaggio downstream (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 (ad esempio, per ogni ID di registrazione nella richiesta, il relativo risultato viene elencato nello stesso indice della risposta).
|
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. |
Parametro | Utilizzo | Descrizione |
---|---|---|
id |
Obbligatorio, stringa | Questo parametro consente di specificare 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. |
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 downstream
La tabella seguente elenca i codici di risposta di errore per i messaggi a valle.
Errore | Codice HTTP | Azione consigliata |
---|---|---|
Token di registrazione mancante | 200 + errore:MissingRegistration | Verifica che la richiesta contenga un token di registrazione (nel campo registration_id in un messaggio di 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 corrisponda 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:
|
Nome pacchetto non valido | 200 + errore: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:
|
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, assicurandoti che venga trasmesso 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 dati non valida | 200 + errore:
InvalidDataKey |
Verifica che i dati del payload non contengano una chiave (ad esempio from o gcm o qualsiasi valore premesso da 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 eseguire la stessa richiesta, ma devi:
I mittenti che causano problemi rischiano di essere inseriti nella blacklist. |
Errore server interno | 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 | 200 + errore:
DeviceMessageRate Superata |
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 seguente tabella elenca le chiavi per la creazione di gruppi di dispositivi e l'aggiunta e la rimozione di membri. Per ulteriori informazioni, consulta la guida per la tua piattaforma, iOS+ o Android.
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 (ad eccezione dell'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 del dispositivo da aggiungere o rimuovere. Se rimuovi tutti i token di registrazione esistenti da un gruppo di dispositivi, FCM elimina il gruppo di dispositivi. |