SDK do React Native - Acompanhamento de receitas de anúncios

Atribuição de receita de anúncios

Conecte a receita de anúncios às campanhas de marketing específicas que trouxeram usuários para o seu app, obtendo visibilidade completa dos custos de campanha, da receita in-app e da receita de anúncios para medir o ROI com precisão.

Visão geral

O que é atribuição de receita de anúncios

A atribuição de receita de anúncios vincula a receita de anúncios do app móvel às campanhas de marketing que geraram os usuários, permitindo medir o desempenho real da campanha ao conectar os custos de aquisição de usuários com a receita de todo o ciclo de vida, incluindo a monetização por anúncios.

  • ROI da campanha: Veja custo de campanha, compras in-app e receita de anúncios em relatórios unificados para calcular o retorno real sobre o investimento em anúncios
  • Otimização de rede: Envie os dados de receita de anúncios de volta às redes de anúncios para melhorar os algoritmos de lance e o desempenho das campanhas
  • Fontes de dados: Compatível com dados em nível de usuário e de impressão de plataformas de mediação como AdMob, AppLovin MAX, Unity LevelPlay (IronSource) e TradPlus

Para mais detalhes, consulte as Perguntas frequentes sobre atribuição de receita de anúncios.

Considerações importantes:

  1. Códigos de moeda: Use códigos de moeda ISO 4217 de três letras (USD, EUR, INR). A maioria das plataformas de mediação reporta em USD; verifique a moeda da sua plataforma antes da implementação
  2. Precisão dos dados: Valide os dados de receita e moeda antes de enviá-los ao Singular. Dados incorretos não podem ser corrigidos retroativamente

Requisitos de implementação

O rastreamento de receita de anúncios exige integração com o SDK da sua plataforma de mediação e a configuração de callbacks de receita.

  1. Versão do SDK: Atualize para a versão mais recente do SDK do React Native da Singular
  2. Plataforma de mediação: Integre o SDK do React Native da sua plataforma de mediação (AdMob, AppLovin MAX, IronSource ou TradPlus)
  3. Callbacks de receita: Implemente os handlers de eventos pagos específicos de cada plataforma para capturar dados de receita em nível de impressão
  4. Lógica de validação: Adicione validação de receita e moeda antes de enviar os dados ao Singular

Método do SDK

Singular.adRevenue

Reporta os dados de receita de anúncios ao Singular com plataforma, moeda e valor de receita para atribuição à campanha de aquisição do usuário.

Assinatura do método:

static adRevenue(adData: SingularAdData | {
    ad_platform: string;
    ad_currency: string;
    ad_revenue: number;
    [key: string]: any;
}): void

Os nomes das chaves são verificados exatamente. O SDK procura por ad_platform, ad_currency e ad_revenue. Se qualquer uma das três estiver ausente, adRevenue() retorna sem enviar nada e não gera erro algum, de modo que uma chave digitada errado produz silêncio em vez de falha. Montar o payload com SingularAdData elimina esse risco.

Parâmetros obrigatórios:

  • ad_platform: Nome da plataforma de mediação (por exemplo, "AdMob", "AppLovin", "IronSource", "TradPlus")
  • ad_currency: Código de moeda ISO 4217 de três letras (por exemplo, "USD", "EUR")
  • ad_revenue: Valor da receita na moeda especificada (deve ser maior que 0)

Montando o payload com SingularAdData

SingularAdData recebe os três valores obrigatórios no construtor e expõe um método encadeável para cada campo opcional. Importe-o do pacote junto com Singular.

import { Singular, SingularAdData } from 'singular-react-native';

const adData = new SingularAdData('AdMob', 'USD', 0.05)
  .withAdUnitId('ca-app-pub-1234567890123456/9876543210')
  .withAdType('Rewarded')
  .withPrecision('precise');

Singular.adRevenue(adData);

Campos opcionais de dados de anúncio

Todos os campos a seguir são opcionais. Envie tudo o que a sua plataforma de mediação reportar: quanto mais completo o payload, mais granular será o relatório de receita de anúncios no Singular. Se você montar um objeto simples em vez de usar o builder, utilize a chave do payload da segunda coluna.

Método do builder Chave do payload Detalhes
withNetworkName() ad_mediation_platform Plataforma de mediação que reporta a impressão. Por padrão, assume o valor de ad_platform passado ao construtor.
withAdType() ad_type Formato do anúncio, por exemplo Rewarded, Interstitial ou Banner.
withGroupType() ad_group_type Tipo de grupo de anúncios conforme reportado pela plataforma de mediação.
withImpressionId() ad_impression_id Identificador único da impressão. Permite que o Singular remova impressões duplicadas.
withAdPlacementName() ad_placement_name Nome legível do posicionamento.
withPlacementId() ad_placement_id Identificador do posicionamento.
withAdUnitId() ad_unit_id Identificador da unidade de anúncio.
withAdUnitName() ad_unit_name Nome legível da unidade de anúncio.
withAdGroupId() ad_group_id Identificador do grupo de anúncios.
withAdGroupName() ad_group_name Nome legível do grupo de anúncios.
withAdGroupPriority() ad_group_priority Prioridade do grupo de anúncios conforme reportado pela plataforma de mediação.
withPrecision() ad_precision Precisão da receita conforme reportado pela plataforma de mediação, por exemplo precise, estimated ou publisher_defined.
withLimitDataSharing() sng_attr_limit_data_sharing Marca apenas este evento de receita de publicidade para limitar a partilha de dados, de forma independente da configuração limitDataSharing de todo o SDK. Boolean. Requer o SDK do React Native 4.3.0 ou superior.

Para a documentação completa do método, consulte a referência de adRevenue.


Integrações de plataformas

Integração com AdMob

Implemente o rastreamento de receita de anúncios do AdMob usando os callbacks de eventos pagos do SDK do Google Mobile Ads para reportar receita em nível de impressão.

Pré-requisitos


Visão geral da implementação

Ao carregar formatos de anúncio (App Open, Banner, Interstitial, Native, Rewarded), configure um handler de eventos pagos acionado quando os anúncios gerarem receita. Extraia o valor da receita e a moeda dos dados do evento, valide ambos os valores e envie-os ao Singular.

Diferença entre plataformas: O AdMob reporta a receita de forma diferente por plataforma. O Android reporta em micros (por exemplo, US$ 0,005 aparece como 5000), exigindo divisão por 1.000.000. O iOS reporta a receita diretamente em dólares (0,005). Ajuste a lógica de conversão conforme a detecção de plataforma.


Exemplo de anúncio premiado do AdMob

Carregue um anúncio premiado com o AdMob e capture eventos pagos para o rastreamento de receita.

New ArchitectureOld Architecture
// TurboModule direct API (React Native 0.76+ New Architecture)
import React, { useEffect } from 'react';
import NativeSingular from 'singular-react-native/js/NativeSingular';
import { RewardedAd, AdEventType } from 'react-native-google-mobile-ads';
import { Platform } from 'react-native';

const AD_UNIT_ID = 'ca-app-pub-xxxxxxxxxxxxx/yyyyyyyyyy';

export default function AdMobRevenueTracker() {
  useEffect(() => {
    loadRewardedAd();
  }, []);

  const loadRewardedAd = () => {
    // Create RewardedAd instance
    const rewardedAd = RewardedAd.createForAdRequest(AD_UNIT_ID);

    // Set up event listener for ad events
    rewardedAd.addAdEventListener((type, error, data) => {
      if (type === AdEventType.LOADED) {
        console.log('Rewarded ad loaded');
      } else if (type === AdEventType.ERROR) {
        console.error('Rewarded ad failed to load:', error);
      } else if (type === AdEventType.PAID_EVENT) {
        // Handle paid event with revenue data
        handleAdRevenue(data);
      }
    });

    // Load the ad
    rewardedAd.load();
  };

  const handleAdRevenue = (data) => {
    const { value, currencyCode } = data;

    // Validate revenue and currency
    if (!value || value <= 0) {
      console.error('Invalid ad revenue value:', value);
      return;
    }

    if (!currencyCode || currencyCode.trim() === '') {
      console.error('Invalid currency code:', currencyCode);
      return;
    }

    // Convert revenue based on platform
    let revenue;
    if (Platform.OS === 'android') {
      // Android reports in micros - convert to dollars
      revenue = value / 1_000_000.0;
    } else {
      // iOS reports in dollars directly
      revenue = value;
    }

    const adRevenueData = {
      ad_platform: 'AdMob',
      ad_currency: currencyCode,
      ad_revenue: revenue
    };

    // Send to Singular
    NativeSingular.adRevenue(adRevenueData);

    console.log('Ad Revenue reported to Singular:', adRevenueData);
  };

  return null;
}

Notas de implementação:

  • Detecção de plataforma: Use Platform.OS para determinar a lógica de conversão (Android divide por 1.000.000, iOS usa o valor diretamente)
  • Validação de receita: Garanta que a receita seja maior que 0 antes de enviar
  • Validação de moeda: Verifique se o código de moeda não está vazio
  • Log de erros: Registre dados inválidos para depuração sem enviá-los ao Singular

Integração com AppLovin MAX

Implemente o rastreamento de receita de anúncios do AppLovin MAX usando a Impression-Level User Revenue API para reportar receita em tempo real em todos os formatos de anúncio.

Pré-requisitos

  • Integre o SDK do React Native do AppLovin MAX. Consulte o Guia de introdução
  • Ative a Impression-Level User Revenue API no seu painel do AppLovin

Visão geral da implementação

Configure listeners de receita de anúncios para cada formato (Interstitial, Rewarded, Banner, MRec, App Open) para capturar os eventos de receita. Extraia a receita de adInfo.revenue e envie ao Singular com a moeda específica da plataforma (normalmente USD).


Rastreamento de receita do AppLovin MAX

Configure listeners globais de receita para todos os formatos de anúncio do AppLovin MAX.

New ArchitectureOld Architecture
// TurboModule direct API (React Native 0.76+ New Architecture)
import NativeSingular from 'singular-react-native/js/NativeSingular';
import {
  InterstitialAd,
  RewardedAd,
  BannerAd,
  MRecAd,
  AppOpenAd
} from 'react-native-applovin-max';

// Currency constant - AppLovin typically reports in USD
const CURRENCY = 'USD';

// Generic handler for ad revenue
const handleAdRevenue = (adInfo) => {
  if (!adInfo) {
    console.error('AdInfo is null or undefined');
    return;
  }

  const revenue = adInfo.revenue;

  // Validate revenue
  if (!revenue || revenue <= 0) {
    console.error('Invalid revenue value:', revenue);
    return;
  }

  const adRevenueData = {
    ad_platform: 'AppLovin',
    ad_currency: CURRENCY,
    ad_revenue: revenue
  };

  // Send to Singular
  NativeSingular.adRevenue(adRevenueData);

  console.log('AppLovin ad revenue reported:', adRevenueData);
};

// Set up listeners for each ad type
export const setupAppLovinRevenueTracking = () => {
  InterstitialAd.addAdRevenuePaidListener(handleAdRevenue);
  RewardedAd.addAdRevenuePaidListener(handleAdRevenue);
  BannerAd.addAdRevenuePaidListener(handleAdRevenue);
  MRecAd.addAdRevenuePaidListener(handleAdRevenue);
  AppOpenAd.addAdRevenuePaidListener(handleAdRevenue);

  console.log('AppLovin MAX revenue tracking initialized');
};

Notas de implementação:

  • Todos os formatos de anúncio: Registre listeners para todos os tipos de anúncio que seu app usa (Interstitial, Rewarded, Banner, MRec, App Open)
  • Moeda: O AppLovin normalmente reporta a receita em USD; verifique no seu painel
  • Handler compartilhado: Use uma única função handler de receita para todos os formatos de anúncio para garantir validação consistente

Integração com Unity LevelPlay (IronSource)

Implemente o rastreamento de receita de anúncios do IronSource usando a Impression Level Revenue (ILR) SDK API para obter dados em nível de impressão do IronSource Ads e das redes mediadas.

Pré-requisitos


Visão geral da implementação

Assine o emissor de eventos onImpressionDataSuccess para receber os dados de impressão. Extraia a receita de impressionData.revenue e envie ao Singular com a moeda USD.


Rastreamento de receita do IronSource

Configure o listener de eventos para os callbacks de dados de impressão do IronSource.

New ArchitectureOld Architecture
// TurboModule direct API (React Native 0.76+ New Architecture)
import { NativeModules, NativeEventEmitter } from 'react-native';
import NativeSingular from 'singular-react-native/js/NativeSingular';

const { IronSourceModule } = NativeModules;
const ironSourceEventEmitter = new NativeEventEmitter(IronSourceModule);

const AD_PLATFORM = 'IronSource';
const CURRENCY = 'USD'; // IronSource typically reports in USD

export const setupIronSourceRevenueTracking = () => {
  ironSourceEventEmitter.addListener('onImpressionDataSuccess', (impressionData) => {
    // Validate impression data
    if (!impressionData) {
      console.error('No impression data available');
      return;
    }

    const revenue = impressionData.revenue;

    // Validate revenue value
    if (!revenue || revenue <= 0) {
      console.error('Invalid revenue value:', revenue);
      return;
    }

    const adRevenueData = {
      ad_platform: AD_PLATFORM,
      ad_currency: CURRENCY,
      ad_revenue: revenue
    };

    // Send to Singular
    NativeSingular.adRevenue(adRevenueData);

    console.log('IronSource ad revenue reported:', adRevenueData);
  });

  console.log('IronSource revenue tracking initialized');
};

Notas de implementação:

  • Emissor de eventos nativo: O IronSource usa o sistema de eventos nativos do React Native para os callbacks de impressão
  • Postbacks ARM: Verifique se a flag ARM SDK Postbacks está ativada no painel do IronSource
  • Assinatura de eventos: Configure o listener antes de inicializar o SDK do IronSource

Integração com TradPlus

Implemente o rastreamento de receita de anúncios do TradPlus usando listeners globais de impressão para capturar dados de eCPM das impressões de anúncios.

Pré-requisitos

  • Integre o SDK do React Native do TradPlus ao seu app
  • Configure as unidades de anúncio do TradPlus no seu painel

Visão geral da implementação

Assine o evento onImpressionSuccess para receber os dados de impressão de anúncios. Extraia o valor de eCPM de tpAdInfo.ecpm, converta de milésimos para dólares (divida por 1000) e envie ao Singular.

Conversão de eCPM: O TradPlus reporta o eCPM em milésimos. Divida o valor do eCPM por 1000 para convertê-lo em dólares antes de enviá-lo ao Singular.


Rastreamento de receita do TradPlus

Configure o listener de eventos para os callbacks de impressão bem-sucedida do TradPlus.

New ArchitectureOld Architecture
// TurboModule direct API (React Native 0.76+ New Architecture)
import { NativeModules, NativeEventEmitter } from 'react-native';
import NativeSingular from 'singular-react-native/js/NativeSingular';

const { TradPlusModule } = NativeModules;
const tradPlusEventEmitter = new NativeEventEmitter(TradPlusModule);

const AD_PLATFORM = 'TradPlus';
const CURRENCY = 'USD'; // TradPlus typically reports in USD

export const setupTradPlusRevenueTracking = () => {
  tradPlusEventEmitter.addListener('onImpressionSuccess', (tpAdInfo) => {
    // Validate ad info
    if (!tpAdInfo) {
      console.error('AdInfo is null');
      return;
    }

    // eCPM is reported in milli-units - convert to dollars
    if (!tpAdInfo.ecpm || typeof tpAdInfo.ecpm !== 'number') {
      console.error('Invalid eCPM value:', tpAdInfo.ecpm);
      return;
    }

    const revenue = tpAdInfo.ecpm / 1000.0;

    // Validate revenue after conversion
    if (revenue <= 0) {
      console.error('Revenue out of expected range:', revenue);
      return;
    }

    const adRevenueData = {
      ad_platform: AD_PLATFORM,
      ad_currency: CURRENCY,
      ad_revenue: revenue
    };

    // Send to Singular
    NativeSingular.adRevenue(adRevenueData);

    console.log('TradPlus ad revenue reported:', adRevenueData);
  });

  console.log('TradPlus revenue tracking initialized');
};

Notas de implementação:

  • Formato do eCPM: O TradPlus reporta o eCPM em milésimos; sempre divida por 1000 antes de enviar ao Singular
  • Verificação de tipo: Confirme que o eCPM é um número antes da conversão
  • Validação pós-conversão: Valide que a receita é maior que 0 após a divisão

Integração genérica

Implemente o rastreamento de receita de anúncios para plataformas de mediação personalizadas ou integrações diretas usando o método genérico adRevenue() .

Quando usar a integração genérica

  • Plataformas de mediação personalizadas não cobertas pelas integrações padrão
  • Integrações diretas com redes de anúncios sem mediação
  • Cálculos de receita de anúncios do lado do servidor encaminhados ao app
  • Testes de rastreamento de receita de anúncios com dados simulados

Exemplo de implementação genérica

Crie uma função reutilizável para reportar receita de anúncios de qualquer origem com validação adequada.

New ArchitectureOld Architecture
// TurboModule direct API (React Native 0.76+ New Architecture)
import NativeSingular from 'singular-react-native/js/NativeSingular';

/**
 * Report ad revenue to Singular with validation
 * 
 * @param {string} adPlatform - Name of the ad platform or mediation provider
 * @param {string} currency - ISO 4217 three-letter currency code (e.g., 'USD', 'EUR')
 * @param {number} revenue - Revenue amount in the specified currency
 */
export const reportAdRevenue = (adPlatform, currency, revenue) => {
  // Validate platform
  if (!adPlatform || adPlatform.trim() === '') {
    console.error('Invalid ad platform:', adPlatform);
    return;
  }

  // Validate currency code
  if (!currency || currency.trim() === '' || currency.length !== 3) {
    console.error('Invalid currency code:', currency);
    return;
  }

  // Validate revenue
  if (typeof revenue !== 'number' || revenue <= 0 || !isFinite(revenue)) {
    console.error('Invalid revenue value:', revenue);
    return;
  }

  const adRevenueData = {
    ad_platform: adPlatform.trim(),
    ad_currency: currency.toUpperCase().trim(),
    ad_revenue: revenue
  };

  // Send to Singular
  NativeSingular.adRevenue(adRevenueData);

  console.log('Ad Revenue reported to Singular:', adRevenueData);
};

// Example usage
export const trackCustomAdRevenue = () => {
  // Example: Custom mediation platform
  reportAdRevenue('CustomPlatform', 'USD', 0.05);

  // Example: Direct network integration
  reportAdRevenue('FacebookAudienceNetwork', 'EUR', 0.03);
};

Recursos de validação:

  • Validação de plataforma: Garante que o nome da plataforma não esteja vazio e sem espaços extras
  • Validação de moeda: Verifica o formato do código ISO 4217 de três letras e converte para maiúsculas
  • Validação de receita: Confere se é um número positivo e exclui NaN e Infinity
  • Segurança de tipos: A interface TypeScript garante a verificação de tipos em tempo de compilação

Boas práticas

Validação de dados

Implemente validação robusta para impedir que dados incorretos cheguem à analytics do Singular.

  • Receita positiva: Sempre verifique se a receita é maior que zero antes de enviar
  • Moeda válida: Use códigos ISO 4217 e verifique se as strings não estão vazias
  • Consistência de plataforma: Use nomes de plataforma consistentes em todo o app (por exemplo, sempre "AdMob", não "Admob" nem "ADMOB")
  • Verificação de tipo: Confirme que os tipos de dados correspondem aos valores esperados (número para receita, string para moeda e plataforma)
  • Verificação de nulos: Trate valores null, undefined e vazios adequadamente

Crítico: Dados incorretos de receita de anúncios não podem ser corrigidos retroativamente no Singular. Sempre valide os dados antes de chamar Singular.adRevenue().


Tratamento de moedas

Garanta o reporte correto de moeda para apps multirregião e diversas redes de anúncios.

  • Verifique a moeda da plataforma: Consulte a documentação da sua plataforma de mediação para conhecer a moeda padrão (a maioria usa USD)
  • Formato consistente: Sempre use códigos ISO 4217 de três letras em maiúsculas
  • Sem conversão: Reporte a receita na moeda fornecida pela rede de anúncios; não converta moedas
  • Moeda por rede: Redes de anúncios diferentes podem reportar em moedas diferentes; verifique cada uma separadamente

Considerações específicas de plataforma

Trate as diferenças de plataforma nos formatos e unidades de reporte de receita.

  • AdMob Android: Receita reportada em micros; divida por 1.000.000 para converter em dólares
  • AdMob iOS: Receita reportada em dólares; use o valor diretamente, sem conversão
  • TradPlus: eCPM reportado em milésimos; divida por 1.000 para converter em dólares
  • AppLovin: Receita reportada em dólares; use o valor diretamente
  • IronSource: Receita reportada em dólares; use o valor diretamente

Tratamento de erros e logs

Implemente logs abrangentes para depurar e monitorar o rastreamento de receita de anúncios.

  • Falhas de validação: Registre mensagens de erro detalhadas quando a validação falhar, incluindo os valores realmente recebidos
  • Log de sucesso: Registre os reportes de receita bem-sucedidos em desenvolvimento com plataforma, moeda e valor
  • Monitoramento em produção: Use serviços de rastreamento de erros (Sentry, Bugsnag) para monitorar falhas de validação em produção
  • Anomalias de receita: Configure alertas para valores de receita excepcionalmente altos ou baixos que possam indicar problemas de integração
  • Cobertura de plataformas: Monitore quais plataformas de anúncios estão reportando receita para garantir que todas estejam integradas corretamente

Estratégia de testes

Verifique a implementação do rastreamento de receita de anúncios antes de implantar em produção.

  1. Anúncios de teste: Use unidades de anúncio de teste da sua plataforma de mediação durante o desenvolvimento
  2. Valide os eventos: Verifique no painel do Singular os eventos de receita de anúncios após as impressões de teste
  3. Verifique a moeda: Confirme que os códigos de moeda aparecem corretamente nos relatórios do Singular
  4. Precisão de plataforma: Garanta que os nomes de plataforma estejam consistentes e reconhecíveis nos relatórios
  5. Valores de receita: Verifique se os valores de receita correspondem às faixas esperadas para as unidades de anúncio de teste
  6. Multiplataforma: Teste em iOS e Android para verificar a lógica de conversão específica de cada plataforma

Otimização de desempenho

Minimize o impacto do rastreamento de receita de anúncios no desempenho do seu app.

  • Processamento assíncrono: Os callbacks de receita são executados de forma assíncrona, sem bloquear a thread principal
  • Validação mínima: Mantenha a lógica de validação simples e rápida (verificações de tipo e de faixa)
  • Consideração sobre lotes: Para apps de alto volume, considere o processamento em lote se o seu backend de analytics oferecer suporte
  • Tratamento de erros: Use blocos try-catch para evitar que erros de rastreamento de receita derrubem seu app

Verificação e solução de problemas

Verificar a implementação

Confirme que os dados de receita de anúncios estão chegando corretamente ao Singular.

  1. Ative os anúncios de teste: Configure o modo de teste na sua plataforma de mediação
  2. Gere impressões: Exiba anúncios de teste e dispare eventos pagos
  3. Verifique os logs: Confirme que os logs de rastreamento de receita aparecem no console com os valores corretos
  4. Verificação no painel: Verifique no painel do Singular os eventos de receita de anúncios (pode levar de 15 a 30 minutos)
  5. Detalhes do evento: Verifique moeda, plataforma e valores de receita nos detalhes do evento no Singular

Problemas comuns

  • Nenhum evento de receita: Verifique se os handlers de eventos pagos estão registrados antes do carregamento dos anúncios e se o SDK de mediação foi inicializado corretamente
  • Receita zerada: Verifique a lógica de conversão específica da plataforma (micros para dólares no AdMob Android, milésimos para dólares no TradPlus)
  • Moeda incorreta: Verifique se o código de moeda corresponde ao que a sua plataforma de mediação reporta; consulte a documentação da plataforma
  • Divergência no nome da plataforma: Use nomes de plataforma consistentes que correspondam às plataformas reconhecidas pelo Singular
  • Eventos ausentes: Garanta que o SDK do Singular seja inicializado antes que os eventos de receita de anúncios ocorram
  • Eventos duplicados: Verifique se os handlers de eventos pagos estão registrados apenas uma vez, e não a cada carregamento de anúncio