Medir los ingresos publicitarios

Medir sus fuentes de ingresos lo ayuda a comprender el valor de por vida de sus usuarios y hacer crecer su negocio de aplicaciones. Esta guía le muestra cómo configurar la medición de ingresos publicitarios para su plataforma.

Una vez que haya configurado la medición de los ingresos publicitarios, podrá realizar cualquiera de las siguientes acciones:

Antes de que empieces

Si aún no lo ha hecho, asegúrese de completar las siguientes tareas:

  1. Configure su proyecto y aplicación como se describe en Introducción a Analytics .

  2. Asegúrese de haber vinculado su proyecto de Firebase a una cuenta de Google Analytics.

  3. Asegúrese de haber incluido en su aplicación el SDK de Android v17.6.0+ o el SDK de plataformas Apple v6.34.0+.

Implementación

Puede utilizar Google Analytics para medir los ingresos publicitarios generados al mostrar anuncios con plataformas de monetización, como AdMob, AppLovin y ironSource. Para medir los ingresos publicitarios, debe registrar eventos ad_impression cada vez que su usuario vea un anuncio en su aplicación. Estos eventos contienen detalles como la plataforma publicitaria, la fuente, la moneda y el valor.

AdMob

Si utiliza la plataforma AdMob, vincule su aplicación AdMob a Firebase y Analytics para permitir la medición automática de los ingresos publicitarios. El SDK de Firebase para Google Analytics registra automáticamente el evento ad_impression cada vez que los usuarios ven una impresión de anuncio.

Otras plataformas de monetización de anuncios

Plataformas como AppLovin y ironSource proporcionan datos de ingresos a nivel de impresiones que luego puede utilizar para registrar eventos ad_impression de Google Analytics.

Las siguientes secciones muestran ejemplos de implementación para algunas plataformas de monetización de anuncios diferentes.

AppLovin

Rápido

Nota: Este producto de Firebase no está disponible en el destino 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 objetivo

Nota: Este producto de Firebase no está disponible en el destino 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);
}

Unidad

// 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);
}

hierroFuente

Rápido

Nota: Este producto de Firebase no está disponible en el destino 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 objetivo

Nota: Este producto de Firebase no está disponible en el destino 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);
    }
}

Unidad

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);
  }
}

Consideraciones de implementación

Para permitir que Google Ads procese su ad_impression , asegúrese de incluir los parámetros currency y value (que se describen a continuación). Ambos parámetros deben ser lo más precisos posible para evitar sobrevalorar o infravalorar a los usuarios.

Parámetro de moneda

El parámetro currency ( iOS+ | Android | Unity ) debe enviarse como una cadena en formato ISO_4217 de tres letras (por ejemplo, "USD" ). Algunas plataformas de monetización de anuncios omiten la moneda, lo que puede requerir que usted codifique el parámetro.

Parámetro de valor

El parámetro value ( iOS+ | Android | Unity ) debe enviarse utilizando un punto como separador decimal. Es posible que deba transformar los valores recibidos de algunas plataformas para que se ajusten al formato requerido anteriormente. Algunas plataformas localizan formatos numéricos y utilizan comas como separadores decimales. En algunos casos, es posible que una plataforma no envíe ningún valor.

Además, el valor debe ser de tipo numérico, como doble o largo. Por ejemplo, 1000.01 , 0.001 y 1.00 son todos válidos

Validación

Google Analytics ofrece múltiples funciones para validar su implementación durante todo el ciclo de desarrollo.

  1. Vista de depuración
    Cuando pruebe su implementación por primera vez, use DebugView para ver los datos de prueba ad_impression en la consola. Cuando selecciona un evento ad_impression , puede revisar los parámetros que está enviando en el panel Parámetros (en el lado derecho de la pantalla). Esto le ayuda a confirmar que se está procesando la información correcta.

  2. Tiempo real
    Una vez que haya implementado su aplicación, utilice el informe en tiempo real de Google Analytics para confirmar que la implementación está funcionando correctamente. En el informe en tiempo real, vea la tarjeta Recuento de eventos por nombre del evento y seleccione ad_impression para ver los detalles del evento y los parámetros de los últimos 30 minutos.

  3. Gran consulta
    Utilice la exportación de BigQuery para extraer una muestra de uno o más días de eventos ad_impression . Utilice esta muestra extraída para buscar problemas, como valores cero o no establecidos, y aplique correcciones a su código para cualquier caso de uso no controlado.

Próximos pasos

Visite su panel de Analytics en Firebase console o en su propiedad de Analytics vinculada en la consola de Analytics. Los ingresos publicitarios se tienen en cuenta en métricas, como el ingreso promedio por usuario (ARPU) y el valor de por vida (LTV).