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

Documento

Atribuição de receitas de anúncios

Ligue as receitas de anúncios a campanhas de marketing específicas que trouxeram utilizadores à sua aplicação, proporcionando uma visibilidade completa dos custos da campanha, das receitas in-app e das receitas de anúncios para uma medição precisa do ROI.

Descrição geral

O que é a atribuição de receitas de anúncios

A Atribuição de receitas de anúncios associa as receitas de anúncios de aplicações móveis às campanhas de marketing que geraram utilizadores, permitindo-lhe medir o verdadeiro desempenho da campanha, ligando os custos de aquisição de utilizadores às receitas vitalícias, incluindo a monetização de anúncios.

  • ROI da campanha: Visualize o custo da campanha, as compras in-app e a receita de anúncios em relatórios unificados para calcular o verdadeiro retorno dos gastos com anúncios
  • Otimização da rede: Envie os dados da receita de anúncios de volta às redes de anúncios para melhorar os algoritmos de licitação e o desempenho da campanha
  • Fontes de dados: Suporta dados ao nível do utilizador e ao nível da impressão de plataformas de mediação, incluindo AdMob, AppLovin MAX, Unity LevelPlay (IronSource) e TradPlus

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

Considerações importantes:

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

Requisitos de implementação

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

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

Método SDK

Singular.adRevenue

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

Assinatura do método:

static adRevenue(data: {
    adPlatform: string;
    currency: string;
    revenue: number;
}): void

Parâmetros:

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

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


Integrações de plataforma

Integração com a AdMob

Implemente o rastreamento de receita de anúncios da AdMob usando os retornos de chamada de eventos pagos do SDK do Google Mobile Ads para relatórios de receita no nível da impressão.

Pré-requisitos


Visão geral da implementação

Ao carregar formatos de anúncio (App Open, Banner, Interstitial, Native, Rewarded), configure um manipulador de eventos pagos que é acionado quando os anúncios geram receita. Extraia o valor da receita e a moeda dos dados do evento, valide os dois valores e envie para o Singular.

Diferença de plataforma: A AdMob reporta a receita de forma diferente por plataforma. O Android reporta a receita em micros (por exemplo, $0,005 aparece como 5000), exigindo a divisão por 1.000.000. O iOS reporta a receita diretamente em dólares (0,005). Ajuste a lógica de conversão com base na deteção da plataforma.


Exemplo de anúncio recompensado da AdMob

Carregue um anúncio recompensado com a AdMob e capture eventos pagos para 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/jsNativeSingular';
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 = {
      adPlatform: 'AdMob',
      currency: currencyCode,
      revenue: revenue
    };

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

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

  return null;
}

Notas de implementação:

  • Deteção de plataforma: Utilize Platform.OSpara determinar a lógica de conversão (o Android divide por 1.000.000, o iOS utiliza o valor diretamente)
  • Validação de receita: Certifique-se de que a receita é maior que 0 antes de enviar
  • Validação de moeda: Verificar se o código da moeda não está vazio
  • Registo de erros: Registar dados inválidos para depuração sem enviar para o Singular

Integração do AppLovin MAX

Implemente o rastreio de receitas de anúncios AppLovin MAX utilizando a API Impression-Level User Revenue para obter relatórios de receitas em tempo real em todos os formatos de anúncios.

Pré-requisitos

  • Integrar o SDK React Native do AppLovin MAX. Consulte o Guia de Introdução
  • Ativar a API Impression-Level User Revenue no seu dashboard AppLovin

Visão geral da implementação

Configurar ouvintes de receita de anúncios para cada formato de anúncio (Intersticial, Recompensado, Banner, MRec, App Open) para capturar eventos de receita. Extrair receitas de adInfo.revenue e enviar para Singular com moeda específica da plataforma (normalmente USD).


Rastreamento de receita do AppLovin MAX

Configure ouvintes de receita global 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/jsNativeSingular';
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 = {
    adPlatform: 'AppLovin',
    currency: CURRENCY,
    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: Registar ouvintes para todos os tipos de anúncios que a sua aplicação utiliza (Intersticial, Recompensado, Banner, MRec, App Open)
  • Moeda: A AppLovin normalmente reporta as receitas em USD - verifique no seu painel de controlo
  • Manipulador partilhado: Utilize uma única função de revenue handler para todos os formatos de anúncio para garantir uma validação consistente

Integração do Unity LevelPlay (IronSource)

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

Pré-requisitos


Visão geral da implementação

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


Acompanhamento de receita da IronSource

Configure o ouvinte de eventos para callbacks de dados de impressão da 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/jsNativeSingular';

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 = {
      adPlatform: AD_PLATFORM,
      currency: CURRENCY,
      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: A IronSource usa o sistema de eventos nativo do React Native para retornos de chamada de impressão
  • Postbacks do ARM: Verifique se o sinalizador ARM SDK Postbacks está ativado no painel do IronSource
  • Assinatura de evento: Configure o ouvinte antes de inicializar o SDK do IronSource

Integração com o TradPlus

Implemente o acompanhamento da receita de anúncios do TradPlus usando ouvintes de impressões globais para capturar dados eCPM de impressões de anúncios.

Pré-requisitos

  • Integrar o SDK React Native do TradPlus ao seu aplicativo
  • Configurar os blocos de anúncios do TradPlus no seu painel

Visão geral da implementação

Subscrever o evento onImpressionSuccess para receber dados de impressão de anúncios. Extrair o valor eCPM de tpAdInfo.ecpm, converter de milis para dólares (dividir por 1000) e enviar para Singular.

Conversão do eCPM: O TradPlus informa o eCPM em miliunidades. Divida o valor do eCPM por 1000 para converter em dólares antes de enviar para o Singular.


Rastreamento de receita do TradPlus

Configurar o ouvinte de eventos para os retornos de chamada de sucesso de impressão 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/jsNativeSingular';

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 = {
      adPlatform: AD_PLATFORM,
      currency: CURRENCY,
      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 mili-unidades - sempre divida por 1000 antes de enviar para o Singular
  • Verificação de tipo: Verificar se o eCPM é um número antes da conversão
  • Validação pós-conversão: Validar se a receita é maior que 0 após a divisão

Integração genérica

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

Quando utilizar a integração genérica

  • Plataformas de mediação personalizadas não abrangidas por integrações padrão
  • Integrações diretas de redes de anúncios sem mediação
  • Cálculos de receita de anúncios do lado do servidor encaminhados para a aplicação
  • Teste do controlo de receitas de anúncios com dados fictícios

Exemplo de implementação genérica

Crie uma função reutilizável para comunicar as receitas de anúncios de qualquer fonte com a validação adequada.

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

/**
 * 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 = {
    adPlatform: adPlatform.trim(),
    currency: currency.toUpperCase().trim(),
    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);
};

Caraterísticas de validação:

  • Validação de plataforma: Assegura que o nome da plataforma não é vazio e está cortado
  • Validação de moeda: Verifica o formato de código ISO 4217 de três letras e converte-o em maiúsculas
  • Validação da receita: Verifica se o número é positivo, exclui NaN e Infinito
  • Segurança de tipos: A interface TypeScript garante a verificação de tipos em tempo de compilação

Melhores práticas

Validação de dados

Implemente uma validação robusta para evitar que dados incorretos cheguem à análise 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 da plataforma: Utilize nomes de plataforma consistentes em toda a aplicação (por exemplo, sempre "AdMob" e não "Admob" ou "ADMOB")
  • Verificação de tipo: Verifique se os tipos de dados correspondem aos valores esperados (número para receita, cadeia de caracteres para moeda/plataforma)
  • Verificações de nulos: Tratar adequadamente os valores nulos, indefinidos e vazios

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 moeda

Garanta relatórios precisos de moeda para aplicativos de várias regiões e diversas redes de anúncios.

  • Verificar a moeda da plataforma: Verifique a documentação da plataforma de mediação quanto à moeda padrão (a maioria usa USD)
  • Formato consistente: Utilize sempre códigos ISO 4217 de três letras em maiúsculas
  • Sem conversão: Comunicar as receitas na moeda fornecida pela rede de publicidade - não converter moedas
  • Moeda por rede: Diferentes redes de publicidade podem comunicar em diferentes moedas - verifique cada uma separadamente

Considerações específicas da plataforma

Trate as diferenças de plataforma nos formatos e unidades de relatório de receita.

  • AdMob Android: Receita relatada em micros - divida por 1.000.000 para converter em dólares
  • AdMob iOS: Receita relatada em dólares - use o valor diretamente sem conversão
  • TradPlus: eCPM relatado em mili-unidades - divida por 1.000 para converter em dólares
  • AppLovin: Receita relatada em dólares - use o valor diretamente
  • IronSource: Receita relatada em dólares - valor de uso direto

Tratamento de erros e registo

Implemente um registo abrangente para depurar e monitorizar o acompanhamento das receitas dos anúncios.

  • Falhas de validação: Registre mensagens de erro detalhadas quando a validação falhar, incluindo os valores reais recebidos
  • Registo de sucesso: Registar relatórios de receitas bem sucedidas em desenvolvimento com plataforma, moeda e montante
  • Monitorização da produção: Use serviços de rastreamento de erros (Sentry, Bugsnag) para monitorar falhas de validação na produção
  • Anomalias de receita: Alerta sobre valores de receita invulgarmente altos ou baixos que podem indicar problemas de integração
  • Cobertura da plataforma: Monitorizar que plataformas de anúncios estão a comunicar receitas para garantir que todas estão integradas corretamente

Estratégia de teste

Verificar a implementação do controlo de receitas de anúncios antes da implementação na produção.

  1. Testar anúncios: Utilize blocos de anúncios de teste da sua plataforma de mediação durante o desenvolvimento
  2. Validar eventos: Verificar o painel do Singular para eventos de receita de anúncios após impressões de anúncios de teste
  3. Verificar moeda: Confirmar se os códigos de moeda aparecem corretamente nos relatórios do Singular
  4. Precisão da plataforma: Garantir que os nomes das plataformas sejam consistentes e reconhecíveis nos relatórios
  5. Valores de receita: Verificar se os valores de receita correspondem aos intervalos esperados para blocos de anúncios de teste
  6. Multiplataforma: Teste no iOS e no Android para verificar a lógica de conversão específica da plataforma

Otimização do desempenho

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

  • Processamento assíncrono: Os callbacks de receita são executados de forma assíncrona - sem bloqueio do thread principal
  • Validação mínima: Mantenha a lógica de validação simples e rápida (verificações de tipo, verificações de intervalo)
  • Consideração de lotes: Para aplicações de grande volume, considere o processamento em lote, se suportado pelo seu backend de análise
  • Tratamento de erros: Utilize blocos try-catch para evitar que os erros de rastreio de receitas façam crashar a sua aplicação

Verificação e resolução de problemas

Verificar a implementação

Confirme se os dados de receita de anúncios estão fluindo corretamente para a Singular.

  1. Habilitar anúncios de teste: Configure o modo de teste na sua plataforma de mediação
  2. Acionar impressões: Exibir anúncios de teste e acionar eventos pagos
  3. Verificar registos: Verificar se os registos de controlo de receitas aparecem na consola com os valores corretos
  4. Verificação do painel: Verificar o painel do Singular para eventos de receita de anúncios (pode levar de 15 a 30 minutos)
  5. Detalhes do evento: Verificar moeda, plataforma e valores de receita nos detalhes do evento Singular

Problemas comuns

  • Nenhum evento de receita: Verifique se os manipuladores de eventos pagos estão registrados antes de carregar os anúncios e se o SDK de mediação foi inicializado corretamente
  • Receita zero: Verifique a lógica de conversão específica da plataforma (micros para dólares para AdMob Android, millis para dólares para TradPlus)
  • Moeda incorreta: Verifique se o código da moeda corresponde ao que a plataforma de mediação informa - verifique a documentação da plataforma
  • Incompatibilidade do nome da plataforma: Use nomes de plataforma consistentes que correspondam às plataformas reconhecidas pelo Singular
  • Eventos ausentes: Certifique-se de que o SDK da Singular seja inicializado antes da ocorrência de eventos de receita de anúncios
  • Eventos duplicados: Verifique se os manipuladores de eventos pagos são registrados apenas uma vez, não em cada carregamento de anúncio

Recursos adicionais: Para obter informações detalhadas, consulte as Perguntas frequentes sobre atribuição de receita de anúnciose a Referência de métodos do SDK do React Native.