Save the date - Google I/O returns May 18-20. Register to get the most out of the digital experience: Build your schedule, reserve space, participate in Q&As, earn Google Developer profile badges, and more. Register now
Questa pagina è stata tradotta dall'API Cloud Translation.
Switch to English

Capire la consegna dei messaggi

FCM fornisce strumenti per aiutarti a ottenere informazioni dettagliate sulla consegna dei messaggi. Oltre ai rapporti di consegna e all'analisi della canalizzazione delle notifiche incorporata nella console Firebase, FCM fornisce un'esportazione completa dei dati su Google BigQuery.

Gli strumenti di reportistica descritti in questa pagina richiedono tutti Google Analytics per funzionare. Se Google Analytics non è abilitato per il tuo progetto, puoi configurarlo nella scheda integrazioni delle impostazioni del tuo progetto Firebase.

Tieni presente che la segnalazione di molte delle statistiche in questa pagina, è soggetta a ritardi fino a 24 ore a causa del batch dei dati di analisi.

Rapporti di consegna dei messaggi

Puoi valutare se i messaggi che invii raggiungono i tuoi utenti. Nella scheda Rapporti della console Firebase, puoi visualizzare i seguenti dati per i messaggi inviati a SDK FCM Android o iOS, inclusi quelli inviati tramite il compositore di notifiche e le API FCM:

  • Invia: il messaggio di dati o il messaggio di notifica è stato accodato per la consegna o è stato passato con successo a un servizio di terze parti come APN per la consegna. Vedere la durata di un messaggio per ulteriori informazioni.
  • Ricevuto (disponibile solo su dispositivi Android): il messaggio di dati o il messaggio di notifica è stato ricevuto dall'app. Questi dati sono disponibili quando sul dispositivo Android ricevente è installato FCM SDK 18.0.1 o versione successiva.
  • Impressioni (disponibile solo per i messaggi di notifica su dispositivi Android): la notifica del display è stata visualizzata sul dispositivo mentre l'app è in background.
  • Apre: l'utente ha aperto il messaggio di notifica. Segnalato solo per le notifiche ricevute quando l'app è in background.

Questi dati sono disponibili per tutti i messaggi con un payload di notifica e per tutti i messaggi di dati etichettati . Per ulteriori informazioni sulle etichette, vedere Aggiunta di etichette di analisi ai messaggi .

Quando si visualizzano i rapporti sui messaggi, è possibile impostare un intervallo di date per i dati visualizzati, con la possibilità di esportarli in CSV. Puoi anche filtrare in base a questi criteri:

  • Piattaforma (iOS o Android)
  • App
  • Etichette analitiche personalizzate

Aggiunta di etichette di analisi ai messaggi

L'etichettatura dei messaggi è molto utile per l'analisi personalizzata, consentendo di filtrare le statistiche di consegna in base a etichette o gruppi di etichette. Puoi aggiungere un'etichetta a qualsiasi messaggio inviato tramite l'API HTTP v1 impostando il campo fcmOptions.analyticsLabel nell'oggetto messaggio o nei campi AndroidFcmOptions o ApnsFcmOptions specifici della piattaforma.

Le etichette di Analytics sono stringhe di testo nel formato ^[a-zA-Z0-9-_.~%]{1,50}$ . Le etichette possono includere lettere maiuscole e minuscole, numeri e i seguenti simboli:

  • -
  • ~
  • %

La lunghezza massima è di 50 caratteri. Puoi specificare fino a 100 etichette univoche al giorno; i messaggi con etichette aggiunte oltre tale limite non vengono segnalati.

Nella scheda Rapporti di messaggistica della console Firebase, puoi cercare un elenco di tutte le etichette esistenti e applicarle singolarmente o in combinazione per filtrare le statistiche visualizzate.

Analisi del funnel di notifica

Un'analisi della canalizzazione delle notifiche incorporata mostra come i tuoi utenti rispondono a particolari notifiche inviate dalla console Firebase. Questa visualizzazione include i dati per i dispositivi iOS e Android mirati in queste categorie:

  • Notifiche inviate: il messaggio è stato accodato per la consegna o è stato passato con successo a un servizio di terze parti come APN per la consegna. Tieni presente che il targeting di token obsoleti o registrazioni inattive può aumentare queste statistiche.
  • Notifiche aperte: il numero di notifiche aperte. Segnalato solo per le notifiche ricevute quando l'app è in background.
  • Il numero di utenti unici che hanno attivato un evento di conversione, se definito.

Per visualizzare l'analisi della canalizzazione delle notifiche:

  1. Nel compositore di notifiche, seleziona la scheda Notifiche .
  2. Fare clic su un messaggio completato o in corso nell'elenco dei messaggi. Viene visualizzata una vista espansa che include un'analisi della canalizzazione.

I rapporti di Analytics vengono aggiornati periodicamente, ma può verificarsi un certo ritardo tra il momento in cui un utente apre la notifica e il momento in cui i dati dell'evento sono disponibili nella console. Oltre a questi rapporti nella scheda Notifiche , puoi anche creare canalizzazioni personalizzate in Analytics per visualizzare la percentuale di completamento di una sequenza di passaggi nella tua app.

Esportazione di dati BigQuery

Puoi esportare i dati dei messaggi in BigQuery per ulteriori analisi. BigQuery ti consente di analizzare i dati utilizzando BigQuery SQL, esportarli su un altro provider cloud o utilizzare i dati per i tuoi modelli ML personalizzati. Un'esportazione in BigQuery include tutti i dati disponibili per i messaggi, indipendentemente dal tipo di messaggio o dal fatto che il messaggio venga inviato tramite l'API o il compositore di notifiche.

Per i messaggi inviati a dispositivi Android con FCM SDK 20.1.0 o versioni successive, hai l'opzione aggiuntiva per abilitare l'esportazione dei dati di consegna dei messaggi per la tua app. Per ulteriori informazioni, vedere Abilitare l'esportazione dei dati di consegna dei messaggi su Android .

Per iniziare, collega il tuo progetto a BigQuery:

  1. Scegli una delle seguenti opzioni:

    • Apri lo strumento di composizione delle notifiche , quindi fai clic su Accedi a BigQuery nella parte inferiore della pagina.

    • Dalla pagina Integrazioni nella console Firebase, fai clic su Link nella scheda BigQuery .

      Questa pagina mostra le opzioni di esportazione FCM per tutte le app abilitate FCM nel progetto.

  2. Segui le istruzioni sullo schermo per abilitare BigQuery.

Fai riferimento a Collegamento di Firebase a BigQuery per ulteriori informazioni.

Dopo aver collegato il progetto a BigQuery:

  • Firebase esporta i tuoi dati in BigQuery. Tieni presente che il completamento della propagazione iniziale dei dati per l'esportazione potrebbe richiedere fino a 48 ore.

  • Firebase imposta sincronizzazioni regolari dei tuoi dati dal tuo progetto Firebase a BigQuery. Queste operazioni di esportazione giornaliere iniziano alle 4:00 PDT e potrebbero richiedere fino a dieci ore per essere completate.

  • Per impostazione predefinita, tutte le app nel tuo progetto sono collegate a BigQuery e tutte le app che aggiungi successivamente al progetto vengono automaticamente collegate a BigQuery. Puoi gestire le app che inviano i dati .

Per disattivare l'esportazione BigQuery, scollega il tuo progetto nella console Firebase.

Abilita l'esportazione dei dati di consegna dei messaggi su Android

I dispositivi Android con FCM SDK 20.1.0 o versioni successive possono abilitare l'esportazione dei dati di consegna dei messaggi della loro app. L'esportazione dei dati è disabilitata per impostazione predefinita a livello di app . L'abilitazione a livello di codice a livello di istanza dell'app consente di chiedere agli utenti finali l'autorizzazione per analizzare i dati di consegna dei messaggi (consigliato). Dove sono impostati entrambi, il valore a livello di istanza dell'app sostituisce il valore a livello di app.

Prima di abilitare queste opzioni, devi prima creare il collegamento FCM-BiqQuery per il tuo progetto come descritto in Esportazione dei dati BigQuery .

Abilita l'esportazione dei dati di consegna per le istanze dell'app

Nella maggior parte dei casi, ti consigliamo di abilitare l'esportazione dei dati di consegna dei messaggi solo a livello di istanza dell'app e di lasciarla disabilitata a livello di app.

 FirebaseMessaging.getInstance().setDeliveryMetricsExportToBigQuery(true)

Abilita l'esportazione dei dati di consegna per un'app

Se preferisci abilitare l'esportazione a livello di app, assicurati di non chiamare il metodo setDeliveryMetricsExportToBigQuery e aggiungi la seguente proprietà all'oggetto dell'applicazione nel manifesto dell'app:

<application>
  <meta-data android:name="delivery_metrics_exported_to_big_query_enabled"
      android:value="true" />
</application>

Quali dati vengono esportati in BigQuery?

Tieni presente che il targeting di token obsoleti o registrazioni inattive può aumentare alcune di queste statistiche.

Lo schema della tabella esportata è:

_PARTITIONTIME TIMESTAMP Questa pseudo colonna contiene un timestamp per l'inizio della giornata (in UTC) in cui sono stati caricati i dati. Per la partizione AAAAMMGG, questa pseudo colonna contiene il valore TIMESTAMP ('AAAA-MM-GG').
event_timestamp TIMESTAMP Timestamp dell'evento registrato dal server
progetto numero NUMERO INTERO Il numero del progetto identifica il progetto che ha inviato il messaggio
message_id CORDA L'ID messaggio identifica un messaggio. Generato dall'ID app e dal timestamp, l'ID messaggio potrebbe, in alcuni casi, non essere univoco a livello globale.
instance_id CORDA L'ID istanza dell'app a cui viene inviato il messaggio (se disponibile)
tipo_messaggio CORDA Il tipo di messaggio. Può essere un messaggio di notifica o un messaggio di dati. L'argomento viene utilizzato per identificare il messaggio originale per un argomento o per l'invio di una campagna; i messaggi successivi sono una notifica o un messaggio di dati.
sdk_platform CORDA La piattaforma dell'app del destinatario
nome dell'applicazione CORDA Il nome del pacchetto per le app Android o l'ID del pacchetto per le app iOS
collapse_key CORDA La chiave di compressione identifica un gruppo di messaggi che possono essere compressi. Quando un dispositivo non è connesso, solo l'ultimo messaggio con una data chiave di compressione viene messo in coda per l'eventuale consegna
priorità NUMERO INTERO La priorità del messaggio. I valori validi sono "normale" e "alto". Su iOS, questi corrispondono alle priorità 5 e 10 degli APN
ttl NUMERO INTERO Questo parametro specifica per quanto tempo (in secondi) il messaggio deve essere conservato nell'archivio FCM se il dispositivo è offline
argomento CORDA Il nome dell'argomento a cui è stato inviato un messaggio (se applicabile)
bulk_id NUMERO INTERO L'ID di massa identifica un gruppo di messaggi correlati, come un particolare invio a un argomento
evento CORDA Il tipo di evento. I valori possibili sono:
  • MESSAGE_ACCEPTED: il messaggio è stato ricevuto dal server FCM e la richiesta è valida;
  • MESSAGE_DELIVERED: il messaggio è stato consegnato all'SDK FCM dell'app sul dispositivo. Per impostazione predefinita, questo campo non viene propagato. Per abilitare, segui le istruzioni fornite in setDeliveryMetricsExportToBigQuery(boolean) .
  • MISSING_REGISTRATIONS: la richiesta è stata rifiutata per mancata registrazione;
  • UNAUTHORIZED_REGISTRATION: il messaggio è stato rifiutato perché il mittente non è autorizzato ad inviare alla registrazione;
  • MESSAGE_RECEIVED_INTERNAL_ERROR: si è verificato un errore non specificato durante l'elaborazione della richiesta di messaggio;
  • MISMATCH_SENDER_ID: la richiesta di invio di un messaggio è stata rifiutata a causa di una mancata corrispondenza tra l'id mittente che ha inviato il messaggio e quello dichiarato per l'end-point;
  • QUOTA_EXCEEDED: la richiesta di invio di un messaggio è stata rifiutata per quota insufficiente;
  • INVALID_REGISTRATION: la richiesta di invio di un messaggio è stata rifiutata a causa di una registrazione non valida;
  • INVALID_PACKAGE_NAME: la richiesta di inviare un messaggio è stata rifiutata a causa di un nome del pacchetto non valido;
  • INVALID_APNS_CREDENTIAL: la richiesta di invio di un messaggio è stata rifiutata a causa di un certificato APNS non valido;
  • INVALID_PARAMETERS: la richiesta di invio di un messaggio è stata rifiutata a causa di parametri non validi;
  • PAYLOAD_TOO_LARGE: la richiesta di invio di un messaggio è stata rifiutata a causa di un payload superiore al limite;
  • AUTHENTICATION_ERROR: la richiesta di invio di un messaggio è stata rifiutata a causa di un errore di autenticazione (verificare la API Key utilizzata per inviare il messaggio);
  • INVALID_TTL: la richiesta di inviare un messaggio è stata rifiutata a causa di un TTL non valido.
analytics_label CORDA Con l' API HTTP v1 , l'etichetta di analisi può essere impostata quando si invia il messaggio, al fine di contrassegnare il messaggio per scopi di analisi

Cosa puoi fare con i dati esportati?

Le sezioni seguenti offrono esempi di query che puoi eseguire in BigQuery sui dati FCM esportati.

Conta i messaggi inviati dall'app

SELECT app_name, COUNT(1)
FROM `project ID.firebase_messaging.data`
WHERE
  _PARTITIONTIME = TIMESTAMP('date as YYYY-MM-DD')
  AND event = 'MESSAGE_ACCEPTED'
  AND message_id != ''
GROUP BY 1;

Conta le istanze di app uniche prese di mira dai messaggi

SELECT COUNT(DISTINCT instance_id)
FROM `project ID.firebase_messaging.data`
WHERE
  _PARTITIONTIME = TIMESTAMP('date as YYYY-MM-DD')
  AND event = 'MESSAGE_ACCEPTED';

Conta i messaggi di notifica inviati

SELECT COUNT(1)
FROM `project ID.firebase_messaging.data`
WHERE
  _PARTITIONTIME = TIMESTAMP('date as YYYY-MM-DD')
  AND event = 'MESSAGE_ACCEPTED'
  AND message_type = 'DISPLAY_NOTIFICATION';

Contare i messaggi di dati inviati

SELECT COUNT(1)
FROM `project ID.firebase_messaging.data`
WHERE
  _PARTITIONTIME = TIMESTAMP('date as YYYY-MM-DD')
  AND event = 'MESSAGE_ACCEPTED'
  AND message_type = 'DATA_MESSAGE';

Conta i messaggi inviati a un argomento o a una campagna

SELECT COUNT(1)
FROM `project ID.firebase_messaging.data`
WHERE
  _PARTITIONTIME = TIMESTAMP('date as YYYY-MM-DD')
  AND event = 'MESSAGE_ACCEPTED'
  AND bulk_id = your bulk id AND message_id != '';

Per tenere traccia degli eventi per un messaggio inviato a un argomento particolare, modifica questa query per sostituire AND message_id != '' Con AND message_id = <your message id>; .

Calcola la durata del fanout per un determinato argomento o campagna

L'ora di inizio del fanut è quando viene ricevuta la richiesta originale e l'ora di fine è l'ora in cui viene creato l'ultimo singolo messaggio indirizzato a una singola istanza.

SELECT
  TIMESTAMP_DIFF(
    end_timestamp, start_timestamp, MILLISECOND
  ) AS fanout_duration_ms,
  end_timestamp,
  start_timestamp
FROM (
    SELECT MAX(event_timestamp) AS end_timestamp
    FROM `project ID.firebase_messaging.data`
    WHERE
      _PARTITIONTIME = TIMESTAMP('date as YYYY-MM-DD')
      AND event = 'MESSAGE_ACCEPTED'
      AND bulk_id = your bulk id
  ) sent
  CROSS JOIN (
    SELECT event_timestamp AS start_timestamp
    FROM `project ID.firebase_messaging.data`
    WHERE
      _PARTITIONTIME = TIMESTAMP('date as YYYY-MM-DD')
      AND event = 'MESSAGE_ACCEPTED'
      AND bulk_id = your bulk id
      AND message_type = 'TOPIC'
  ) initial_message;

Contare la percentuale di messaggi consegnati

SELECT
  messages_sent,
  messages_delivered,
  messages_delivered / messages_sent * 100 AS percent_delivered
FROM (
    SELECT COUNT(DISTINCT CONCAT(message_id, instance_id)) AS messages_sent
    FROM `project ID.firebase_messaging.data`
    WHERE
      _PARTITIONTIME = TIMESTAMP('date as YYYY-MM-DD')
      AND event = 'MESSAGE_ACCEPTED'
  ) sent
  CROSS JOIN (
    SELECT COUNT(DISTINCT CONCAT(message_id, instance_id)) AS messages_delivered
    FROM `project ID.firebase_messaging.data`
    WHERE
      _PARTITIONTIME = TIMESTAMP('date as YYYY-MM-DD')
      AND (event = 'MESSAGE_DELIVERED'
      AND message_id
      IN (
        SELECT message_id FROM `project ID.firebase_messaging.data`
        WHERE
          _PARTITIONTIME = TIMESTAMP('date as YYYY-MM-DD')
          AND event = 'MESSAGE_ACCEPTED'
        GROUP BY 1
      )
  ) delivered;

Tieni traccia di tutti gli eventi per un determinato ID messaggio e ID istanza

SELECT *
FROM `project ID.firebase_messaging.data`
WHERE
    _PARTITIONTIME = TIMESTAMP('date as YYYY-MM-DD')
    AND message_id = 'your message id'
    AND instance_id = 'your instance id'
ORDER BY event_timestamp;

Calcola la latenza per un determinato ID messaggio e ID istanza

SELECT
  TIMESTAMP_DIFF(
    MAX(delivered_time), MIN(accepted_time), MILLISECOND
  ) AS latency_ms
FROM (
    SELECT event_timestamp AS accepted_time
    FROM `project ID.firebase_messaging.data`
    WHERE
      _PARTITIONTIME = TIMESTAMP('date as YYYY-MM-DD')
      AND message_id = 'your message id'
      AND instance_id = 'your instance id'
      AND event = 'MESSAGE_ACCEPTED'
  ) sent
  CROSS JOIN (
    SELECT event_timestamp AS delivered_time
    FROM `project ID.firebase_messaging.data`
    WHERE
      _PARTITIONTIME = TIMESTAMP('date as YYYY-MM-DD') AND
      message_id = 'your message id' AND instance_id = 'your instance id'
      AND (event = 'MESSAGE_DELIVERED'
  ) delivered;