Questo documento fornisce un riferimento per la sintassi XMPP utilizzata per trasmettere i messaggi tra il server dell'app, le app client e Firebase Cloud Messaging (FCM). Il server app deve connettersi a questi endpoint:
// Production fcm-xmpp.googleapis.com:5235 // Testing fcm-xmpp.googleapis.com:5236
I parametri e le opzioni disponibili rientrano nelle seguenti categorie:
- Sintassi dei messaggi a valle
- Codici di risposta di errore dei messaggi a valle
- Sintassi dei messaggi upstream
- Messaggi di controllo FCM
Sintassi dei messaggi downstream
Questa sezione fornisce la sintassi per l'invio di messaggi a valle.
Messaggi XMPP a valle (JSON)
La tabella seguente elenca i target, le opzioni e il payload per i messaggi JSON di XMPP.
Parametro | Utilizzo | Descrizione | |
---|---|---|---|
Destinazione | |||
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 |
|
condition |
Facoltativo, stringa | Questo parametro specifica un'espressione logica di condizioni che determina il target del messaggio. Condizione supportata: Argomento, formattato come "'yourTopic' in topics". Questo valore non è sensibile alle maiuscole. Operatori supportati: |
|
Opzioni | |||
message_id |
Obbligatorio, stringa | Questo parametro identifica in modo univoco un messaggio in una connessione XMPP. |
|
collapse_key |
Facoltativo, stringa | Questo parametro identifica un gruppo di messaggi (ad es. con
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 |
|
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. |
|
dry_run |
Facoltativo, booleano | Se questo parametro viene impostato su Il valore predefinito è |
|
Payload | |||
data |
Facoltativo, oggetto | Questo parametro specifica le coppie chiave/valore 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 fornito da FCM, viene rappresentato come un dizionario di valori chiave in Su Android, ne risulta 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 |
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 le piattaforme Apple 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 |
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 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 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 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 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 |
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 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 |
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
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
Per ulteriori informazioni, consulta Formattazione e stili. |
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. |
Interpreta una risposta al messaggio XMPP a valle
La tabella seguente elenca i campi visualizzati in una risposta al messaggio XMPP a valle.
Parametro | Utilizzo | Descrizione |
---|---|---|
from |
Obbligatorio, stringa | Questo parametro specifica chi ha inviato questa risposta. Il valore è il token di registrazione dell'app client. |
message_id |
Obbligatorio, stringa | Questo parametro identifica in modo univoco un messaggio in una connessione XMPP. Il valore è una stringa che identifica in modo univoco il messaggio associato. |
message_type |
Obbligatorio, stringa | Questo parametro specifica un messaggio Se il valore è impostato su |
error |
Facoltativo, stringa | Questo parametro specifica un errore relativo al messaggio a valle. Viene impostato quando message_type è nack . Per informazioni dettagliate, consulta la tabella 4. |
error_description |
Facoltativo, stringa | Questo parametro fornisce informazioni descrittive sull'errore. Viene impostato
quando message_type è nack . |
Codici di risposta di errore dei messaggi a valle
La tabella seguente elenca i codici di risposta di errore per i messaggi a valle.
Errore | Codice XMPP | Azione consigliata |
---|---|---|
Token di registrazione mancante | INVALID_JSON |
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). |
Registrazione APN non valida | INVALID_JSON |
Per le registrazioni iOS, verifica che la richiesta di registrazione del client contenga un token APN e un ID applicazione validi. |
Token di registrazione non valido | BAD_REGISTRATION |
Controlla il formato del token di registrazione che passi al server. Assicurati che corrisponda al token di registrazione ricevuto dall'app client dalla registrazione con FCM. Non troncare o aggiungere altri caratteri. |
Dispositivo non registrato | DEVICE_UNREGISTERED |
Un token di registrazione esistente potrebbe non essere più valido in una serie di scenari, tra cui:
|
Mittente non corrispondente | SENDER_ID_MISMATCH |
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 | INVALID_JSON |
Verifica che il messaggio JSON sia formattato correttamente e contenga campi validi (ad esempio, assicurati che venga passato il tipo di dati corretto). |
Messaggio troppo grande | INVALID_JSON |
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 | INVALID_JSON |
Verifica che i dati del payload non contengano una chiave (ad esempio from ,
gcm o qualsiasi valore con prefisso google ) utilizzata internamente da FCM. Tieni presente che alcune parole (ad esempio collapse_key )
vengono utilizzate anche da FCM, ma sono consentite nel payload. In questo caso,
il valore del payload viene sostituito dal valore FCM. |
Durata non valida | INVALID_JSON |
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). |
Messaggio ACK errato | BAD_ACK |
Verifica che il messaggio ack sia formattato correttamente prima di riprovare. Per informazioni dettagliate, consulta la tabella 6. |
Timeout | SERVICE_UNAVAILABLE |
Il server non è riuscito a elaborare la richiesta in tempo. Riprova a inviare la stessa richiesta, ma devi:
Nota: i mittenti che causano problemi rischiano di essere inseriti nella lista nera. |
Errore interno del server | INTERNAL_SERVER_
|
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). |
Frequenza dei messaggi del dispositivo superata | DEVICE_MESSAGE_RATE |
La frequenza dei messaggi inviati a un determinato dispositivo è troppo elevata. Riduci il numero di messaggi inviati a questo dispositivo e non riprovare immediatamente a inviare messaggi a questo dispositivo. |
Frequenza dei messaggi degli argomenti superata | TOPICS_MESSAGE_RATE |
La frequenza dei messaggi inviati agli iscritti a un determinato argomento è troppo elevata. Riduci il numero di messaggi inviati per questo argomento e non riprovare immediatamente a inviare. |
Svuotamento della connessione | CONNECTION_DRAINING |
Impossibile elaborare il messaggio perché la connessione sta esaurendo. Questo accade perché, periodicamente, FCM deve chiudere una connessione per eseguire il bilanciamento del carico. Riprova a inviare il messaggio tramite un'altra connessione XMPP. |
Credenziali del servizio APN non valide | INVALID_APNS_CREDENTIAL |
Non è stato possibile inviare un messaggio indirizzato a un dispositivo iOS perché la chiave di autenticazione APN obbligatoria non è stata caricata o è scaduta. Verifica la validità delle credenziali di sviluppo e di produzione. |
Autenticazione non riuscita | AUTHENTICATION_FAILED |
Impossibile eseguire l'autenticazione con i servizi push esterni. Verifica di utilizzare i certificati push web corretti. |
Sintassi dei messaggi upstream
Un messaggio in upstream è un messaggio inviato dall'app client al server dell'app. Al momento solo XMPP supporta la messaggistica upstream. Per ulteriori informazioni sull'invio di messaggi dalle app client, consulta la documentazione della tua piattaforma.
Interpretazione di un messaggio XMPP a monte
La seguente tabella descrive i campi della stanza XMPP generata da FCM in risposta alle richieste di messaggi a monte da parte delle app client.
Parametro | Utilizzo | Descrizione |
---|---|---|
from |
Obbligatorio, stringa | Questo parametro specifica chi ha inviato il messaggio. Il valore è il token di registrazione dell'app client. |
category |
Obbligatorio, stringa | Questo parametro specifica il nome del pacchetto dell'applicazione dell'app client che ha inviato il messaggio. |
message_id |
Obbligatorio, stringa | Questo parametro specifica l'ID univoco del messaggio. |
data |
Facoltativo, stringa | Questo parametro specifica le coppie chiave/valore del payload del messaggio. |
Invio di un messaggio ACK
La seguente tabella descrive la risposta ACK che il server dell'app deve inviare a FCM in risposta a un messaggio upstream ricevuto dal server dell'app.
Parametro | Utilizzo | Descrizione |
---|---|---|
to |
Obbligatorio, stringa | Questo parametro specifica il destinatario di un messaggio di risposta. Il valore deve essere un token di registrazione dell'app client che ha inviato il messaggio a monte. |
message_id |
Obbligatorio, stringa | Questo parametro specifica il messaggio a cui è destinata la risposta. Il valore deve essere il valore message_id del messaggio a monte corrispondente. |
message_type |
Obbligatorio, stringa | Questo parametro specifica un messaggio ack da un server app a CCS.
Per i messaggi in upstream, deve essere sempre impostato su ack . |
FCM messaggi del server (XMPP)
Questo è un messaggio inviato da FCM a un server dell'app. Di seguito sono riportati i tipi principali di messaggi inviati da FCM al server dell'app:
- Controllo:questi messaggi generati da CCS indicano che è richiesta un'azione da parte del server dell'app.
La tabella seguente descrive i campi inclusi nei messaggi inviati da CCS a un server app.
Parametro | Utilizzo | Descrizione |
---|---|---|
Campo comune | ||
message_type |
Obbligatorio, stringa | Questo parametro specifica il tipo di messaggio: controllo. Se è impostato su |
control_type |
Facoltativo, stringa | Questo parametro specifica il tipo di messaggio di controllo inviato da FCM. Al momento è supportato solo |