Google is committed to advancing racial equity for Black communities. See how.
Questa pagina è stata tradotta dall'API Cloud Translation.
Switch to English

Comprensione del recapito dei messaggi

FCM fornisce strumenti che consentono di ottenere informazioni dettagliate sulla consegna dei messaggi. Oltre ai rapporti di consegna e all'analisi della canalizzazione delle notifiche integrati nella console di Firebase, FCM offre l'esportazione completa dei dati su Google BigQuery.

Gli strumenti di reporting 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 statistiche in questa pagina è soggetta a ritardi fino a 24 ore a causa del raggruppamento 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 di Firebase, puoi visualizzare i seguenti dati per i messaggi inviati agli SDK FCM Android o iOS, inclusi quelli inviati tramite il compositore di Notifiche e le API FCM:

  • Invia: il messaggio dati o il messaggio di notifica è stato accodato per la consegna o è stato passato con successo a un servizio di terze parti come gli APN per la consegna. Vedere la durata di un messaggio per ulteriori informazioni.
  • Ricevuto (disponibile solo su dispositivi Android): il messaggio 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 sui dispositivi Android): la notifica di visualizzazione è 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 tutti i messaggi di dati etichettati . Per ulteriori informazioni sulle etichette, vedere Aggiunta di etichette analitiche ai messaggi .

Durante la visualizzazione dei rapporti sui messaggi, è possibile impostare un intervallo di date per i dati visualizzati, con l'opzione di esportazione in CSV. Puoi anche filtrare in base a questi criteri:

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

Aggiunta di etichette analitiche ai messaggi

L'etichettatura dei messaggi è molto utile per l'analisi personalizzata, che consente di filtrare le statistiche di consegna per etichette o set di etichette. È possibile 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 minuscole e maiuscole, numeri e i seguenti simboli:

  • -
  • ~
  • %

La lunghezza massima è di 50 caratteri. Puoi specificare fino a 100 etichette uniche 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 dell'imbuto di notifica

Un'analisi della canalizzazione delle notifiche integrata mostra come i tuoi utenti rispondono a particolari notifiche inviate dalla console di Firebase. Questa vista include dati per 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 gli APN per la consegna. Tieni presente che il targeting di token obsoleti o registrazioni inattive può gonfiare 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 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 a imbuto.

I rapporti di Analytics vengono aggiornati periodicamente, ma possono verificarsi alcuni ritardi tra l'apertura di una notifica da parte di un utente e la disponibilità dei dati dell'evento nella console. Oltre a questi rapporti nella scheda Notifiche , puoi anche creare canalizzazioni personalizzate in Analytics per visualizzare il tasso di completamento di una sequenza di passaggi nella tua app.

Esportazione dati BigQuery

È possibile esportare i dati dei messaggi in BigQuery per ulteriori analisi. BigQuery ti consente di analizzare i dati utilizzando BigQuery SQL, esportarli in 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 se il messaggio viene inviato tramite l'API o il compositore di Notifiche.

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

Per iniziare, collega il tuo progetto a BigQuery:

  1. Scegli una delle seguenti opzioni:

    • Apri il compositore di Notifiche , quindi fai clic su Accedi a BigQuery nella parte inferiore della pagina.

    • Dalla pagina Integrazioni nella console di 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.

Per ulteriori informazioni, consultare Link Firebase a BigQuery .

Dopo aver collegato il tuo progetto a BigQuery:

  • Firebase esporta i tuoi dati su BigQuery. Si noti che il completamento della propagazione iniziale dei dati per l'esportazione può richiedere fino a 48 ore.

  • Firebase imposta sincronizzazioni regolari dei dati dal progetto Firebase a BigQuery. Queste operazioni di esportazione giornaliera iniziano alle 4:00 AM PDT e potrebbero richiedere fino a dieci ore per il completamento.

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

Per disattivare l'esportazione di BigQuery, scollegare il progetto nella console di Firebase.

Abilita esportazione dei dati di consegna dei messaggi su Android

Per i messaggi inviati a dispositivi Android con FCM SDK 20.1.0 o versione successiva, puoi abilitare l'esportazione dei dati di consegna dei messaggi per la tua app. Sebbene l'esportazione di questi dati sia disabilitata per impostazione predefinita a livello di app, è possibile abilitarla a livello di istanza dell'app , consentendo all'utente finale di fornire il consenso per analizzare i propri dati di consegna dei messaggi (consigliato). Laddove sono impostati entrambi, l'impostazione a livello di istanza sovrascrive l'impostazione a livello di app.

Tieni presente che prima di abilitare queste opzioni, devi prima creare il link FCM-BiqQuery per il tuo progetto come descritto nell'esportazione dei dati BigQuery .

Abilita esportazione dei dati di consegna per le istanze delle app

Per abilitare l'esportazione dei dati di consegna dei messaggi su una base per istanza di app, chiamare il metodo setDeliveryMetricsExportToBigQuery() della classe FirebaseMessaging e passare true . Per esempio:

  setDeliveryMetricsExportToBigQuery(true)
 

Utilizza questo metodo insieme all'impostazione predefinita a livello di app (disabilitata) per fornire agli utenti l'opzione di negare o fornire il consenso per l'esportazione dei dati.

Per sospendere o disabilitare l'esportazione, chiamare il metodo e passare false .

Abilita esportazione dei dati di consegna per un'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 lasciarlo disabilitato a livello di app. Se si preferisce abilitare l'esportazione a livello di app, aggiungere la seguente proprietà all'oggetto applicazione nel manifest dell'app:

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

Le app che consentono l'esportazione nel manifest possono comunque consentire agli utenti di annullare l'impostazione impostando un valore false per setDeliveryMetricsExportToBigQuery() . La chiamata a questo metodo in fase di esecuzione ha la precedenza sul valore a livello di app.

Quali dati vengono esportati su BigQuery?

Tieni presente che il targeting di token non aggiornati o registrazioni inattive può gonfiare 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 Data / ora dell'evento registrata 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)
message_type 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 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 bundle per le app iOS
collapse_key CORDA La chiave di compressione identifica un gruppo di messaggi che possono essere compressi. Quando un dispositivo non è collegato, solo l'ultimo messaggio con una determinata 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, queste corrispondono alle priorità 5 e 10 degli APN
TTL NUMERO INTERO Questo parametro consente di specificare per quanto tempo (in secondi) il messaggio deve essere conservato nella memoria 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 recapitato all'SDK FCM dell'app sul dispositivo. Per impostazione predefinita, questo campo non è propagato. Per abilitare, seguire le istruzioni fornite in [`setDeliveryMetricsExportToBigQuery (boolean)`] (https://firebase.google.com/docs/reference/android/com/google/firebase/messaging/FirebaseMessaging#public-void-setdeliverymetric-porttobigquery -abilitare)).
  • MISSING_REGISTRATIONS: la richiesta è stata respinta a causa di una registrazione mancante;
  • UNAUTHORIZED_REGISTRATION: il messaggio è stato rifiutato perché il mittente non è autorizzato a 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 respinta a causa di una mancata corrispondenza tra l'ID mittente che invia il messaggio e quello dichiarato per l'end-point;
  • QUOTA_EXCEEDED: la richiesta di invio di un messaggio è stata respinta a causa di una quota insufficiente;
  • INVALID_REGISTRATION: la richiesta di invio di un messaggio è stata respinta a causa di una registrazione non valida;
  • INVALID_PACKAGE_NAME: la richiesta di invio di un messaggio è stata respinta a causa di un nome pacchetto non valido;
  • INVALID_APNS_CREDENTIAL: la richiesta di invio di un messaggio è stata respinta a causa di un certificato APNS non valido;
  • INVALID_PARAMETERS: la richiesta di invio di un messaggio è stata respinta a causa di parametri non validi;
  • PAYLOAD_TOO_LARGE: la richiesta di invio di un messaggio è stata respinta a causa di un payload superiore al limite;
  • AUTHENTICATION_ERROR: la richiesta di invio di un messaggio è stata respinta a causa di un errore di autenticazione (controllare la chiave API utilizzata per inviare il messaggio);
  • INVALID_TTL: la richiesta di invio di un messaggio è stata respinta a causa di un TTL non valido.
analytics_label CORDA Con l' API HTTP v1 , è possibile impostare l'etichetta di analisi quando si invia il messaggio, al fine di contrassegnare il messaggio a fini di analisi

Cosa puoi fare con i dati esportati?

Le seguenti sezioni offrono esempi di query che è possibile eseguire in BigQuery rispetto ai dati FCM esportati.

Conta i messaggi inviati per 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 istanze di app uniche targetizzate 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';

Contare 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 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 specifico, modificare questa query per sostituire AND message_id != '' Con AND message_id = <your message id>; .

Calcola la durata della dissolvenza per un determinato argomento o campagna

L'ora di inizio del fanout è 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;

Conta 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;