Werbeeinnahmen messen

Wenn Sie Ihre Umsatzquellen messen, können Sie den Lifetime-Wert Ihrer Nutzer besser nachvollziehen und Ihr App-Geschäft ausbauen. In diesem Leitfaden erfährst du, wie du die Analyse von Werbeeinnahmen für deine Plattform einrichtest.

Nachdem Sie die Analyse von Werbeeinnahmen eingerichtet haben, haben Sie folgende Möglichkeiten:

Hinweis

Führen Sie die folgenden Aufgaben aus, falls Sie das noch nicht getan haben:

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

  2. Verknüpfen Sie Ihr Firebase-Projekt mit einem Google Analytics-Konto.

  3. Achten Sie darauf, dass Sie in Ihrer App das Android SDK 17.6.0 oder höher oder das SDK für Apple-Plattformen 6.34.0 oder höher eingebunden haben.

Implementierung

Mit Google Analytics können Sie die Werbeeinnahmen erfassen, die durch die Auslieferung von Anzeigen über Monetarisierungsplattformen wie AdMob, AppLovin und ironSource erzielt werden. Wenn Sie Werbeeinnahmen erfassen möchten, müssen Sie ad_impression-Ereignisse erfassen, wenn ein Nutzer eine Anzeige 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 Analyse des Werbeumsatzes zu aktivieren. Das Firebase SDK für Google Analytics protokolliert das Ereignis ad_impression automatisch, wenn Nutzer eine Anzeigenimpression sehen.

Andere Plattformen zur Anzeigenmonetarisierung

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

In den folgenden Abschnitten findest du Implementierungsbeispiele für verschiedene Plattformen zur Anzeigenmonetarisierung.

AppLovin

Swift

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

Objective-C

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

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 das 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,
    ])
}

Objective-C

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

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 (siehe unten) 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) muss als String im Format ISO_4217 mit drei Buchstaben gesendet werden (z. B. "USD"). Einige Plattformen zur Anzeigenmonetarisierung lassen die Währung aus, sodass Sie den Parameter möglicherweise hartcodieren müssen.

Wertparameter

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

Außerdem sollte der Wert einen numerischen Typ wie „double“ oder „long“ haben. 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
    Verwenden Sie beim ersten Testen Ihrer Implementierung DebugView, um Ihre Testad_impression-Daten in der Konsole zu sehen. Wenn Sie ein ad_impression-Ereignis auswählen, können Sie die gesendeten Parameter im Bereich Parameter (rechts auf dem Bildschirm) überprüfen. So können Sie überprüfen, ob die richtigen Informationen verarbeitet werden.

  2. Echtzeit
    Nachdem Sie Ihre App bereitgestellt haben, können Sie mit dem Google Analytics Echtzeitbericht prüfen, ob die Implementierung richtig funktioniert. Rufen Sie im Echtzeitbericht die Karte Ereignisanzahl nach Ereignisname auf und wählen Sie ad_impression aus, um die Ereignis- und Parameterdetails für die letzten 30 Minuten zu sehen.

  3. BigQuery
    Mit dem BigQuery-Export können Sie eine Stichprobe von ad_impression-Ereignissen für einen oder mehrere Tage extrahieren. Verwenden Sie diese extrahierte Stichprobe, um nach Problemen wie Null- oder nicht festgelegten Werten zu suchen, und wenden Sie Korrekturen auf Ihren Code für alle nicht verarbeiteten Anwendungsfälle an.

Nächste Schritte

Rufen Sie Ihr Analytics-Dashboard in der Firebase-Konsole oder in Ihrer verknüpften Analytics-Property in der Firebase-Konsole auf.Analytics Werbeeinnahmen werden in Messwerte wie den durchschnittlichen Umsatz pro Nutzer (Average Revenue Per User, ARPU) und den Lifetime-Wert (LTV) einbezogen.