Измеряйте доход от рекламы

Измерение источников дохода поможет вам понять пожизненную ценность ваших пользователей и развивать свой бизнес приложений. В этом руководстве показано, как настроить измерение доходов от рекламы для вашей платформы.

Настроив отслеживание доходов от рекламы, вы можете выполнить любое из следующих действий:

Прежде чем вы начнете

Если вы еще этого не сделали, обязательно выполните следующие задачи:

  1. Настройте свой проект и приложение, как описано в разделе «Начало работы с Analytics» .

  2. Убедитесь, что вы связали свой проект Firebase с учетной записью Google Analytics.

  3. Убедитесь, что вы включили в свое приложение Android SDK v17.6.0+ или SDK платформы Apple v6.34.0+.

Выполнение

Вы можете использовать Google Analytics для измерения доходов от рекламы, полученных от показа рекламы на платформах монетизации, таких как AdMob, AppLovin и IronSource. Чтобы измерить доход от рекламы, вы должны регистрировать события ad_impression каждый раз, когда пользователь видит рекламу в вашем приложении. Эти события содержат такие сведения, как рекламная платформа, источник, валюта и стоимость.

Реклама в приложении

Если вы используете платформу AdMob, свяжите свое приложение AdMob с Firebase и Analytics, чтобы обеспечить автоматическое измерение доходов от рекламы. Firebase SDK для Google Analytics автоматически регистрирует событие ad_impression каждый раз, когда ваши пользователи видят показ рекламы.

Другие платформы монетизации рекламы

Такие платформы, как AppLovin и IronSource, предоставляют данные о доходах на уровне показов, которые затем можно использовать для регистрации событий ad_impression в Google Analytics.

В следующих разделах показаны примеры реализации для нескольких различных платформ монетизации рекламы.

AppLovin

Быстрый

Примечание. Этот продукт Firebase недоступен в целевой системе macOS.
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

Примечание. Этот продукт Firebase недоступен в целевой системе macOS.
- (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);
}

железоИсточник

Быстрый

Примечание. Этот продукт Firebase недоступен в целевой системе macOS.
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

Примечание. Этот продукт Firebase недоступен в целевой системе macOS.
- (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 Реклама могла обработать ваш 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 предлагает множество функций для проверки вашей реализации на протяжении всего цикла разработки.

  1. Дебагвиев
    При первом тестировании реализации используйте DebugView , чтобы просмотреть тестовые данные ad_impression в консоли. Выбрав событие ad_impression , вы можете просмотреть отправляемые параметры на панели «Параметры» (в правой части экрана). Это поможет вам убедиться, что обрабатывается правильная информация.

  2. В реальном времени
    После развертывания приложения используйте отчет Google Analytics Realtime , чтобы убедиться, что реализация работает правильно. В отчете в реальном времени просмотрите количество событий по карточкам с названиями событий и выберите ad_impression , чтобы просмотреть сведения о событии и параметрах за последние 30 минут.

  3. Большой запрос
    Используйте экспорт BigQuery, чтобы получить выборку событий ad_impression за один или несколько дней. Используйте этот извлеченный образец для поиска проблем, таких как нулевые или неустановленные значения, и внесения исправлений в свой код для любых необработанных вариантов использования.

Следующие шаги

Посетите панель управления Analytics в консоли Firebase или связанный ресурс Analytics в консоли Analytics. Доход от рекламы учитывается в таких показателях, как средний доход на пользователя (ARPU) и пожизненная ценность (LTV).