Avalie a receita de anúncios

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:

Antes de você começar

Se ainda não o fez, certifique-se de concluir as seguintes tarefas:

  1. Configure seu projeto e aplicativo conforme descrito em Primeiros passos com o Analytics .

  2. Certifique-se de vincular seu projeto do Firebase a uma conta do Google Analytics.

  3. 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

Observação: este produto Firebase não está disponível no 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,
      ])
  }
}

Objetivo-C

Observação: este produto Firebase não está disponível no 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);
}

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

Observação: este produto Firebase não está disponível no 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,
    ])
}

Objetivo-C

Observação: este produto Firebase não está disponível no 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);
    }
}

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.

  1. Visualização de depuração
    Ao testar sua implementação pela primeira vez, use DebugView para ver seus dados de teste ad_impression no console. Ao selecionar um evento ad_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.

  2. 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.

  3. BigQuery
    Use a exportação do BigQuery para extrair uma amostra de um ou mais dias de eventos ad_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).