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:
Analysieren Sie die Nutzeraktionen, die in Ihrer App zu Werbeeinnahmen beitragen.
Anhand von Firebase A/B Testing können Sie herausfinden, welche Faktoren in Ihrer App zu höheren Werbeeinnahmen führen. Und die Remote Config-Personalisierung ermöglicht Ihnen, die Auslieferung von Anzeigen individuell anzupassen.
Mit Firebase Remote Config können Sie Zielgruppen von Nutzern erstellen und basierend auf den Werbeeinnahmen die Nutzererfahrung anpassen.
Hinweis
Falls noch nicht geschehen, führen Sie die folgenden Aufgaben aus:
Richten Sie Ihr Projekt und Ihre App wie unter Erste Schritte mit Analytics beschrieben ein.
Achten Sie darauf, dass Sie Ihr Firebase-Projekt mit einem Google Analytics-Konto verknüpft haben.
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
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
- (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
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
- (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.
DebugView
Wenn Sie Ihre Implementierung zum ersten Mal testen, können Sie mit DebugView Ihread_impression-Testdaten in der Konsole ansehen. Wenn Sie einad_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.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.BigQuery
Verwenden Sie den BigQuery-Export, um eine Stichprobe vonad_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.