Pomiar źródeł przychodów pomaga zrozumieć długoterminową wartość użytkowników i rozwijać działalność związaną z aplikacjami. W tym przewodniku dowiesz się, jak skonfigurować pomiar przychodów z reklam na swojej platformie.
Po skonfigurowaniu pomiaru przychodów z reklam możesz wykonać dowolną z następujących czynności:
Analizuj działania użytkowników, które przyczyniają się do przychodów z reklam generowanych przez Twoją aplikację.
Przeprowadzaj eksperymenty, korzystając z testów A/B Firebase, aby dowiedzieć się, jakie funkcje zwiększają przychody z reklam w Twojej aplikacji, lub spersonalizuj wygląd reklam, korzystając z personalizacji zdalnej konfiguracji .
Twórz grupy odbiorców i dostosowuj doświadczenia użytkowników za pomocą Zdalnej konfiguracji Firebase w oparciu o poziomy przychodów z reklam.
Zanim zaczniesz
Jeśli jeszcze tego nie zrobiłeś, wykonaj następujące zadania:
Skonfiguruj projekt i aplikację zgodnie z opisem w artykule Pierwsze kroki z Analytics .
Upewnij się, że połączyłeś swój projekt Firebase z kontem Google Analytics.
Upewnij się, że w aplikacji znalazłeś zestaw SDK systemu Android w wersji 17.6.0 lub nowszej lub zestaw SDK dla platform Apple w wersji 6.34.0 lub nowszej.
Realizacja
Możesz używać Google Analytics do pomiaru przychodów z reklam generowanych przez wyświetlanie reklam na platformach zarabiania, takich jak AdMob, AppLovin i ironSource. Aby zmierzyć przychody z reklam, musisz rejestrować zdarzenia ad_impression
za każdym razem, gdy użytkownik zobaczy reklamę w Twojej aplikacji. Zdarzenia te zawierają szczegółowe informacje, takie jak platforma reklamowa, źródło, waluta i wartość.
AdMob
Jeśli korzystasz z platformy AdMob, połącz swoją aplikację AdMob z Firebase i Analytics, aby umożliwić automatyczny pomiar przychodów z reklam. Pakiet SDK Firebase dla Google Analytics automatycznie rejestruje zdarzenie ad_impression
za każdym razem, gdy użytkownicy zobaczą wyświetlenie reklamy.
Inne platformy zarabiania na reklamach
Platformy takie jak AppLovin i ironSource dostarczają dane o przychodach na poziomie wyświetleń, które można następnie wykorzystać do rejestrowania zdarzeń ad_impression
w Google Analytics.
W poniższych sekcjach przedstawiono przykłady implementacji dla kilku różnych platform zarabiania na reklamach.
AppLovin
Szybki
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, ]) } }
Cel 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+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); }
Jedność
// 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); }
źródło żelaza
Szybki
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, ]) }
Cel 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+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); } }
Jedność
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); } }
Rozważania dotyczące wdrożenia
Aby umożliwić Google Ads przetworzenie ad_impression
, pamiętaj o podaniu zarówno parametrów currency
, jak i value
(opisanych poniżej). Obydwa parametry powinny być jak najbardziej dokładne, aby zapobiec przecenianiu lub niedocenianiu użytkowników.
Parametr waluty
Parametr currency
( iOS+ | Android | Unity ) należy przesłać jako ciąg znaków w trzyliterowym formacie ISO_4217 (na przykład "USD"
). Niektóre platformy zarabiania na reklamach pomijają walutę, co może wymagać zakodowania parametru na stałe.
Parametr wartości
Parametr value
( iOS+ | Android | Unity ) należy przesłać z użyciem kropki jako separatora dziesiętnego. Może być konieczne przekształcenie wartości otrzymanych z niektórych platform, aby dopasować je do wymaganego formatu powyżej. Niektóre platformy lokalizują formaty liczbowe i używają przecinków jako separatorów dziesiętnych. W niektórych przypadkach platforma może w ogóle nie wysłać wartości.
Ponadto wartość powinna być typu liczbowego, np. double lub long. Na przykład wszystkie wartości 1000.01
, 0.001
i 1.00
są prawidłowe
Walidacja
Google Analytics oferuje wiele funkcji umożliwiających sprawdzanie implementacji w całym cyklu rozwoju.
Widok debugowania
Podczas pierwszego testowania implementacji użyj DebugView , aby zobaczyć dane testowead_impression
w konsoli. Po wybraniu zdarzeniaad_impression
możesz sprawdzić wysyłane parametry w panelu Parametry (po prawej stronie ekranu). Pomaga to potwierdzić, że przetwarzane są prawidłowe informacje.Czas rzeczywisty
Po wdrożeniu aplikacji skorzystaj z raportu Google Analytics Realtime , aby sprawdzić, czy implementacja działa prawidłowo. W raporcie w czasie rzeczywistym wyświetl liczbę zdarzeń według karty nazwy zdarzenia i wybierz opcję ad_impression , aby wyświetlić szczegóły zdarzenia i parametrów z ostatnich 30 minut.BigQuery
Użyj eksportu BigQuery, aby wyodrębnić próbkę zdarzeńad_impression
z jednego lub większej liczby dni. Użyj tego wyodrębnionego przykładu, aby wyszukać problemy, takie jak wartości zerowe lub nieustawione, i zastosuj poprawki do kodu w przypadku wszelkich nieobsługiwanych przypadków użycia.
Następne kroki
Odwiedź swój panel Analytics w konsoli Firebase lub w połączonej usłudze Analytics w konsoli Analytics. Przychody z reklam są uwzględniane w takich wskaźnikach, jak średni przychód na użytkownika (ARPU) i wartość od początku użytkowania (LTV).