SDK do Android - Controlo de receitas de anúncios

Documento

Atribuição de receitas de anúncios

Acompanhe as receitas de anúncios das plataformas de mediação e atribua-as às campanhas de marketing que adquiriram os seus utilizadores, fornecendo uma visibilidade completa do ROI dos custos das campanhas, das compras na aplicação e da monetização da publicidade.

Visão geral

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

A atribuição de receitas de anúncios liga as receitas de publicidade de aplicações móveis às campanhas de aquisição de utilizadores que conduziram a instalações de aplicações, permitindo-lhe medir a verdadeira rentabilidade da campanha, incluindo a monetização de anúncios.

Principais benefícios:

  • Visão unificada do ROI: Veja os custos da campanha, a receita in-app e a receita de anúncios em um único painel
  • Otimização de campanhas: Envie os dados da receita de anúncios de volta às redes de anúncios para melhorar os lances e a segmentação
  • Medição de LTV: Calcular o valor total do tempo de vida do utilizador, incluindo a monetização da publicidade

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

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


Requisitos de implementação

Diretrizes críticas

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: Valide sempre os dados da receita e da moeda antes de ligar para Singular.adRevenue(). Os dados incorrectos não podem ser corrigidos após o envio
  3. Diferenças de plataforma: Alguns SDKs informam a receita em micros (dividir por 1.000.000), enquanto outros informam em unidades monetárias padrão. Verifique a documentação da sua plataforma

Passos de configuração

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

  1. Atualizar o SDK: Verifique se você está usando a versão mais recente do Singular SDK
  2. Escolher integração: Selecione a integração da plataforma de mediação abaixo que corresponde à sua configuração
  3. Implementar retornos de chamada: Adicione ouvintes de eventos pagos específicos da plataforma para capturar dados de receita
  4. Validar dados: Teste os relatórios de receita e verifique se os dados aparecem no painel do Singular

Integrações de plataforma

Integração com a AdMob

Acompanhe a receita de anúncios do Google AdMob usando o ouvinte de eventos pagos para relatórios de receita no nível da impressão.

Requisitos:

Relatório de receita da plataforma: A AdMob reporta as receitas de forma diferente consoante a plataforma. O Android apresenta a receita em micros (por exemplo, $0,005 = 5000). Divida adValue.valueMicros por 1.000.000 para converter em unidades monetárias padrão antes de enviar para o Singular.

Implementação

Defina um ouvinte de evento pago ao carregar anúncios para capturar dados de receita e enviá-los para o Singular.

KotlinJava
import com.singular.sdk.Singular
import com.singular.sdk.SingularAdData
import com.google.android.gms.ads.AdRequest
import com.google.android.gms.ads.rewarded.RewardedAd
import com.google.android.gms.ads.rewarded.RewardedAdLoadCallback

private const val AD_UNIT_ID = "YOUR_AD_UNIT_ID"

class AdManager(private val context: Context) {
    private var rewardedAd: RewardedAd? = null

    fun loadRewardedAd() {
        val adRequest = AdRequest.Builder().build()
        
        RewardedAd.load(context, AD_UNIT_ID, adRequest, 
            object : RewardedAdLoadCallback() {
                override fun onAdLoaded(ad: RewardedAd) {
                    rewardedAd = ad
                    
                    // Set full screen content callback
                    rewardedAd?.fullScreenContentCallback = 
                        object : FullScreenContentCallback() {
                            override fun onAdShowedFullScreenContent() {
                                Log.d("AdManager", "Rewarded ad displayed")
                            }
                            
                            override fun onAdDismissedFullScreenContent() {
                                Log.d("AdManager", "Rewarded ad dismissed")
                            }
                        }
                    
                    // Set paid event listener for revenue tracking
                    rewardedAd?.setOnPaidEventListener { adValue ->
                        // Convert revenue from micros to standard units
                        val revenue = adValue.valueMicros / 1_000_000.0
                        val currency = adValue.currencyCode
                        
                        // Validate revenue data before sending
                        if (revenue > 0 && !currency.isNullOrEmpty()) {
                            val data = SingularAdData(
                                "AdMob",
                                currency,
                                revenue
                            )
                            
                            Singular.adRevenue(data)
                            Log.d("AdManager", "Ad revenue sent: $revenue $currency")
                        } else {
                            Log.w("AdManager", "Invalid revenue: $revenue $currency")
                        }
                    }
                }
                
                override fun onAdFailedToLoad(error: LoadAdError) {
                    Log.e("AdManager", "Ad failed to load: ${error.message}")
                }
            })
    }
}

Integração AppLovin MAX

Partilhe a receita de anúncios ao nível da impressão utilizando a API AppLovin Impression-Level User Revenue.

Requisitos:

Implementação

Tratar mensagens de receitas através do callback do AppLovin Communicator.

KotlinJava
import com.singular.sdk.Singular
import com.singular.sdk.SingularAdData
import com.applovin.communicator.AppLovinCommunicatorMessage

override fun onMessageReceived(message: AppLovinCommunicatorMessage) {
    // Check for revenue events topic
    if (message.topic == "max_revenue_events") {
        val adData: Bundle? = message.messageData
        
        // Extract and validate revenue value
        val revenueValue = adData?.getDouble("revenue", 0.0) ?: 0.0
        
        if (revenueValue > 0) {
            val data = SingularAdData(
                "AppLovin",
                "USD",  // AppLovin typically reports in USD
                revenueValue
            )
            
            Singular.adRevenue(data)
            Log.d("AppLovin", "Ad revenue sent: $revenueValue USD")
        } else {
            Log.w("AppLovin", "Invalid revenue value: $revenueValue")
        }
    }
}

Integração do Unity LevelPlay (IronSource)

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

Requisitos:

  • Implementar o SDK do ironSource (consulte o Guia de Introdução)
  • Ativar o sinalizador ARM SDK Postbacks no painel do IronSource
  • Definir o ouvinte de dados de impressão para receber callbacks de receita

Saiba mais: Consulte a documentação sobre receita de anúncios do IronSourcepara obter detalhes completos sobre a configuração.

Implementação

Implemente o callback de sucesso dos dados de impressão para capturar e enviar a receita.

KotlinJava
import com.singular.sdk.Singular
import com.singular.sdk.SingularAdData
import com.ironsource.mediationsdk.impressionData.ImpressionData

fun onImpressionDataSuccess(impressionData: ImpressionData?) {
    // Validate impression data
    if (impressionData == null) {
        Log.d("IronSource", "No impression data available")
        return
    }
    
    // Extract and validate revenue
    val revenue = impressionData.revenue?.toDouble() ?: 0.0
    if (revenue <= 0) {
        Log.w("IronSource", "Invalid revenue: $revenue")
        return
    }
    
    // Create and send ad revenue data
    val data = SingularAdData(
        "IronSource",
        "USD",  // IronSource typically reports in USD
        revenue
    )
    
    Singular.adRevenue(data)
    Log.d("IronSource", "Ad revenue sent: $revenue USD")
}

Integração com o TradPlus

Capture a receita de anúncios da mediação do TradPlus usando o ouvinte de impressão global.

Requisitos:

  • Definir o ouvinte global de impressões através de TradPlusSdk.setGlobalImpressionListener()
  • Tratar a chamada de retorno onImpressionSuccess para receber dados de receitas
  • Converter eCPM de miliunidades para moeda padrão (dividir por 1000)

Implementação

Registar um ouvinte de impressões global para controlar todas as impressões de anúncios e receitas.

KotlinJava
import com.singular.sdk.Singular
import com.singular.sdk.SingularAdData
import com.tradplus.ads.mgr.GlobalImpressionManager
import com.tradplus.ads.base.bean.TPAdInfo

// Set global impression listener
TradPlusSdk.setGlobalImpressionListener(
    object : GlobalImpressionManager.GlobalImpressionListener {
        override fun onImpressionSuccess(tpAdInfo: TPAdInfo?) {
            // Validate ad info
            if (tpAdInfo == null) {
                Log.w("TradPlus", "AdInfo is null")
                return
            }
            
            // Convert eCPM from milli-units to dollars
            val revenue = tpAdInfo.ecpm.toDouble() / 1000.0
            
            // Validate revenue
            if (revenue <= 0) {
                Log.w("TradPlus", "Invalid revenue: $revenue")
                return
            }
            
            // Create and send ad revenue data
            val data = SingularAdData(
                "TradPlus",
                "USD",
                revenue
            )
            
            Singular.adRevenue(data)
            Log.d("TradPlus", "Ad revenue sent: $revenue USD")
        }
    }
)

Integração genérica (outras plataformas)

Integrar qualquer plataforma de mediação utilizando a interface genérica SingularAdData.

Requisitos:

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

Exatidão dos dados: Valide os dados de receita e moeda antes de enviar 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, a moeda e a receita e, em seguida, chame Singular.adRevenue().

KotlinJava
import com.singular.sdk.Singular
import com.singular.sdk.SingularAdData

fun reportAdRevenue(adPlatform: String, currency: String, revenue: Double) {
    // Validate revenue
    if (revenue <= 0) {
        Log.w("AdRevenue", "Invalid revenue: $revenue")
        return
    }
    
    // Validate currency
    if (currency.isEmpty()) {
        Log.w("AdRevenue", "Invalid currency: $currency")
        return
    }
    
    // Create ad revenue data object
    val data = SingularAdData(
        adPlatform,
        currency,
        revenue
    )
    
    // Send to Singular
    Singular.adRevenue(data)
    Log.d("AdRevenue", "Revenue sent: $revenue $currency from $adPlatform")
}

// Example usage
reportAdRevenue("MyMediationPlatform", "USD", 0.05)

Teste e validação

Verificar relatórios de receita

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

  1. Verifique os logs: Verifique se os logs de retorno de chamada de receita aparecem com os valores e a moeda corretos
  2. Testar anúncios: Carregue e exiba anúncios de teste para acionar eventos de receita
  3. Verificação do painel: Confirmar se a receita aparece no painel do Singular dentro de 24 horas
  4. Precisão dos dados: Validar se os valores da receita correspondem aos relatórios da plataforma de mediação

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

  • A atribuição de receita de anúncios está activada 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