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:
- 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.
-
Validar antes de enviar: Valide siempre los datos de ingresos y divisas antes de llamar a
SingularSDK.AdRevenue(). Los datos incorrectos no pueden corregirse después del envío. - Diferencias entre plataformas: AdMob informa de los ingresos en micros en Unity y Android (dividir por 1.000.000), pero en unidades estándar en iOS. Consulte la documentación de su plataforma
Pasos de configuración
Siga estos pasos para implementar la atribución de ingresos publicitarios:
- Actualice el SDK: Asegúrese de que está utilizando la última versión del SDK de Singular.
- Elija Integración: Seleccione la integración de la plataforma de mediación que coincida con su configuración.
- Implemente retrollamadas: Añada escuchadores de eventos de pago específicos de la plataforma para capturar datos de ingresos
- 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:
- Habilite el seguimiento de eventos de pago en su cuenta de AdMob (consulte Asistencia de AdMob).
- Implemente Google Mobile Ads SDK para Unity (consulte la Guía de introducción).
Informes de ingresos por plataforma: AdMob informa de los ingresos de forma diferente según la plataforma. Los ingresos por anuncios de 0,005 $ se devolverán como 5000 en las plataformas Unity y Android, pero como 0,005 en iOS. Para iOS, envíe 0,005 directamente al SDK de Singular. En otras plataformas, convierta adValue de micros a dólares antes de enviarlo a Singular.
Implementación
Registre un controlador de eventos OnAdPaid al cargar los anuncios para capturar los datos de ingresos y enviarlos a Singular.
using UnityEngine;
using Singular;
using GoogleMobileAds.Api;
public class AdMobRevenueTracking : MonoBehaviour
{
private const string AD_UNIT_ID = "YOUR_AD_UNIT_ID";
private RewardedAd rewardedAd;
void Start()
{
// Initialize Mobile Ads SDK
MobileAds.Initialize(initStatus =>
{
Debug.Log("AdMob initialized");
LoadRewardedAd();
});
}
private void LoadRewardedAd()
{
// Create ad request
AdRequest adRequest = new AdRequest();
// Load rewarded ad
RewardedAd.Load(AD_UNIT_ID, adRequest, (RewardedAd ad, LoadAdError error) =>
{
if (error != null || ad == null)
{
Debug.LogError($"Rewarded ad failed to load: {error}");
return;
}
Debug.Log("Rewarded ad loaded");
rewardedAd = ad;
// Register event handlers
RegisterEventHandlers(ad);
});
}
private void RegisterEventHandlers(RewardedAd ad)
{
// Raised when the ad is estimated to have earned money
ad.OnAdPaid += (AdValue adValue) =>
{
// Validate and ensure revenue data is within an expected range
float revenue = adValue.Value / 1_000_000f; // Convert micros to dollars
string currency = adValue.CurrencyCode;
// Check if revenue is positive and currency is valid
if (revenue > 0 && !string.IsNullOrEmpty(currency))
{
// Construct and send the Singular Ad Revenue Event
SingularAdData data = new SingularAdData(
"AdMob",
currency,
revenue
);
SingularSDK.AdRevenue(data);
// Log the revenue data for debugging purposes
Debug.Log($"Ad Revenue reported to Singular: {data}");
}
else
{
Debug.LogError($"Invalid ad revenue data: revenue = {revenue}, currency = {currency}");
}
};
// Additional event handlers
ad.OnAdFullScreenContentOpened += () =>
{
Debug.Log("Rewarded ad full screen content opened");
};
ad.OnAdFullScreenContentClosed += () =>
{
Debug.Log("Rewarded ad full screen content closed");
// Load next ad
LoadRewardedAd();
};
ad.OnAdFullScreenContentFailed += (AdError error) =>
{
Debug.LogError($"Rewarded ad failed to show: {error}");
// Load next ad
LoadRewardedAd();
};
}
public void ShowRewardedAd()
{
if (rewardedAd != null && rewardedAd.CanShowAd())
{
rewardedAd.Show((Reward reward) =>
{
Debug.Log($"User earned reward: {reward.Type} - {reward.Amount}");
});
}
else
{
Debug.Log("Rewarded ad is not ready yet");
}
}
}
Integración con AppLovin MAX
Realice un seguimiento de los ingresos publicitarios a nivel de impresión utilizando la API de ingresos de usuario a nivel de impresión de AppLovin.
Requisitos:
- Implemente el SDK de AppLovin MAX para Unity (consulte la Guía de introducción).
- Adjuntar callbacks de pago de ingresos a todos los formatos de anuncios que esté utilizando
Implementación
Registre las devoluciones de llamada de OnAdRevenuePaidEvent para capturar y enviar datos de ingresos a Singular.
using UnityEngine;
using Singular;
public class AppLovinRevenueTracking : MonoBehaviour
{
void Start()
{
// Attach callbacks based on the ad format(s) you are using
MaxSdkCallbacks.Interstitial.OnAdRevenuePaidEvent += OnAdRevenuePaidEvent;
MaxSdkCallbacks.Rewarded.OnAdRevenuePaidEvent += OnAdRevenuePaidEvent;
MaxSdkCallbacks.Banner.OnAdRevenuePaidEvent += OnAdRevenuePaidEvent;
MaxSdkCallbacks.MRec.OnAdRevenuePaidEvent += OnAdRevenuePaidEvent;
}
private void OnAdRevenuePaidEvent(string adUnitId, MaxSdkBase.AdInfo adInfo)
{
double revenue = adInfo.Revenue;
if (revenue > 0)
{
// Create a SingularAdData object with relevant information
SingularAdData adData = new SingularAdData(
"AppLovin",
"USD", // AppLovin typically reports in USD
revenue
);
// Send ad revenue data to Singular
SingularSDK.AdRevenue(adData);
Debug.Log($"Ad Revenue reported to Singular: {revenue} USD from {adUnitId}");
}
else
{
Debug.LogError("Failed to parse valid revenue value from ad info or revenue is not greater than 0");
}
}
void OnDestroy()
{
// Detach callbacks to prevent memory leaks
MaxSdkCallbacks.Interstitial.OnAdRevenuePaidEvent -= OnAdRevenuePaidEvent;
MaxSdkCallbacks.Rewarded.OnAdRevenuePaidEvent -= OnAdRevenuePaidEvent;
MaxSdkCallbacks.Banner.OnAdRevenuePaidEvent -= OnAdRevenuePaidEvent;
MaxSdkCallbacks.MRec.OnAdRevenuePaidEvent -= OnAdRevenuePaidEvent;
}
}
Integración de Unity LevelPlay (IronSource)
Realice un seguimiento de los ingresos a nivel de impresión de IronSource y redes mediadas utilizando el SDK de IronSource.
Requisitos:
- Implementar IronSource SDK de Unity (consulte la Guía de introducción)
- Habilite la bandera ARM SDK Postbacks en su panel de 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 de IronSource para obtener información detallada sobre la configuración.
Implementación
Suscríbase a ImpressionDataReadyEvent para capturar y enviar datos de ingresos.
using UnityEngine;
using Singular;
public class IronSourceRevenueTracking : MonoBehaviour
{
void Start()
{
// Ensure the listener is added before initializing the SDK
IronSourceEvents.onImpressionDataReadyEvent += ImpressionDataReadyEvent;
// Initialize the IronSource SDK here if not already done
// IronSource.Agent.init("YOUR_IRONSOURCE_APP_KEY");
}
private void ImpressionDataReadyEvent(IronSourceImpressionData impressionData)
{
if (impressionData != null)
{
// Ensure revenue value is valid
double? revenue = impressionData.revenue;
if (revenue.HasValue && revenue.Value > 0)
{
// Create SingularAdData object with appropriate values
SingularAdData adData = new SingularAdData(
"IronSource",
"USD", // IronSource typically reports in USD
revenue.Value
);
// Send the Ad Revenue data to Singular
SingularSDK.AdRevenue(adData);
// Log the data for debugging
Debug.Log($"Ad Revenue reported to Singular: AdPlatform: {adData.AdPlatform}, " +
$"Currency: {adData.Currency}, Revenue: {adData.Revenue}");
}
else
{
Debug.LogError($"Invalid revenue value: {revenue}");
}
}
else
{
Debug.LogError("Impression data is null");
}
}
void OnDestroy()
{
// Detach the callback to prevent memory leaks
IronSourceEvents.onImpressionDataReadyEvent -= ImpressionDataReadyEvent;
}
}
Integración con TradPlus
Capture los ingresos publicitarios de la mediación TradPlus utilizando la escucha de impresiones global.
Requisitos:
-
Añadir un receptor global de impresiones publicitarias a través de
TradplusAds.Instance().AddGlobalAdImpression() -
Gestionar la devolución de llamada de
OnGlobalAdImpressionpara 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.
using UnityEngine;
using Singular;
using System.Collections.Generic;
using System.Globalization;
public class TradPlusRevenueTracking : MonoBehaviour
{
private const string TAG = "TradPlusRevenue";
void Start()
{
// Add Global Ad Impression Listener
TradplusAds.Instance().AddGlobalAdImpression(OnGlobalAdImpression);
}
void OnGlobalAdImpression(Dictionary<string, object> adInfo)
{
// Ensure adInfo is not null
if (adInfo == null)
{
Debug.LogError($"{TAG}: AdInfo is null");
return;
}
// Ensure eCPM is present and valid
if (!adInfo.ContainsKey("ecpm") || adInfo["ecpm"] == null)
{
Debug.LogError($"{TAG}: eCPM value is null or missing");
return;
}
// Parse the eCPM value
if (!double.TryParse(adInfo["ecpm"].ToString(), NumberStyles.Float | NumberStyles.AllowThousands,
CultureInfo.InvariantCulture, out double revenue))
{
Debug.LogError($"{TAG}: Failed to parse eCPM value");
return;
}
// Convert eCPM to revenue (eCPM is in milli-units)
revenue = revenue / 1000.0;
// Validate the revenue value
if (revenue <= 0)
{
Debug.LogError($"{TAG}: Ad Revenue value out of expected range: {revenue}");
return;
}
// Create SingularAdData object with the necessary fields
SingularAdData data = new SingularAdData(
"TradPlus",
"USD",
revenue
);
// Send the Ad Revenue data to Singular
SingularSDK.AdRevenue(data);
// Log the data for debugging purposes
Debug.Log($"{TAG}: Ad Revenue reported to Singular: AdPlatform: {data.AdPlatform}, " +
$"Currency: {data.Currency}, Revenue: {data.Revenue}");
}
}
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 SingularSDK.AdRevenue().
using UnityEngine;
using Singular;
public class GenericAdRevenueTracking : MonoBehaviour
{
// Function to report ad revenue to Singular
public void ReportAdRevenue(string adPlatform, string currency, float revenue)
{
// Validate the input: ensure revenue is positive and currency is not null or empty
if (revenue > 0 && !string.IsNullOrEmpty(currency))
{
// Create a SingularAdData object with the validated data
SingularAdData data = new SingularAdData(
adPlatform,
currency,
revenue
);
// Send the ad revenue data to Singular
SingularSDK.AdRevenue(data);
// Log the reported data for debugging
Debug.Log($"Ad Revenue reported to Singular: Platform = {adPlatform}, " +
$"Currency = {currency}, Revenue = {revenue}");
}
else
{
// Log a warning if validation fails
Debug.LogWarning($"Invalid ad revenue data: Platform = {adPlatform}, " +
$"Revenue = {revenue}, Currency = {currency}");
}
}
// Example usage
void ExampleUsage()
{
// Report revenue from a custom mediation platform
ReportAdRevenue("MyMediationPlatform", "USD", 0.05f);
}
}
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.
- Compruebe los registros: Compruebe que los registros de devolución de llamada de ingresos aparecen con los valores y la divisa correctos en Unity Console.
- Probar anuncios: Cargue y muestre anuncios de prueba para activar eventos de ingresos
- Verificación del panel de control: Confirme que los ingresos aparecen en el panel de Singular en un plazo de 24 horas
- 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
- Los controladores de eventos se registran correctamente antes de que se carguen los anuncios