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:
Analice las acciones de los usuarios que contribuyen a los ingresos publicitarios generados por su aplicación.
Ejecute experimentos con Firebase A/B Testing para descubrir qué funciones generan mejoras en los ingresos publicitarios de su aplicación, o personalice las experiencias publicitarias mediante la personalización de Remote Config .
Cree audiencias de usuarios y personalice las experiencias de los usuarios usando Firebase Remote Config según los niveles de ingresos por publicidad.
Antes de que empieces
Si aún no lo ha hecho, asegúrese de completar las siguientes tareas:
Configure su proyecto y aplicación como se describe en Introducción a Analytics .
Asegúrese de haber vinculado su proyecto de Firebase a una cuenta de Google Analytics.
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
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
- (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
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
- (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.
Vista de depuración
Cuando pruebe su implementación por primera vez, use DebugView para ver los datos de pruebaad_impression
en la consola. Cuando selecciona un eventoad_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.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.Gran consulta
Utilice la exportación de BigQuery para extraer una muestra de uno o más días de eventosad_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).