Werbeeinnahmen messen

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

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

Vorbereitung

Führen Sie ggf. die folgenden Schritte aus:

  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 Google Analytics Konto.

  3. Fügen Sie Ihrer App das Android SDK 17.6.0 oder höher oder das Apple-Plattformen-SDK 6.34.0 oder höher hinzu.

Implementierung

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

Andere Plattformen zur Anzeigenmonetarisierung

Plattformen wie AppLovin und ironSource liefern Umsatzdaten auf Impressionsebene mit denen Sie Google Analytics ad_impression Ereignisse protokollieren können.

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

AppLovin

Swift

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

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

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

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

Hinweise zur Implementierung

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

Währungsparameter

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

Wertparameter

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

Außerdem muss der Wert ein numerischer Typ wie „double“ oder „long“ sein. Beispiele für gültige Werte sind 1000.01, 0.001 und 1.00.

Validierung

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

  1. DebugView
    Verwenden Sie DebugView, um Ihre Testdatenad_impression in der Console zu sehen. Wenn Sie ein ad_impression-Ereignis auswählen, können Sie die Parameter, die Sie senden, im Steuerfeld Parameter (auf der rechten Seite des Bildschirms) überprüfen. So können Sie bestätigen, dass 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 zu sehen.

  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 dieser Stichprobe nach Problemen wie Werten, die null oder nicht festgelegt sind, und beheben Sie alle nicht behandelten Anwendungsfälle in Ihrem Code.

Nächste Schritte

Rufen Sie das Analytics Dashboard in der Firebase Console oder in Ihrer verknüpften Analytics Property in der Analytics Console auf. Werbeeinnahmen werden in Messwerte wie den durchschnittlichen Umsatz pro Nutzer (ARPU) und den Lifetime-Wert (LTV) einbezogen.