Medir suas fontes de receita ajuda você a entender o valor da vida útil de seus usuários e a expandir seus negócios de aplicativos. Este guia mostra como configurar a medição da receita de anúncios para sua plataforma.
Depois de configurar a medição da receita de anúncios, você poderá fazer o seguinte:
Analise as ações dos usuários que contribuem para a receita publicitária gerada pelo seu aplicativo.
Faça experimentos usando o Teste A/B do Firebase para descobrir quais recursos geram melhorias na receita de anúncios do seu aplicativo ou personalize experiências de anúncios usando a personalização da Configuração remota .
Crie públicos-alvo e personalize experiências de usuário usando o Firebase Remote Config com base nos níveis de receita de anúncios.
Antes de você começar
Se ainda não o fez, certifique-se de concluir as seguintes tarefas:
Configure seu projeto e aplicativo conforme descrito em Primeiros passos com o Analytics .
Certifique-se de vincular seu projeto do Firebase a uma conta do Google Analytics.
Certifique-se de ter incluído em seu aplicativo o SDK do Android v17.6.0+ ou o SDK das plataformas Apple v6.34.0+.
Implementação
Você pode usar o Google Analytics para medir a receita publicitária gerada pela exibição de anúncios em plataformas de monetização, como AdMob, AppLovin e ironSource. Para medir a receita publicitária, você deve registrar eventos ad_impression
sempre que o usuário vir um anúncio no seu aplicativo. Esses eventos contêm detalhes como plataforma de anúncio, origem, moeda e valor.
AdMob
Se você estiver usando a plataforma da AdMob, vincule seu aplicativo da AdMob ao Firebase e ao Analytics para permitir a medição automática da receita de anúncios. O SDK do Firebase para Google Analytics registra automaticamente o evento ad_impression
sempre que seus usuários veem uma impressão de anúncio.
Outras plataformas de monetização de anúncios
Plataformas como AppLovin e ironSource fornecem dados de receita em nível de impressão que você pode usar para registrar eventos ad_impression
do Google Analytics.
As seções a seguir mostram exemplos de implementação para algumas plataformas diferentes de monetização de anúncios.
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, ]) } }
Objetivo-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); }
Unidade
// 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); }
ferroFonte
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, ]) }
Objetivo-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); } }
Unidade
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); } }
Considerações de implementação
Para permitir que o Google Ads processe seu ad_impression
, inclua os parâmetros currency
e value
(descritos abaixo). Ambos os parâmetros devem ser tão precisos quanto possível para evitar sobrevalorizar ou subvalorizar os utilizadores.
Parâmetro de moeda
O parâmetro currency
( iOS+ | Android | Unity ) deve ser enviado como uma string no formato ISO_4217 de três letras (por exemplo, "USD"
). Algumas plataformas de monetização de anúncios omitem a moeda, o que pode exigir que você codifique o parâmetro.
Parâmetro de valor
O parâmetro value
( iOS+ | Android | Unity ) deve ser enviado usando um ponto como separador decimal. Pode ser necessário transformar os valores recebidos de algumas plataformas para ajustá-los ao formato exigido acima. Algumas plataformas localizam formatos numéricos e usam vírgulas como separadores decimais. Em alguns casos, uma plataforma pode não enviar nenhum valor.
Além disso, o valor deve ser do tipo numérico, como double ou long. Por exemplo, 1000.01
, 0.001
e 1.00
são todos válidos
Validação
O Google Analytics oferece vários recursos para validar sua implementação ao longo do ciclo de desenvolvimento.
Visualização de depuração
Ao testar sua implementação pela primeira vez, use DebugView para ver seus dados de testead_impression
no console. Ao selecionar um eventoad_impression
, você pode revisar os parâmetros que está enviando no painel Parâmetros (no lado direito da tela). Isso ajuda a confirmar se as informações corretas estão sendo processadas.Tempo real
Depois de implantar seu aplicativo, use o relatório em tempo real do Google Analytics para confirmar se a implementação está funcionando corretamente. No relatório em tempo real, visualize a contagem de eventos por cartão de nome do evento e selecione ad_impression para ver os detalhes do evento e dos parâmetros dos últimos 30 minutos.BigQuery
Use a exportação do BigQuery para extrair uma amostra de um ou mais dias de eventosad_impression
. Use este exemplo extraído para procurar problemas, como valores zero ou não definidos, e aplicar correções ao seu código para quaisquer casos de uso não tratados.
Próximos passos
Visite o painel do Analytics no console do Firebase ou na propriedade vinculada do Analytics no console do Analytics. A receita de anúncios é considerada em métricas, como receita média por usuário (ARPU) e valor vitalício (LTV).