La medición de tus fuentes de ingresos te ayuda a comprender el valor del ciclo de vida de los usuarios y a hacer crecer el negocio de tu app. En esta guía, se muestra cómo configurar la medición de los ingresos publicitarios en tu plataforma.
Después de configurar la medición de estos ingresos, puedes realizar cualquiera de las siguientes acciones:
Analizar las acciones de los usuarios que contribuyen a los ingresos publicitarios que genera tu app
Ejecutar experimentos con Firebase A/B Testing para descubrir qué funciones generan mejoras en los ingresos publicitarios de tu app o personalizar las experiencias del anuncio con la personalización de Remote Config
Crear públicos de usuarios y adaptar las experiencias del usuario con Firebase Remote Config según los niveles de ingresos publicitarios
Antes de comenzar
Si aún no lo hiciste, asegúrate de completar las siguientes tareas:
Configura tu proyecto y app como se describe en Comienza a usar Google Analytics.
Asegúrate de haber vinculado tu proyecto de Firebase a una cuenta de Google Analytics.
Asegúrate de haber incluido en tu app la versión 17.6.0 (o una posterior) del SDK de Android o el SDK para plataformas de Apple versión 6.34.0 (o una posterior).
Implementación
Puedes usar Google Analytics para medir los ingresos publicitarios que se generan
por la publicación de anuncios en plataformas de monetización, como AdMob, ironSource y
AppLovin. Para medir los ingresos publicitarios, debes registrar los
eventos ad_impression
cada vez que los usuarios vean anuncios en tu app. Estos eventos contienen
detalles como la plataforma del anuncio, la fuente, la moneda y el valor.
AdMob
Si usas la plataforma de AdMob,
vincula la app de AdMob a Firebase y Analytics
para habilitar 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 anuncios.
Otras plataformas de monetización mediante anuncios
Las plataformas como ironSource y AppLovin proporcionan datos de ingresos a nivel de las impresiones
que puedes usar para registrar eventos
ad_impression
de Google Analytics.
En las siguientes secciones, se muestran ejemplos de implementación para diferentes plataformas de monetización mediante anuncios.
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); } }
Consideraciones sobre la implementación
Para permitir que Google Ads procese tu
ad_impression
, asegúrate de incluir
los parámetros currency
y value
(como se describe a continuación). Ambos
deben ser lo más precisos posible para evitar sobrevalorar o
infravalorar a los usuarios.
Parámetro currency
El parámetro currency
(iOS+
| Android
| Unity)
debe enviarse como una cadena en un formato
ISO_4217
de tres letras (por ejemplo, "USD"
). Algunas plataformas de monetización mediante anuncios omiten la moneda,
lo que puede requerir que codifiques el parámetro.
Parámetro value
El parámetro value
(iOS+
| Android
| Unity)
debe enviarse con un punto como separador decimal. Es posible que debas transformar
los valores recibidos de algunas plataformas para que se ajusten al formato que se mencionó. Algunas
plataformas localizan formatos numéricos y usan comas como separadores decimales. En
algunos casos, es posible que una plataforma no envíe ningún valor.
Además, el valor debe ser un tipo numérico, como del tipo double o long.
Por ejemplo, 1000.01
, 0.001
y 1.00
son
válidos
Validación
Google Analytics ofrece varias funciones para validar tu implementación durante todo el ciclo de desarrollo.
DebugView
Cuando pruebes tu implementación por primera vez, usa DebugView para ver los datos dead_impression
de prueba en la consola. Cuando seleccionas un eventoad_impression
, puedes revisar los parámetros que envías en el panel Parameters (en el lado derecho de la pantalla). Esto te ayudará a confirmar que se esté procesando la información correcta.Realtime
Una vez que hayas implementado la app, usa el informe Realtime de Google Analytics para confirmar que la implementación funciona correctamente. En el informe Realtime, consulta la tarjeta Event count by Event name y selecciona ad_impression para ver los detalles del evento y los parámetros de los últimos 30 minutos.BigQuery
Usa BigQuery Export para extraer una muestra de uno o más días de eventosad_impression
. Usa esta muestra para buscar problemas, como valores cero o de parámetro no establecido, y aplica correcciones a tu código para todos los casos de uso no controlados.
Próximos pasos
Visita el panel de Analytics en Firebase console o en la propiedad vinculada de Analytics en la consola de Analytics. Los ingresos publicitarios se incluyen en métricas, como el promedio de ingresos por usuario (ARPU) y el valor del ciclo de vida del cliente (LTV).