Misurare le entrate pubblicitarie

La misurazione delle sorgenti di entrate ti aiuta a comprendere il lifetime value dei tuoi utenti e a far crescere la tua attività di app. Questa guida mostra come configurare la misurazione delle entrate pubblicitarie per la tua piattaforma.

Dopo aver configurato la misurazione delle entrate pubblicitarie, puoi eseguire una delle seguenti operazioni:

Prima di iniziare

Se non l'hai ancora fatto, assicurati di completare le seguenti attività:

  1. Configura il progetto e l'app come descritto in Guida introduttiva a Analytics.

  2. Assicurati di aver collegato il tuo progetto Firebase a un account Google Analytics.

  3. Assicurati di aver incluso nella tua app l'SDK Android v17.6.0+ o l'SDK per le piattaforme Apple v6.34.0+.

Implementazione

Puoi utilizzare Google Analytics per misurare le entrate pubblicitarie generate dalla visualizzazione di annunci con piattaforme di monetizzazione, come AdMob, AppLovin e ironSource. Per misurare le entrate pubblicitarie, devi registrare gli eventi ad_impression ogni volta che l'utente vede una pubblicità nella tua app. Questi eventi contengono dettagli come piattaforma pubblicitaria, origine, valuta e valore.

AdMob

Se utilizzi la piattaforma AdMob, collega la tua app AdMob a Firebase e Analytics per attivare la misurazione automatica delle entrate pubblicitarie. L'SDK Firebase per Google Analytics registra automaticamente l'evento ad_impression ogni volta che gli utenti vedono un'impressione dell'annuncio.

Altre piattaforme di monetizzazione pubblicitaria

Piattaforme come AppLovin e ironSource forniscono dati sulle entrate a livello di impressione che puoi utilizzare per registrare gli eventi Google Analytics ad_impression.

Le sezioni seguenti mostrano esempi di implementazione per alcune piattaforme di monetizzazione degli annunci.

AppLovin

Swift

Nota:questo prodotto Firebase non è disponibile sulla piattaforma di destinazione macOS.
func didPayRevenue(_ impressionData: MAAd?) {
  if let impressionData = impressionData {
    Analytics.logEvent(
      AnalyticsEventAdImpression,
      parameters: [
        AnalyticsParameterAdPlatform: "AppLovin",
        AnalyticsParameterAdUnitName: impressionData.adUnitIdentifier,
        AnalyticsParameterAdFormat: impressionData.format,
        AnalyticsParameterValue: impressionData.revenue,
        AnalyticsParameterCurrency: "USD",  // All Applovin revenue is sent in USD
        AnalyticsParameterAdSource: impressionData.networkName,
      ])
  }
}

Objective-C

Nota:questo prodotto Firebase non è disponibile sulla piattaforma di destinazione macOS.
- (void)didPayRevenueForAd:(MAAd *)impressionData {
    [FIRAnalytics logEventWithName:kFIREventAdImpression
                    parameters: @{
                        kFIRParameterAdPlatform: @"AppLovin",
                        kFIRParameterAdSource: impressionData.networkName,
                        kFIRParameterAdFormat: impressionData.format,
                        kFIRParameterAdUnitName: impressionData.adUnitIdentifier,
                        kFIRParameterCurrency: @"USD", // All Applovin revenue is sent in USD
                        kFIRParameterValue: impressionData.revenue
                    }];
}

Kotlin

override fun onAdRevenuePaid(impressionData: MaxAd?) {
    impressionData?.let {
        firebaseAnalytics = Firebase.analytics
        firebaseAnalytics.logEvent(FirebaseAnalytics.Event.AD_IMPRESSION) {
            param(FirebaseAnalytics.Param.AD_PLATFORM, "appLovin")
            param(FirebaseAnalytics.Param.AD_UNIT_NAME, impressionData.adUnitId)
            param(FirebaseAnalytics.Param.AD_FORMAT, impressionData.format.label)
            param(FirebaseAnalytics.Param.AD_SOURCE, impressionData.networkName)
            param(FirebaseAnalytics.Param.VALUE, impressionData.revenue)
            param(FirebaseAnalytics.Param.CURRENCY, "USD") // All Applovin revenue is sent in USD
        }
    }
}

Java

@Override
public void onAdRevenuePaid(MaxAd impressionData) {

    double revenue = impressionData.getRevenue(); // In USD

    mFirebaseAnalytics = FirebaseAnalytics.getInstance(this);
    Bundle params = new Bundle();
    params.putString(FirebaseAnalytics.Param.AD_PLATFORM, "appLovin");
    params.putString(FirebaseAnalytics.Param.AD_SOURCE, impressionData.getNetworkName());
    params.putString(FirebaseAnalytics.Param.AD_FORMAT, impressionData.getFormat().getLabel());
    params.putString(FirebaseAnalytics.Param.AD_UNIT_NAME, impressionData.getAdUnitId());
    params.putDouble(FirebaseAnalytics.Param.VALUE, revenue);
    params.putString(FirebaseAnalytics.Param.CURRENCY, "USD"); // All Applovin revenue is sent in USD
    mFirebaseAnalytics.logEvent(FirebaseAnalytics.Event.AD_IMPRESSION, params);
}

Unity

// Attach callbacks based on the ad format(s) you are using
MaxSdkCallbacks.Interstitial.OnAdRevenuePaidEvent += OnAdRevenuePaidEvent;
MaxSdkCallbacks.Rewarded.OnAdRevenuePaidEvent += OnAdRevenuePaidEvent;
MaxSdkCallbacks.Banner.OnAdRevenuePaidEvent += OnAdRevenuePaidEvent;
MaxSdkCallbacks.MRec.OnAdRevenuePaidEvent += OnAdRevenuePaidEvent;
private void OnAdRevenuePaidEvent(string adUnitId, MaxSdkBase.AdInfo impressionData)
{
double revenue = impressionData.Revenue;
var impressionParameters = new[] {
  new Firebase.Analytics.Parameter("ad_platform", "AppLovin"),
  new Firebase.Analytics.Parameter("ad_source", impressionData.NetworkName),
  new Firebase.Analytics.Parameter("ad_unit_name", impressionData.AdUnitIdentifier),
  new Firebase.Analytics.Parameter("ad_format", impressionData.AdFormat),
  new Firebase.Analytics.Parameter("value", revenue),
  new Firebase.Analytics.Parameter("currency", "USD"), // All AppLovin revenue is sent in USD
};
Firebase.Analytics.FirebaseAnalytics.LogEvent("ad_impression", impressionParameters);
}

ironSource

Swift

Nota:questo prodotto Firebase non è disponibile sulla piattaforma di destinazione macOS.
func impressionDataDidSucceed(_ impressionData: ISImpressionData!) {
  Analytics.logEvent(
    AnalyticsEventAdImpression,
    parameters: [
      AnalyticsParameterAdPlatform: "ironSource",
      AnalyticsParameterAdSource: impressionData.ad_network ?? "No ad_network",
      AnalyticsParameterAdFormat: impressionData.ad_unit ?? "No ad_unit",
      AnalyticsParameterAdUnitName: impressionData.instance_name ?? "No instance_name",
      AnalyticsParameterCurrency: "USD",
      AnalyticsParameterValue: impressionData.revenue ?? 0,
    ])
}

Objective-C

Nota:questo prodotto Firebase non è disponibile sulla piattaforma di destinazione macOS.
- (void)impressionDataDidSucceed:(ISImpressionData *)impressionData {
  [FIRAnalytics logEventWithName:kFIREventAdImpression
                      parameters:@{
                        kFIRParameterAdPlatform: @"ironSource",
                        kFIRParameterAdSource: impressionData.ad_network,
                        kFIRParameterAdFormat: impressionData.ad_unit,
                        kFIRParameterAdUnitName: impressionData.instance_name,
                        kFIRParameterCurrency: @"USD",
                        kFIRParameterValue: impressionData.revenue
                      }];
}

Kotlin

override fun onImpressionSuccess(impressionData: ImpressionData) {
    // The onImpressionSuccess will be reported when the rewarded video and interstitial ad is
    // opened.
    // For banners, the impression is reported on load success. Log.d(TAG, "onImpressionSuccess" +
    // impressionData)
    firebaseAnalytics = Firebase.analytics
    firebaseAnalytics.logEvent(FirebaseAnalytics.Event.AD_IMPRESSION) {
        param(FirebaseAnalytics.Param.AD_PLATFORM, "ironSource")
        param(FirebaseAnalytics.Param.AD_SOURCE, impressionData.adNetwork)
        param(FirebaseAnalytics.Param.AD_FORMAT, impressionData.adUnit)
        param(FirebaseAnalytics.Param.AD_UNIT_NAME, impressionData.instanceName)
        param(FirebaseAnalytics.Param.CURRENCY, "USD")
        param(FirebaseAnalytics.Param.VALUE, impressionData.revenue)
    }
}

Java

@Override
public void onImpressionSuccess(ImpressionData impressionData) {
    // The onImpressionSuccess will be reported when the rewarded video and interstitial ad is opened.
    // For banners, the impression is reported on load success. Log.d(TAG, "onImpressionSuccess" + impressionData);
    mFirebaseAnalytics = FirebaseAnalytics.getInstance(this);
    if (impressionData != null) {
        Bundle bundle = new Bundle();
        bundle.putString(FirebaseAnalytics.Param.AD_PLATFORM, "ironSource");
        bundle.putString(FirebaseAnalytics.Param.AD_SOURCE, impressionData.getAdNetwork());
        bundle.putString(FirebaseAnalytics.Param.AD_FORMAT, impressionData.getAdUnit());
        bundle.putString(FirebaseAnalytics.Param.AD_UNIT_NAME, impressionData.getInstanceName());
        bundle.putString(FirebaseAnalytics.Param.CURRENCY, "USD");
        bundle.putDouble(FirebaseAnalytics.Param.VALUE, impressionData.getRevenue());
        mFirebaseAnalytics.logEvent(FirebaseAnalytics.Event.AD_IMPRESSION, bundle);
    }
}

Unity

private void ImpressionSuccessEvent(IronSourceImpressionData impressionData) {
  if (impressionData != null) {
      Firebase.Analytics.Parameter[] AdParameters = {
        new Firebase.Analytics.Parameter("ad_platform", "ironSource"),
        new Firebase.Analytics.Parameter("ad_source", impressionData.adNetwork),
        new Firebase.Analytics.Parameter("ad_unit_name", impressionData.getInstanceName),
        new Firebase.Analytics.Parameter("ad_format", impressionData.getAdUnit),
        new Firebase.Analytics.Parameter("currency","USD"),
        new Firebase.Analytics.Parameter("value", impressionData.getRevenue)
      };
      Firebase.Analytics.FirebaseAnalytics.LogEvent("ad_impression", AdParameters);
  }
}

Considerazioni sull'implementazione

Per consentire a Google Ads di elaborare il tuo ad_impression, assicurati di includere sia il parametro currency sia il parametro value (descritti di seguito). Entrambi i parametri devono essere il più accurati possibile per evitare di sovrastimare o sottostimare gli utenti.

Parametro valuta

Il parametro currency (iOS+ | Android | Unity) deve essere inviato come stringa in formato ISO_4217 di tre lettere (ad esempio, "USD"). Alcune piattaforme di monetizzazione degli annunci omettono la valuta, il che potrebbe richiedere la codifica hardcoded del parametro.

Parametro value

Il parametro value (iOS+ | Android | Unity) deve essere inviato utilizzando un punto come separatore decimale. Potresti dover trasformare i valori ricevuti da alcune piattaforme per adattarli al formato richiesto sopra. Alcune piattaforme localizzano i formati numerici e utilizzano le virgole come separatori decimali. In alcuni casi, una piattaforma potrebbe non inviare alcun valore.

Inoltre, il valore deve essere di tipo numerico, ad esempio double o long. Ad esempio, 1000.01, 0.001 e 1.00 sono tutti valori validi

Convalida

Google Analytics offre diverse funzionalità per convalidare l'implementazione durante il ciclo di sviluppo.

  1. DebugView
    Quando testi per la prima volta l'implementazione, utilizza DebugView per visualizzare i dati di test ad_impression nella console. Quando selezioni un evento ad_impression, puoi esaminare i parametri che invii nel riquadro Parametri (sul lato destro dello schermo). In questo modo puoi verificare che vengano elaborate le informazioni corrette.

  2. In tempo reale
    Dopo aver eseguito il deployment dell'app, utilizza il Google Analytics report In tempo reale per verificare che l'implementazione funzioni correttamente. Nel report In tempo reale, visualizza la scheda Conteggio eventi per nome evento e seleziona ad_impression per visualizzare i dettagli dell'evento e del parametro negli ultimi 30 minuti.

  3. BigQuery
    Utilizza l'esportazione BigQuery per estrarre un campione di uno o più giorni di eventi ad_impression. Utilizza questo campione estratto per cercare problemi, ad esempio valori pari a zero o non impostati, e applica correzioni al codice per eventuali casi d'uso non gestiti.

Passaggi successivi

Visita la dashboard Analytics nella console Firebase o nella proprietà Analytics collegata nella console Analytics. Le entrate pubblicitarie vengono prese in considerazione nelle metriche, come le entrate medie per utente (ARPU) e il lifetime value (LTV).