SDK do iOS - Rastreamento de receita de anúncios

Atribuição de receita de anúncios

Rastreie a receita de anúncios das plataformas de mediação e atribua-a às campanhas de marketing que adquiriram seus usuários, oferecendo visibilidade completa do ROI através dos custos de campanha, compras no app e monetização por publicidade.

Visão geral

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

A atribuição de receita de anúncios conecta a receita de anúncios de aplicativos móveis às campanhas de aquisição de usuários que geraram as instalações do app, permitindo que você meça a verdadeira rentabilidade da campanha, incluindo a monetização por publicidade.

Principais benefícios:

  • Visão unificada de ROI: Veja os custos de campanha, a receita in-app e a receita de anúncios em um único dashboard
  • Otimização de campanha: Envie os dados de receita de anúncios de volta para as redes de anúncios para melhorar o lance e a segmentação
  • Medição de LTV: Calcule o valor completo do ciclo de vida do usuário incluindo a monetização por publicidade

Fontes de dados: Os dados de receita de anúncios normalmente vêm da sua plataforma de mediação (por exemplo, AdMob, AppLovin MAX, IronSource) em nível de usuário ou em nível de impressão. A Singular oferece suporte a vários métodos de integração para receber esses dados.

Saiba mais: Consulte as Perguntas frequentes sobre atribuição de receita de anúncios para obter detalhes completos sobre configuração, relatórios e solução de problemas.


Requisitos de implementação

Diretrizes críticas

Parâmetros obrigatórios de SingularAdData: Os argumentos do construtor adPlatform, withCurrency e withRevenue são todos obrigatórios. Se algum estiver ausente, vazio ou inválido (segundo -hasRequiredParams), o SDK descarta silenciosamente a chamada para +adRevenue: sem lançar uma exceção. A chamada também é silenciosamente ignorada quando o SDK não foi iniciado; sempre confirme que +start: foi executado antes da chamada.

Use a assinatura de construtor correta: -initWithAdPlatform:withCurrency:withRevenue: é o construtor suportado. O antigo -initWithAdPlatfrom: (observe o erro de digitação) está anotado como __attribute__((deprecated)) e emitirá um aviso do compilador. Não o utilize em código novo.

A precisão dos dados é fundamental:

  1. Códigos de moeda: Use códigos de moeda ISO 4217 de três letras (por exemplo, USD, EUR, INR). Muitas plataformas de mediação reportam em USD; verifique a moeda da sua plataforma antes da implementação
  2. Validar antes de enviar: Sempre valide os dados de receita e moeda antes de chamar Singular.adRevenue() . Dados incorretos não podem ser corrigidos após o envio
  3. Diferenças entre plataformas: O iOS recebe a receita diretamente em unidades padrão de moeda (por exemplo, $0.005), diferentemente do Android, que usa micros. Sempre consulte a documentação da sua plataforma para o formato correto

Etapas de configuração

Siga estas etapas para implementar a atribuição de receita de anúncios:

  1. Atualizar o SDK: Certifique-se de estar usando a versão mais recente do SDK da Singular
  2. Escolher a integração: Selecione a integração da plataforma de mediação abaixo que corresponda à sua configuração
  3. Implementar callbacks: Adicione listeners de eventos paid específicos da plataforma para capturar os dados de receita
  4. Validar os dados: Teste o relatório de receita e verifique que os dados apareçam no dashboard da Singular

Integrações de plataformas

Integração com AdMob

Rastreie a receita de anúncios do Google AdMob usando o listener de eventos paid para o relatório de receita em nível de impressão.

Requisitos:

Relatório de receita por plataforma: O AdMob reporta a receita de forma diferente por plataforma. O iOS retorna a receita em unidades padrão de moeda (por exemplo, $0.005 = 0.005). Envie o valor diretamente para a Singular sem conversão.

Implementação

Defina um handler de eventos paid ao carregar os anúncios para capturar os dados de receita e enviá-los para a Singular.

Swift Objective-C
import Singular
import GoogleMobileAds

private let adUnitID = "AD_UNIT_ID"
var rewardedAd: GADRewardedAd?

func loadRewardedAd() {
    let request = GADRequest()

    GADRewardedAd.load(withAdUnitID: adUnitID, request: request) { [weak self] ad, error in
        guard let self = self else { return }

        if let error = error {
            print("Rewarded ad failed to load: \(error.localizedDescription)")
            return
        }

        self.rewardedAd = ad

        // Set paid event handler for revenue tracking
        self.rewardedAd?.paidEventHandler = { adValue in
            // Extract revenue and currency from AdValue
            let revenue = adValue.value.doubleValue
            let currency = adValue.currencyCode

            // Validate revenue and currency before sending
            guard revenue > 0, let currency = currency, !currency.isEmpty else {
                print("Invalid ad revenue data: revenue = \(revenue), currency = \(String(describing: currency))")
                return
            }

            // Create ad revenue data object
            let data = SingularAdData(
                adPlatform: "AdMob",
                currency: currency,
                revenue: revenue
            )

            // Send to Singular
            Singular.adRevenue(data)
            print("Ad revenue sent: \(revenue) \(currency)")
        }
    }
}

Integração com AppLovin MAX

Compartilhe a receita de anúncios em nível de impressão usando a Impression-Level User Revenue API da AppLovin.

Requisitos:

Implementação

Trate as mensagens de receita por meio do callback do AppLovin Communicator.

Swift Objective-C
import Singular
import AppLovinSDK

func didReceive(_ message: ALCMessage) {
    // Check for revenue events topic
    if message.topic == "max_revenue_events" {
        // Extract and validate revenue value
        guard let revenueValue = message.data["revenue"] as? Double,
              revenueValue > 0 else {
            print("Failed to parse valid revenue value or revenue is not greater than 0")
            return
        }

        // Create ad revenue data object
        let data = SingularAdData(
            adPlatform: "AppLovin",
            currency: "USD",  // AppLovin typically reports in USD
            revenue: revenueValue
        )

        // Send to Singular
        Singular.adRevenue(data)
        print("Ad revenue sent: \(revenueValue) USD")
    }
}

Integração com Unity LevelPlay (IronSource)

Rastreie a receita em nível de impressão do ironSource e das redes mediadas usando o SDK do IronSource.

Requisitos:

  • Implemente o SDK do ironSource (consulte o Guia de introdução )
  • Habilite a flag ARM SDK Postbacks no seu dashboard do IronSource
  • Defina o impression data listener para receber os callbacks de receita

Saiba mais: Consulte a documentação de receita de anúncios do IronSource para obter os detalhes completos da configuração.

Implementação

Implemente o callback impression data success para capturar e enviar a receita.

Swift Objective-C
import Singular
import IronSource

func impressionDataDidSucceed(_ impressionData: ISImpressionData?) {
    // Validate impression data
    guard let impressionData = impressionData else {
        print("No impression data available")
        return
    }

    // Extract and validate revenue
    let revenue = impressionData.revenue
    guard revenue > 0 else {
        print("Invalid revenue value: \(revenue)")
        return
    }

    // Create ad revenue data object
    let data = SingularAdData(
        adPlatform: "IronSource",
        currency: "USD",  // IronSource typically reports in USD
        revenue: revenue
    )

    // Send to Singular
    Singular.adRevenue(data)
    print("Ad revenue sent: \(revenue) USD")
}

Integração com TradPlus

Capture a receita de anúncios da mediação TradPlus usando o impression delegate.

Requisitos:

  • Defina o impression delegate via TradPlus.sharedInstance().impressionDelegate
  • Trate o callback tradPlusAdImpression para receber os dados de receita
  • Converta o eCPM de miliunidades para a moeda padrão (divida por 1000)

Implementação

Registre um impression delegate para rastrear todas as impressões de anúncios e a receita.

Swift Objective-C
import Singular
import TradPlusSDK

// Set up the delegate
TradPlus.sharedInstance().impressionDelegate = self

// Delegate method for handling ad impressions
func tradPlusAdImpression(_ adInfo: [String: Any]) {
    let currency = "USD"

    // Extract and validate eCPM value
    guard let ecpmValue = adInfo["ecpm"] as? NSNumber else {
        print("No eCPM data available in adInfo")
        return
    }

    // Convert eCPM from milli-units to dollars
    let revenue = ecpmValue.doubleValue / 1000.0

    // Validate revenue
    guard revenue > 0 else {
        print("Ad Revenue value out of expected range: \(revenue)")
        return
    }

    // Create ad revenue data object
    let data = SingularAdData(
        adPlatform: "TradPlus",
        currency: currency,
        revenue: revenue
    )

    // Send to Singular
    Singular.adRevenue(data)
    print("Ad revenue sent: \(revenue) \(currency)")
}

Integração genérica (outras plataformas)

Integre qualquer plataforma de mediação usando a interface genérica SingularAdData .

Requisitos:

  • Acesso aos dados de receita em nível de impressão da sua plataforma de mediação
  • Valor da receita em unidades padrão de moeda
  • Código de moeda ISO 4217 (por exemplo, USD, EUR, INR)

Precisão dos dados: Valide os dados de receita e moeda antes de enviá-los para a Singular. Dados incorretos não podem ser corrigidos após o envio.

Implementação

Crie um objeto SingularAdData com o nome da plataforma, moeda e receita, depois chame Singular.adRevenue() .

Swift Objective-C
import Singular

func reportAdRevenue(adPlatform: String, currency: String, revenue: Double) {
    // Validate revenue
    guard revenue > 0 else {
        print("Invalid revenue value: \(revenue)")
        return
    }

    // Validate currency
    guard !currency.isEmpty else {
        print("Invalid currency: \(currency)")
        return
    }

    // Create ad revenue data object
    let data = SingularAdData(
        adPlatform: adPlatform,
        currency: currency,
        revenue: revenue
    )

    // Send to Singular
    Singular.adRevenue(data)
    print("Revenue sent: \(revenue) \(currency) from \(adPlatform)")
}

// Example usage
reportAdRevenue(adPlatform: "MyMediationPlatform", currency: "USD", revenue: 0.05)

Enriquecer os dados do anúncio com atributos adicionais

SingularAdData expõe métodos setter para metadados em nível de impressão. Use-os para enriquecer o evento com detalhes de placement, ad unit, agrupamento de mediação e precisão quando sua plataforma de mediação fornecê-los.

Diferentemente do SDK do Android, os setters de SingularAdData retornam void e NÃO são encadeáveis. Chame cada setter em sua própria linha.

Método Descrição
setNetworkName: Sobrescreve o nome da rede (por padrão, a plataforma de anúncios passada ao construtor). Use em mediação em que a rede subjacente difere da plataforma de mediação.
setAdType: Formato do anúncio (por exemplo, @"Rewarded", @"Interstitial", @"Banner").
setGroupType: Categorização do grupo de anúncios definida pela sua plataforma de mediação.
setImpressionId: Identificador único da impressão, usado para deduplicação e reconciliação.
setAdPlacementName: Nome legível do placement (por exemplo, @"level_complete").
setAdUnitId: Identificador específico do ad unit da plataforma (por exemplo, @"ca-app-pub-..." para AdMob).
setAdUnitName: Nome legível do ad unit.
setAdGroupId: Identificador do grupo de anúncios da plataforma de mediação.
setAdGroupName: Nome legível do grupo de anúncios.
setAdGroupPriority: Prioridade atribuída ao grupo de anúncios no waterfall de mediação.
setPrecision: Indicador de precisão da receita (por exemplo, @"publisher_provided", @"estimated", @"exact") quando suportado pela plataforma.
setPlacementId: Identificador específico do placement da plataforma.
setLimitDataSharing: Sobrescreve o limite global de compartilhamento de dados para este único evento de anúncio, por exemplo, quando um usuário optou por não receber anúncios personalizados.

Exemplo em Swift:

let data = SingularAdData(adPlatform: "AdMob",
                          withCurrency: "USD",
                          withRevenue: NSNumber(value: 0.05))
data.setAdUnitId("ca-app-pub-123456789/1234567890")
data.setAdType("Rewarded")
data.setAdPlacementName("level_complete")
data.setImpressionId("imp_abc123")
data.setPrecision("publisher_provided")

Singular.adRevenue(data)

Exemplo em Objective-C:

SingularAdData *data = [[SingularAdData alloc]
    initWithAdPlatform:@"AdMob"
          withCurrency:@"USD"
           withRevenue:@(0.05)];
[data setAdUnitId:@"ca-app-pub-123456789/1234567890"];
[data setAdType:@"Rewarded"];
[data setAdPlacementName:@"level_complete"];
[data setImpressionId:@"imp_abc123"];
[data setPrecision:@"publisher_provided"];

[Singular adRevenue:data];

Testes e validação

Verificar o relatório de receita

Teste sua implementação de receita de anúncios para garantir que os dados fluam corretamente para a Singular.

  1. Verificar logs: Verifique se os logs do callback de receita aparecem com os valores e a moeda corretos
  2. Anúncios de teste: Carregue e exiba anúncios de teste para disparar os eventos de receita
  3. Verificação no dashboard: Confirme que a receita aparece no dashboard da Singular em até 24 horas
  4. Precisão dos dados: Valide que os valores de receita correspondam aos relatórios da sua plataforma de mediação

Solução de problemas: Se a receita não aparecer na Singular, verifique se:

  • A atribuição de receita de anúncios está habilitada na sua conta Singular
  • Os valores de receita são maiores que 0
  • Os códigos de moeda são códigos ISO 4217 válidos
  • O nome da plataforma corresponde ao formato esperado pela Singular