Werbeeinnahmen messen

Durch die Messung Ihrer Einnahmequellen können Sie den Lifetime-Wert Ihrer Benutzer verstehen und Ihr App-Geschäft ausbauen. In dieser Anleitung erfahren Sie, wie Sie die Messung der Werbeeinnahmen für Ihre Plattform einrichten.

Nachdem Sie die Messung des Werbeumsatzes eingerichtet haben, können Sie einen der folgenden Schritte ausführen:

Bevor Sie beginnen

Wenn Sie dies noch nicht getan haben, stellen Sie sicher, dass Sie die folgenden Aufgaben ausführen:

  1. Richten Sie Ihr Projekt und Ihre App wie unter „Erste Schritte mit Analytics“ beschrieben ein.

  2. Stellen Sie sicher, dass Sie Ihr Firebase-Projekt mit einem Google Analytics-Konto verknüpft haben.

  3. Stellen Sie sicher, dass Sie das Android SDK v17.6.0+ oder das Apple-Plattform-SDK v6.34.0+ in Ihre App eingebunden haben.

Implementierung

Mit Google Analytics können Sie die Werbeeinnahmen messen, die durch die Anzeige von Anzeigen auf Monetarisierungsplattformen wie AdMob, AppLovin und ironSource generiert werden. Um den Werbeumsatz zu messen, müssen Sie ad_impression Ereignisse protokollieren, wann immer Ihr Benutzer eine Werbung in Ihrer App sieht. Diese Ereignisse enthalten Details wie die Anzeigenplattform, die Quelle, die Währung und den Wert.

AdMob

Wenn Sie die AdMob-Plattform verwenden, verknüpfen Sie Ihre AdMob-App mit Firebase und Analytics, um die automatische Messung des Werbeumsatzes zu ermöglichen. Das Firebase SDK für Google Analytics protokolliert automatisch das ad_impression Ereignis, wenn Ihre Nutzer eine Anzeigenimpression sehen.

Andere Plattformen zur Anzeigenmonetarisierung

Plattformen wie AppLovin und ironSource stellen Umsatzdaten auf Impressionsebene bereit, die Sie dann zum Protokollieren ad_impression Ereignissen in Google Analytics verwenden können.

Die folgenden Abschnitte zeigen Implementierungsbeispiele für einige verschiedene Plattformen zur Anzeigenmonetarisierung.

AppLovin

Schnell

Hinweis: Dieses Firebase-Produkt ist auf dem macOS-Ziel nicht verfügbar.
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,
      ])
  }
}

Ziel c

Hinweis: Dieses Firebase-Produkt ist auf dem macOS-Ziel nicht verfügbar.
- (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+KTX

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);
}

Einheit

// 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

Schnell

Hinweis: Dieses Firebase-Produkt ist auf dem macOS-Ziel nicht verfügbar.
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,
    ])
}

Ziel c

Hinweis: Dieses Firebase-Produkt ist auf dem macOS-Ziel nicht verfügbar.
- (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+KTX

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);
    }
}

Einheit

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);
  }
}

Überlegungen zur Implementierung

Damit Google Ads Ihre ad_impression verarbeiten kann, stellen Sie sicher, dass Sie sowohl die currency als auch die value angeben (unten beschrieben). Beide Parameter sollten so genau wie möglich sein, um eine Über- oder Unterbewertung der Nutzer zu verhindern.

Währungsparameter

Der currency ( iOS+ | Android | Unity ) sollte als Zeichenfolge im dreibuchstabigen ISO_4217- Format gesendet werden (z. B. "USD" ). Einige Plattformen zur Anzeigenmonetarisierung lassen die Währung aus, sodass Sie den Parameter möglicherweise fest codieren müssen.

Wertparameter

Der value ( iOS+ | Android | Unity ) sollte mit einem Punkt als Dezimaltrennzeichen gesendet werden. Möglicherweise müssen Sie die von einigen Plattformen empfangenen Werte umwandeln, um sie an das oben erforderliche Format anzupassen. Einige Plattformen lokalisieren numerische Formate und verwenden Kommas als Dezimaltrennzeichen. In einigen Fällen sendet eine Plattform möglicherweise überhaupt keinen Wert.

Darüber hinaus sollte der Wert ein numerischer Typ sein, z. B. „double“ oder „long“. Beispielsweise sind 1000.01 , 0.001 und 1.00 alle gültig

Validierung

Google Analytics bietet mehrere Funktionen zur Validierung Ihrer Implementierung während des gesamten Entwicklungszyklus.

  1. DebugView
    Wenn Sie Ihre Implementierung zum ersten Mal testen, verwenden Sie DebugView , um Ihre Test- ad_impression Daten in der Konsole anzuzeigen. Wenn Sie ein ad_impression Ereignis auswählen, können Sie die Parameter, die Sie senden, im Parameterbereich (rechts auf dem Bildschirm) überprüfen. Dies hilft Ihnen zu bestätigen, dass die richtigen Informationen verarbeitet werden.

  2. Echtzeit
    Sobald Sie Ihre App bereitgestellt haben, verwenden Sie den Google Analytics- Echtzeitbericht , um zu bestätigen, dass die Implementierung ordnungsgemäß funktioniert. Sehen Sie sich im Echtzeitbericht die Karte „Ereignisanzahl nach Ereignisname“ an und wählen Sie „ad_impression“ aus, um die Ereignis- und Parameterdetails für die letzten 30 Minuten anzuzeigen.

  3. BigQuery
    Verwenden Sie den BigQuery-Export , um eine Stichprobe von ad_impression Ereignissen eines oder mehrerer Tage zu extrahieren. Verwenden Sie dieses extrahierte Beispiel, um nach Problemen wie Nullwerten oder nicht festgelegten Werten zu suchen und Korrekturen für alle nicht behandelten Anwendungsfälle auf Ihren Code anzuwenden.

Nächste Schritte

Besuchen Sie Ihr Analytics-Dashboard in der Firebase-Konsole oder in Ihrer verknüpften Analytics-Property in der Analytics-Konsole. Der Werbeumsatz wird in Kennzahlen wie dem durchschnittlichen Umsatz pro Nutzer (ARPU) und dem Lifetime Value (LTV) berücksichtigt.