Werbeeinnahmen messen

Wenn Sie Ihre Einnahmequellen messen, können Sie den Lifetime-Wert Ihrer Nutzer besser einschätzen und Ihren App-Umsatz steigern. In diesem Leitfaden erfahren Sie, wie Sie die Messung von Werbeeinnahmen für Ihre Plattform einrichten.

Nachdem Sie die Messung der Werbeeinnahmen eingerichtet haben, können Sie Folgendes tun:

Hinweis

Falls noch nicht geschehen, führen Sie die folgenden Aufgaben aus:

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

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

  3. Achten Sie darauf, dass Sie das Android SDK ab Version 17.6.0 oder das Apple-Plattformen-SDK ab Version 6.34.0 in Ihre App eingebunden haben.

Implementierung

Mit Google Analytics können Sie die Werbeeinnahmen messen, die durch die Auslieferung von Displayanzeigen mit Monetarisierungsplattformen wie AdMob, AppLovin und ironSource erzielt werden. Wenn Sie Werbeeinnahmen messen möchten, müssen Sie jedes Mal, wenn ein Nutzer eine Anzeige in Ihrer App sieht, ad_impression-Ereignisse protokollieren. Diese Ereignisse enthalten Details wie die Werbeplattform, 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 von Werbeeinnahmen zu aktivieren. Das Firebase SDK für Google Analytics protokolliert automatisch das Ereignis ad_impression, wenn Ihre Nutzer eine Anzeigenimpression sehen.

Andere Plattformen zur Anzeigenmonetarisierung

Plattformen wie AppLovin und ironSource stellen Umsatzdaten auf Impressionsebene bereit, mit denen Sie Google Analytics-Ereignisse vom Typ ad_impression protokollieren können.

In den folgenden Abschnitten finden Sie Implementierungsbeispiele für verschiedene Plattformen zur Anzeigenmonetarisierung.

AppLovin

Swift

Hinweis:Dieses Firebase-Produkt ist für watchOS 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,
      ])
  }
}

Objective-C

Hinweis:Dieses Firebase-Produkt ist für watchOS 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

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

Swift

Hinweis:Dieses Firebase-Produkt ist für watchOS 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,
    ])
}

Objective-C

Hinweis:Dieses Firebase-Produkt ist für watchOS 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

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

Hinweise zur Implementierung

Damit Google Ads Ihre ad_impression verarbeiten kann, müssen Sie sowohl den Parameter currency als auch den Parameter value (unten beschrieben) angeben. Beide Parameter sollten so genau wie möglich sein, um eine Über- oder Unterbewertung von Nutzern zu vermeiden.

Währungsparameter

Der Parameter currency (iOS+ | Android | Unity) sollte als String im dreistelligen ISO_4217-Format gesendet werden (z. B. "USD"). Einige Plattformen zur Anzeigenmonetarisierung lassen die Währung weg. In diesem Fall müssen Sie den Parameter möglicherweise hartcodieren.

Wertparameter

Der Parameter value (iOS+ | Android | Unity) sollte mit einem Punkt als Dezimaltrennzeichen gesendet werden. Möglicherweise müssen Sie die von einigen Plattformen empfangenen Werte so umwandeln, dass sie dem oben genannten Format entsprechen. Auf einigen Plattformen werden numerische Formate lokalisiert und Kommas als Dezimaltrennzeichen verwendet. In einigen Fällen sendet eine Plattform möglicherweise überhaupt keinen Wert.

Außerdem sollte der Wert ein numerischer Typ sein, z. B. ein Double- oder Long-Wert. Beispiel: 1000.01, 0.001 und 1.00 sind alle gültig.

Validierung

Google Analytics bietet mehrere Funktionen, mit denen Sie Ihre Implementierung während des gesamten Entwicklungszyklus validieren können.

  1. DebugView
    Wenn Sie Ihre Implementierung zum ersten Mal testen, können Sie mit DebugView Ihre ad_impression-Testdaten in der Konsole ansehen. Wenn Sie ein ad_impression-Ereignis auswählen, können Sie die Parameter, die Sie senden, im Bereich Parameter (rechts auf dem Bildschirm) prüfen. So können Sie prüfen, ob die richtigen Informationen verarbeitet werden.

  2. Echtzeit
    Nachdem Sie Ihre App bereitgestellt haben, können Sie im Google Analytics Echtzeitbericht prüfen, ob die Implementierung korrekt 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 aufzurufen.

  3. BigQuery
    Verwenden Sie den BigQuery-Export, um eine Stichprobe von ad_impression-Ereignissen für einen oder mehrere Tage zu extrahieren. Suchen Sie in diesem extrahierten Beispiel nach Problemen, z. B. nach Nullwerten oder nicht festgelegten Werten, und beheben Sie diese in Ihrem Code für alle nicht behandelten Anwendungsfälle.

Nächste Schritte

Rufen Sie Ihr Analytics-Dashboard in der Firebase-Konsole oder Ihre verknüpfte Analytics-Property in der Analytics-Konsole auf. Werbeeinnahmen werden in Messwerte wie den durchschnittlichen Umsatz pro Nutzer (ARPU) und den Lifetime-Wert (LTV) einbezogen.