Анализ источников дохода поможет вам понять общую ценность ваших пользователей и развивать свой бизнес. В этом руководстве рассказывается, как настроить отслеживание дохода от рекламы на вашей платформе.
После того как вы настроите отслеживание дохода от рекламы, вы сможете:
Анализируйте действия пользователей, которые способствуют получению дохода от рекламы в приложении.
Проводите эксперименты с помощью Firebase A/B Testing, чтобы узнать, какие функции помогают увеличить доход от рекламы приложений, или используйте персонализацию Remote Config.
Создавайте аудитории пользователей и повышайте удобство приложений с помощью Firebase Remote Config на основе уровней дохода от рекламы.
Подготовка
Если вы ещё не сделали этого, выполните следующие действия:
Настройте проект и приложение, как описано в статье Начало работы с Analytics.
Убедитесь, что вы связали проект Firebase с аккаунтом Google Analytics.
Убедитесь, что в ваше приложение включен Android SDK версии 17.6.0 или более поздней или Apple platforms SDK версии 6.34.0 или более поздней.
Реализация
Google Analytics позволяет отслеживать доход от показа рекламы на платформах монетизации, таких как AdMob, AppLovin и ironSource. Чтобы отслеживать доход от рекламы, вы должны регистрировать события ad_impression каждый раз, когда пользователь видит рекламу в вашем приложении. Эти события содержат сведения о рекламной платформе, источнике, валюте и стоимости.
AdMob
Если вы используете платформу AdMob, свяжите приложение AdMob с Firebase и Analytics, чтобы отслеживать доход от рекламы автоматически. Firebase SDK для Google Analytics автоматически регистрирует событие ad_impression при каждом показе объявления вашим пользователям.
Другие платформы монетизации
Платформы, такие как AppLovin и ironSource, предоставляют данные о доходе на уровне показа, которые можно использовать для регистрации событий Google Analytics
ad_impression.
В следующих разделах приведены примеры реализации для нескольких разных платформ монетизации рекламы.
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); }
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
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); } }
О чем важно помнить
Чтобы Google Ads мог обрабатывать ad_impression, добавьте параметры currency и value (описаны ниже). Оба параметра должны быть как можно точнее, чтобы не переоценивать и не недооценивать пользователей.
Параметр валюты
Параметр currency (iOS+ | Android | Unity) должен быть строкой в трехбуквенном формате ISO_4217 (например, "USD"). Некоторые платформы монетизации не передают валюту, поэтому вам может потребоваться жестко задать параметр.
Параметр value
Параметр value (iOS+, Android, Unity) должен передаваться с точкой в качестве десятичного разделителя. Возможно, вам потребуется преобразовать значения, полученные от некоторых платформ, чтобы они соответствовали указанному выше формату. Некоторые платформы локализуют числовые форматы и используют запятые в качестве десятичных разделителей. В некоторых случаях платформа может не отправлять значение.
Кроме того, значение должно быть числовым, например типа double или long.
Например, 1000.01, 0.001 и 1.00 – допустимые
Проверка
Google Analytics предлагает несколько функций для проверки реализации на протяжении всего цикла разработки.
DebugView
При первом тестировании реализации используйте DebugView, чтобы просматривать тестовые данныеad_impressionв консоли. Когда вы выбираете событиеad_impression, вы можете посмотреть параметры, которые отправляете, на панели Параметры (справа на экране). Это поможет вам убедиться, что обрабатывается правильная информация.В реальном времени
После того как вы развернете приложение, используйте Google Analytics отчет в реальном времени, чтобы убедиться, что реализация работает правильно. В отчете в реальном времени откройте карточку Количество событий с разбивкой по параметру "Название события" и выберите ad_impression, чтобы посмотреть сведения о событии и параметрах за последние 30 минут.BigQuery
Используйте команду BigQuery export, чтобы извлечь образец событийad_impressionза один или несколько дней. Используйте извлеченный образец, чтобы найти проблемы, например нулевые или неустановленные значения, и применить исправления к коду для всех необработанных вариантов использования.
Дальнейшие действия
Откройте панель управления Analytics в консоли Firebase или связанный ресурс Analytics в консоли Analytics. Доход от рекламы учитывается в таких показателях, как средний доход на пользователя (ARPU) и пожизненная ценность (LTV).