SDK de Android - Seguimiento de los ingresos publicitarios

Documento

Atribución de ingresos publicitarios

Realice un seguimiento de los ingresos publicitarios de las plataformas de mediación y atribúyalos a las campañas de marketing que adquirieron a sus usuarios, proporcionando una visibilidad completa del ROI a través de los costes de campaña, las compras dentro de la aplicación y la monetización de la publicidad.

Visión general

Qué es la atribución de ingresos publicitarios

Ad Revenue Attribution conecta los ingresos publicitarios de las aplicaciones móviles con las campañas de adquisición de usuarios que impulsaron las instalaciones de la aplicación, lo que le permite medir la verdadera rentabilidad de la campaña, incluida la monetización de la publicidad.

Ventajas clave:

  • Vista unificada del ROI: Vea los costes de campaña, los ingresos dentro de la aplicación y los ingresos publicitarios en un único panel de control.
  • Optimización de campañas: Envíe los datos de ingresos publicitarios a las redes publicitarias para mejorar las pujas y la segmentación.
  • Medición LTV: Calcule el valor total de la vida útil del usuario, incluida la monetización de la publicidad.

Fuentes de datos: Los datos de ingresos publicitarios normalmente provienen de su plataforma de mediación (por ejemplo, AdMob, AppLovin MAX, IronSource), ya sea a nivel de usuario o a nivel de impresión. Singular soporta múltiples métodos de integración para recibir estos datos.

Más información: Consulte las preguntas frecuentes sobre la atribución de ingresos publicitariospara obtener información detallada sobre la configuración, la generación de informes y la resolución de problemas.


Requisitos de implementación

Directrices críticas

La precisión de los datos es fundamental:

  1. Códigos de moneda: Utilice códigos de moneda ISO 4217 de tres letras (por ejemplo, USD, EUR, INR). Muchas plataformas de mediación informan en USD; verifique la divisa de su plataforma antes de la implementación.
  2. Validar antes de enviar: Valide siempre los datos de ingresos y divisas antes de llamar a Singular.adRevenue(). Los datos incorrectos no pueden corregirse después del envío.
  3. Diferencias entre plataformas: Algunos SDK informan de los ingresos en micros (dividir por 1.000.000), mientras que otros informan en unidades monetarias estándar. Consulte la documentación de su plataforma.

Pasos de configuración

Siga estos pasos para implementar la atribución de ingresos publicitarios:

  1. Actualice el SDK: Asegúrese de que está utilizando la última versión de Singular SDK.
  2. Elija Integración: Seleccione la integración de la plataforma de mediación que coincida con su configuración.
  3. Implemente retrollamadas: Añada escuchadores de eventos de pago específicos de la plataforma para capturar datos de ingresos
  4. Validar datos: Pruebe los informes de ingresos y verifique que los datos aparecen en el panel de Singular

Integraciones de plataformas

Integración con AdMob

Realice un seguimiento de los ingresos publicitarios de Google AdMob utilizando la escucha de eventos de pago para obtener informes de ingresos a nivel de impresión.

Requisitos:

Informes de ingresos por plataforma: AdMob informa de los ingresos de forma diferente según la plataforma. Android devuelve los ingresos en micros (por ejemplo, 0,005 $ = 5.000). Divida adValue.valueMicros entre 1.000.000 para convertirlo a unidades monetarias estándar antes de enviarlo a Singular.

Implementación

Establezca un receptor de eventos de pago al cargar anuncios para capturar los datos de ingresos y enviarlos a 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}")
                }
            })
    }
}

Integración con AppLovin MAX

Comparta los ingresos publicitarios a nivel de impresión utilizando la API de ingresos de usuario a nivel de impresión de AppLovin.

Requisitos:

Implementación

Gestione los mensajes de ingresos a través de la devolución de llamada de 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")
        }
    }
}

Integración de Unity LevelPlay (IronSource)

Realice un seguimiento de los ingresos a nivel de impresión desde IronSource y redes mediadas utilizando el SDK de IronSource.

Requisitos:

  • Implementar ironSource SDK (consulte la Guía de introducción)
  • Habilite la bandera ARM SDK Postbacks en su panel IronSource
  • Configure la escucha de datos de impresión para recibir devoluciones de llamada de ingresos

Más información: Consulte la documentación sobre ingresos publicitarios deIronSource para obtener información detallada sobre la configuración.

Implementación

Implemente la devolución de llamada de éxito de datos de impresión para capturar y enviar ingresos.

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")
}

Integración con TradPlus

Capture los ingresos publicitarios de la mediación TradPlus utilizando la escucha de impresiones global.

Requisitos:

  • Configurar la escucha global de impresiones a través de TradPlusSdk.setGlobalImpressionListener()
  • Manejar onImpressionSuccess callback para recibir datos de ingresos
  • Convertir eCPM de mili-unidades a moneda estándar (dividir por 1000)

Implementación

Registre un receptor de impresiones global para realizar un seguimiento de todas las impresiones de anuncios y los ingresos.

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")
        }
    }
)

Integración genérica (otras plataformas)

Integre cualquier plataforma de mediación utilizando la interfaz genérica SingularAdData.

Requisitos:

  • Acceso a los datos de ingresos a nivel de impresión de su plataforma de mediación
  • Importe de los ingresos en unidades monetarias estándar (no micros)
  • Código de moneda ISO 4217 (por ejemplo, USD, EUR, INR)

Precisión de los datos: Valide los datos de ingresos y divisas antes de enviarlos a Singular. Los datos incorrectos no pueden corregirse después del envío.

Implementación

Cree un objeto SingularAdData con el nombre de la plataforma, la divisa y los ingresos y, a continuación, llame a 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)

Pruebas y validación

Verificación de los informes de ingresos

Pruebe su implementación de ingresos publicitarios para asegurarse de que los datos fluyen correctamente a Singular.

  1. Compruebe los registros: Compruebe que los registros de devolución de llamada de ingresos aparecen con los valores y la moneda correctos.
  2. Pruebe los anuncios: Cargue y muestre anuncios de prueba para activar eventos de ingresos
  3. Verificación del panel de control: Confirme que los ingresos aparecen en el panel de Singular en un plazo de 24 horas
  4. Precisión de datos: Valide que las cantidades de ingresos coincidan con los informes de su plataforma de mediación

Resolución de problemas: Si los ingresos no aparecen en Singular, compruebe que

  • La atribución de ingresos publicitarios está activada en su cuenta de Singular.
  • Los valores de ingresos son superiores a 0
  • Los códigos de moneda son códigos ISO 4217 válidos
  • El nombre de la plataforma coincide con el formato esperado de Singular