Esta guía describe el proceso de implementación para enviar datos de ingresos a nivel de impresión (ILRD) desde TopOn a Tenjin. La integración funciona mediante la detección de una llamada de retorno específica del SDK de TopOn, onAdRevenuePaid(ATAdInfo adInfo), que se activa cada vez que una impresión publicitaria genera ingresos. A continuación, este objeto ATAdInfo, que contiene datos detallados sobre los ingresos, se transmite al SDK de Tenjin.
Esta guía explica cómo enviar los datos de ingresos por nivel de visualización de anuncios (ILRD) desde TopOn a Tenjin. Esta integración funciona mediante la escucha de una llamada de retorno específica del SDK de TopOn, onAdRevenuePaid(ATAdInfo adInfo), que se activa cada vez que una impresión publicitaria genera ingresos. A continuación, el objeto ATAdInfo, que contiene los datos detallados de los ingresos, se transmite al SDK de Tenjin.
Paso 1: Verificar las dependencias del proyecto Paso 1: Verificar las dependencias del proyecto #
En el archivo build.gradle de tu aplicación, asegúrate de haber incluido las dependencias necesarias. En el archivo build.gradle del módulo de tu aplicación, asegúrate de haber incluido las dependencias necesarias.
- Última versión del SDK de TopOn La última versión del SDK de TopOn
- Adaptadores de redes publicitarias: Debes incluir los adaptadores de todas las redes publicitarias que pretendas gestionar a través de TopOn (por ejemplo, AdMob, AppLovin, Unity Ads, Meta, etc.). Adaptadores de plataformas publicitarias: Debes incluir los adaptadores correspondientes a cada una de las plataformas publicitarias que desees gestionar a través de TopOn (por ejemplo: AdMob, AppLovin, Unity Ads, Meta, etc.).
// Example: app/build.gradle
dependencies {
// 1. TopOn (AnyThink) SDK Core
implementation 'com.anythink.sdk:core:6.4.17'
// 2. Adapters for ALL supported ad networks 所有支持的广告平台的 Adapter
implementation 'com.anythink.sdk:adapter-admob:6.4.17'
implementation 'com.anythink.sdk:adapter-applovin:6.4.17'
implementation 'com.anythink.sdk:adapter-unityads:6.4.17'
implementation 'com.anythink.sdk:adapter-meta:6.4.17'
// ... add every other adapter you use 添加您使用的所有其他 adapter
}Paso 2: Inicializar los SDK 初始化 SDK #
En el método onCreate de tu actividad principal, inicializa los SDK de Tenjin y TopOn.
import com.anythink.core.API.ATSDK;
import com.tenjin.android.TenjinSDK;
// ... other imports
public class YourMainActivity extends Activity {
private TenjinSDK tenjinInstance;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// ... your other setup code
// 1. Initialize Tenjin 初始化 Tenjin
tenjinInstance = TenjinSDK.getInstance(this, "<Your Tenjin API Key>");
// 2. Initialize TopOn 初始化 TopOn
ATSDK.init(getApplicationContext(), "<Your TopOn App ID>", "<Your TopOn App Key>");
// 3. Load your ads 加载您的广告
loadAllAdFormats();
}
// ...
}Paso 3: Implementar el seguimiento de ingresos para CADA formato publicitario 为 cada formato publicitario implementar el seguimiento de ingresos #
Debes implementar el listener de ingresos para cada formato publicitario que utilices. Si falta el seguimiento de tan solo un formato (por ejemplo, «Vídeo con recompensa»), Tenjin no registrará ninguna de las impresiones de dicho formato. El método correcto consiste en configurar un ATAdRevenueListener y llamar al método eventAdImpressionTopOn() de Tenjin desde dentro de la llamada de retorno onAdRevenuePaid().
private void loadBannerAd() {
ATBannerView mBannerView = new ATBannerView(this);
mBannerView.setPlacementId("<Your_Banner_Placement_ID>");
// ... add the banner view to your layout ...
// Set the revenue listener 设置收益监听
mBannerView.setAdRevenueListener(new ATAdRevenueListener() {
@Override
public void onAdRevenuePaid(ATAdInfo adInfo) {
// Send revenue data to Tenjin for every impression, including auto-refreshes
// 为每一次广告展示(包括自动刷新)向 Tenjin 发送收益数据
if (tenjinInstance != null) {
tenjinInstance.eventAdImpressionTopOn(adInfo);
}
}
});
mBannerView.loadAd();
}B. Anuncios intersticiales (Interstitial) #
private void loadInterstitialAd() {
ATInterstitial mInterstitialAd = new ATInterstitial(this, "<Your_Interstitial_Placement_ID>");
// Set the revenue listener
// 设置收益监听器
mInterstitialAd.setAdRevenueListener(new ATAdRevenueListener() {
@Override
public void onAdRevenuePaid(ATAdInfo adInfo) {
// Send revenue data to Tenjin
// 向 Tenjin 发送收益数据
if (tenjinInstance != null) {
tenjinInstance.eventAdImpressionTopOn(adInfo);
}
}
});
mInterstitialAd.load();
}C. Anuncios de vídeo con recompensa (Rewarded Video) #
private void loadRewardedVideoAd() {
ATRewardVideoAd mRewardVideoAd = new ATRewardVideoAd(this, "<Your_Rewarded_Placement_ID>");
// Set the revenue listener
// 设置收益监听器
mRewardVideoAd.setAdRevenueListener(new ATAdRevenueListener() {
@Override
public void onAdRevenuePaid(ATAdInfo adInfo) {
// Send revenue data to Tenjin
// 向 Tenjin 发送收益数据
if (tenjinInstance != null) {
tenjinInstance.eventAdImpressionTopOn(adInfo);
}
}
});
mRewardVideoAd.load();
}D. Anuncios nativos y de pantalla de inicio (Native y Splash) #
Debes seguir exactamente el mismo patrón para cualquier otro formato publicitario que utilices, como los anuncios nativos (ATNativeAd) y los anuncios de pantalla de inicio (ATSplashAd). Cada objeto publicitario necesita su propio ATAdRevenueListener. Para cualquier otro formato publicitario que utilices, como los anuncios nativos (ATNativeAd) y los anuncios de pantalla de inicio (ATSplashAd), debes seguir exactamente el mismo patrón. Cada objeto publicitario necesita su propio ATAdRevenueListener.
Paso 4: Resolver conflictos de delegados del SDK 解决 SDK 代理冲突 #
Si utilizas otro servicio (como Firebase, GameAnalytics, etc.) que también realiza un seguimiento de los ingresos publicitarios de TopOn, es posible que se produzca un conflicto. Solo se puede configurar un oyente. Si utilizas otros servicios que también necesiten realizar un seguimiento de los ingresos publicitarios de TopOn (como Firebase, GameAnalytics, etc.), podría producirse un conflicto. Solo se puede configurar un oyente por evento.
- Síntoma: Las impresiones se muestran correctamente en un servicio, pero faltan en Tenjin. Síntoma: Los datos de impresiones se muestran correctamente en un servicio, pero faltan en Tenjin.
- Solución: No configures varios oyentes. En su lugar, busca dónde tu otro servicio recibe el objeto ATAdInfo desde la llamada de retorno onAdRevenuePaid. En ese mismo lugar, añade la llamada a Tenjin para garantizar que ambos servicios reciban los datos. Solución: No configures varios oyentes. En su lugar, localiza el punto en el que tu otro servicio recibe el objeto ATAdInfo de la llamada de retorno onAdRevenuePaid. En ese mismo punto, añade la llamada a Tenjin para garantizar que ambos servicios reciban los datos.
// Example of resolving a listener conflict
// 解决监听器冲突的示例
public void onAdRevenuePaid(ATAdInfo adInfo) {
// 1. Call for your other service
// 1. 为您的其他服务发起调用
callMyOtherAnalyticsService(adInfo);
// 2. [CRITICAL] Add the call to Tenjin in the same place
// 2. [关键] 在同一个地方添加对 Tenjin 的调用
if (tenjinInstance != null) {
tenjinInstance.eventAdImpressionTopOn(adInfo);
}
}