Измерение источников дохода поможет вам понять пожизненную ценность ваших пользователей и развивать свой бизнес приложений. В этом руководстве показано, как настроить измерение доходов от рекламы для вашей платформы.
Настроив отслеживание доходов от рекламы, вы можете выполнить любое из следующих действий:
Анализируйте действия пользователей, которые способствуют доходу от рекламы, генерируемому вашим приложением.
Проводите эксперименты с помощью Firebase A/B Testing чтобы выяснить, какие функции способствуют повышению доходов от рекламы в вашем приложении, или персонализируйте рекламный опыт с помощью персонализации Remote Config .
Создавайте пользовательские аудитории и адаптируйте пользовательский опыт с помощью Firebase Remote Config в зависимости от уровня доходов от рекламы.
Прежде чем начать
Если вы еще этого не сделали, обязательно выполните следующие задачи:
Настройте свой проект и приложение, как описано в разделе «Начало работы с Analytics .
Убедитесь, что вы связали свой проект Firebase с учетной записью Google Analytics .
Убедитесь, что вы включили в свое приложение Android SDK v17.6.0+ или SDK платформы Apple v6.34.0+.
Выполнение
Вы можете использовать Google Analytics для измерения доходов от рекламы, полученных от показа рекламы на платформах монетизации, таких как AdMob , AppLovin и IronSource. Чтобы измерить доход от рекламы, вы должны регистрировать события ad_impression
каждый раз, когда пользователь видит рекламу в вашем приложении. Эти события содержат такие сведения, как рекламная платформа, источник, валюта и стоимость.
AdMob
Если вы используете платформу AdMob , свяжите свое приложение AdMob с Firebase и Analytics чтобы обеспечить автоматическое измерение доходов от рекламы. Firebase SDK для Google Analytics автоматически регистрирует событие ad_impression
каждый раз, когда ваши пользователи видят показ рекламы.
Другие платформы монетизации рекламы
Такие платформы, как AppLovin и IronSource, предоставляют данные о доходах на уровне показов, которые затем можно использовать для регистрации событий ad_impression
Google Analytics .
В следующих разделах показаны примеры реализации для нескольких различных платформ монетизации рекламы.
AppLovin
Быстрый
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, ]) } }
Цель-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); }
Единство
// 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); }
железоИсточник
Быстрый
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, ]) }
Цель-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); } }
Единство
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
( iOS+ | Android | Unity ) следует отправлять с использованием точки в качестве десятичного разделителя. Возможно, вам придется преобразовать значения, полученные от некоторых платформ, чтобы они соответствовали требуемому формату, указанному выше. Некоторые платформы локализуют числовые форматы и используют запятые в качестве десятичных разделителей. В некоторых случаях платформа может вообще не отправлять значение.
Кроме того, значение должно быть числового типа, например double или long. Например, все значения 1000.01
, 0.001
и 1.00
действительны.
Валидация
Google Analytics предлагает множество функций для проверки вашей реализации на протяжении всего цикла разработки.
Дебагвиев
При первом тестировании реализации используйте DebugView, чтобы просмотреть тестовые данныеad_impression
в консоли. Выбрав событиеad_impression
, вы можете просмотреть отправляемые параметры на панели «Параметры» (в правой части экрана). Это поможет вам убедиться, что обрабатывается правильная информация.В реальном времени
После развертывания приложения используйте отчет Google Analytics Realtime, чтобы убедиться, что реализация работает правильно. В отчете в реальном времени просмотрите количество событий по карточкам с названиями событий и выберите ad_impression, чтобы просмотреть сведения о событии и параметрах за последние 30 минут.BigQuery
Используйте экспорт BigQuery , чтобы получить выборку событийad_impression
за один или несколько дней. Используйте этот извлеченный образец для поиска проблем, таких как нулевые или неустановленные значения, и внесения исправлений в свой код для любых необработанных вариантов использования.
Следующие шаги
Посетите панель управления Analytics в консоли Firebase или связанный ресурс Analytics в консоли Analytics . Доход от рекламы учитывается в таких показателях, как средний доход на пользователя (ARPU) и пожизненная ценность (LTV).