Pomiar źródeł przychodów pomaga Ci poznać długookresową wartość użytkowników i rozwijać biznes związany z aplikacją. Z tego przewodnika dowiesz się, jak skonfigurować pomiar przychodów z reklam na swojej platformie.
Po skonfigurowaniu pomiaru przychodów z reklam możesz:
Analizuj działania użytkowników, które przyczyniają się do przychodów z reklam wygenerowanych przez Twoją aplikację.
Przeprowadzaj eksperymenty za pomocą Firebase A/B Testing, aby dowiedzieć się, które funkcje zwiększają przychody z reklam w aplikacji, lub spersonalizuj reklamy za pomocą Remote Config personalizacji.
Za pomocą Firebase Remote Config możesz tworzyć listy odbiorców i dostosowywać wrażenia użytkowników na podstawie poziomów przychodów z reklam.
Zanim zaczniesz
Jeśli jeszcze tego nie zrobiono, wykonaj te czynności:
Skonfiguruj projekt i aplikację zgodnie z opisem w artykule Pierwsze kroki z Analytics.
Upewnij się, że projekt Firebase jest połączony z kontem Google Analytics.
Upewnij się, że masz w aplikacji pakiet SDK Android w wersji 17.6.0 lub nowszej albo pakiet SDK platform Apple w wersji 6.34.0 lub nowszej.
Implementacja
Za pomocą Google Analytics możesz mierzyć przychody z reklam generowane przez wyświetlanie reklam na platformach do generowania przychodów, takich jak AdMob, AppLovin i IronSource. Aby mierzyć przychody z reklam, musisz rejestrować zdarzenia ad_impression
za każdym razem, gdy użytkownik zobaczy reklamę w aplikacji. Zdarzenia te zawierają takie szczegóły, jak platforma reklamowa, źródło, waluta i wartość.
AdMob
Jeśli korzystasz z platformy AdMob, połącz aplikację AdMob z Firebase i Analytics, aby umożliwić automatyczne pomiary przychodów z reklam. Pakiet SDK Firebase dla Google Analytics automatycznie rejestruje zdarzenie ad_impression
, gdy użytkownicy widzą wyświetlenie reklamy.
Inne platformy do zarabiania na reklamach
Platformy takie jak AppLovin i ironSource udostępniają dane o przychodach na poziomie wyświetlenia, których możesz używać do rejestrowania zdarzeń Google Analyticsad_impression
.
W sekcjach poniżej znajdziesz przykłady implementacji na kilku różnych platformach do generowania przychodu z reklam.
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+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); }
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
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+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); } }
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); } }
Uwagi o wdrażaniu
Aby umożliwić Google Ads przetworzenie ad_impression
, pamiętaj, aby uwzględnić parametry currency
i value
(opisane poniżej). Oba parametry powinny być jak najbardziej dokładne, aby uniknąć zawyżania lub zaniżania wartości użytkowników.
Parametr waluty
Parametr currency
(iOS+ | Android | Unity) powinien być wysyłany jako ciąg znaków w trzyliterowym formacie ISO_4217 (np. "USD"
). Niektóre platformy do zarabiania na reklamach pomijają walutę, co może wymagać zakodowania parametru.
Parametr wartości
Parametr value
(iOS+
| Android
| Unity)
należy przesyłać z użyciem kropki jako separatora dziesiętnego. Może być konieczne przekształcenie wartości otrzymanych z niektórych platform, aby pasowały do wymaganego formatu. Niektóre platformy lokalizują formaty liczb i używają przecinków jako separatorów dziesiętnych. W niektórych przypadkach platforma może w ogóle nie wysyłać wartości.
Dodatkowo wartość powinna być typu liczbowego, np. double lub long.
Na przykład 1000.01
, 0.001
i 1.00
są prawidłowe.
Weryfikacja
Google Analytics udostępnia wiele funkcji umożliwiających weryfikację implementacji na różnych etapach cyklu programowania.
DebugView
Podczas pierwszego testowania implementacji użyj raportu DebugView, aby wyświetlić w konsoli dane testowead_impression
. Po wybraniu zdarzeniaad_impression
możesz sprawdzić parametry, które wysyłasz, w panelu Parametry (po prawej stronie ekranu). Dzięki temu możesz potwierdzić, że przetwarzane są prawidłowe informacje.Czas rzeczywisty
Po wdrożeniu aplikacji możesz użyć Google Analytics raportu Czas rzeczywisty, aby sprawdzić, czy implementacja działa prawidłowo. W raporcie Czas rzeczywisty otwórz kartę Liczba zdarzeń według nazwy zdarzenia i wybierz zdarzenie ad_impression, aby wyświetlić szczegóły zdarzenia i parametrów z ostatnich 30 minut.BigQuery
Użyj eksportu BigQuery, aby pobrać próbkę zdarzeńad_impression
z co najmniej 1 dnia. Użyj wyodrębnionego przykładu, aby znaleźć problemy, takie jak wartości zerowe lub nieustawione, i wprowadzić poprawki w kodzie w przypadku nieobsługiwanych przypadków użycia.
Dalsze kroki
Otwórz panel Analytics w konsoli Firebase lub połączoną usługę Analytics w konsoli Analytics. Przychody z reklam są uwzględniane w danych takich jak średnie przychody na użytkownika (ARPU) i wartość od początku śledzenia (LTV).