Avaliar suas fontes de receita ajuda a entender o valor da vida útil dos usuários e a ampliar seu negócio de apps. Veja neste guia como configurar a medição da receita de publicidade na sua plataforma.
Depois disso, você vai poder fazer o seguinte:
Analisar as ações dos usuários que contribuem para a receita de publicidade gerada pelo seu app.
Fazer experimentos usando o Teste A/B do Firebase para descobrir quais recursos geram melhorias na receita de publicidade do seu app ou personalizar as experiências usando a Personalização da Configuração remota.
Criar segmentos de usuários e personalizar as experiências deles usando a Configuração remota do Firebase com base nos níveis de receita de publicidade.
Antes de começar
Conclua as tarefas a seguir, caso ainda não tenha feito isso:
Configure o projeto e o app como descrito em Primeiras etapas com o Analytics.
Verifique se você vinculou seu projeto do Firebase a uma conta do Google Analytics.
Veja se você incluiu no seu app o SDK do Android v17.6.0 ou o SDK para plataformas da Apple v6.34.0 (ou versões posteriores a essas duas).
Implementação
Use o Google Analytics para medir a receita de publicidade gerada pela exibição de anúncios com plataformas de monetização, como AdMob, AppLovin e ironSource. Para avaliar a receita de publicidade, registre os eventos ad_impression
sempre que seu usuário visualizar um anúncio no app. Esses eventos contêm
detalhes como plataforma, origem, moeda e valor dos anúncios.
AdMob
Se você usa a plataforma AdMob, vincule seu app da AdMob ao Firebase e ao Analytics para ativar a avaliação automática da receita de publicidade. O SDK do Firebase
para Google Analytics registra automaticamente o evento ad_impression
sempre que seus usuários visualizam uma impressão de anúncio.
Outras plataformas de monetização de anúncios
Plataformas como AppLovin e ironSource fornecem dados de receita no nível da impressão
que podem ser usados para registrar eventos
ad_impression
do Google Analytics.
As seções a seguir mostram exemplos de implementação para algumas plataformas de monetização de anúncios diferentes.
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); } }
Considerações de implementação
Para permitir que o Google Ads processe o ad_impression
, inclua os parâmetros currency
e value
(descritos abaixo). Ambos os parâmetros precisam ter o maior nível de precisão
possível para evitar que os usuários sejam supervalorizados ou subvalorizados.
Parâmetro de moeda
O parâmetro currency
(iOS+
| Android
| Unity)
precisa ser enviado como uma string em um formato
ISO_4217
de três letras (por exemplo, "USD"
). Algumas plataformas de monetização de anúncios omitem a moeda,
e isso pode exigir que você fixe o parâmetro no código.
Parâmetro de valor
O parâmetro value
(iOS+
| Android
| Unity)
precisa ser enviado com um ponto como separador decimal. Talvez seja necessário transformar os valores recebidos de algumas plataformas para que se ajustem ao formato descrito acima. Algumas plataformas localizam formatos numéricos e usam vírgulas como separadores decimais. Em alguns casos, é possível que uma plataforma não envie um valor.
Além disso, o valor deve ser numérico, como double ou long.
Por exemplo, 1000.01
, 0.001
e 1.00
são válidos.
Validação
O Google Analytics oferece vários recursos para validar sua implementação durante o ciclo de desenvolvimento.
DebugView
Ao testar a implementação pela primeira vez, use o DebugView para ver os dadosad_impression
do teste no console. Ao selecionar um eventoad_impression
, é possível revisar os parâmetros enviados 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 o app, 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, consulte o card Contagem de eventos por nome e selecione ad_impression para conferir os detalhes dos eventos e parâmetros dos últimos 30 minutos.BigQuery
Use o BigQuery Export para extrair a amostra de um ou mais dias de eventosad_impression
. Com essa amostra extraída, é possível procurar problemas, como valores zero ou não definidos, e aplicar correções ao seu código para todos os casos de uso não processados.
Próximas etapas
Acesse o painel do Analytics no Console do Firebase ou na sua propriedade vinculada no console do Analytics. A receita de publicidade é incluída em métricas, como a receita média por usuário (ARPU, na sigla em inglês) e o valor da vida útil (LTV).