このガイドでは、TopOnからTenjinへインプレッションレベルの収益データ(ILRD))送信するための実装方法について説明します。この連携は、TopOn SDKの特定のコールバック「onAdRevenuePaid(ATAdInfo adInfo)」を監視することで機能します。このコールバックは、広告インプレッションによって収益が発生するたびに呼び出されます。 詳細な収益データを含むこのATAdInfoオブジェクトは、その後Tenjin SDKに渡されます。
ステップ 1:プロジェクトの依存関係を確認する #
アプリレベルの build.gradleファイルに、必要な依存関係が確実に含まれていることを確認してください。
- 最新のTopOn SDKを実装してください。
- アドネットワークアダプタ: TopOn を通じてメディエーションするすべてのアドネットワーク (AdMob、AppLovin、Unity Ads、Metaなど) のアダプタを含める必要があります。
// 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
}ステップ 2: SDK の初期化 #
メインのアクティビティのonCreateメソッド内で、TenjinとTopOnの両方のSDKを初期化してください。
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();
}
// ...
}ステップ3:各広告フォーマットごとに収益追跡を実装する #
You must implement the revenue listener for every Ad Format you use. If tracking is missing for even one format (e.g., Rewarded Video), all impressions from it will be missed by Tenjin. The correct method is to set an ATAdRevenueListener and call Tenjin’s eventAdImpressionTopOn() method from inside the onAdRevenuePaid() callback.
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. インタースティシャル広告(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. リワード型動画広告(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. ネイティブ広告とスプラッシュ広告 #
ネイティブ広告(ATNativeAd)やスプラッシュ広告(ATSplashAd)など、使用するその他の広告フォーマットについても、まったく同じパターンに従う必要があります。 各広告オブジェクトには、それぞれ独自のATAdRevenueListenerが必要です。
ステップ 4: SDK Delegateの競合を解決する #
TopOnの広告収益を追跡する他のサービス(Firebase、GameAnalyticsなど)を利用している場合、競合が発生する可能性があります。 設定できるリスナーは1つだけです。
- 症状: あるサービスでは広告表示データが正常に表示されているが、Tenjinでは欠落している。
- 解決策:リスナーを複数設定しないでください。代わりに、他のサービスが onAdRevenuePaidコールバックからATAdInfoオブジェクトを受け取る箇所を特定してください。その同じ箇所にTenjinへの呼び出しを追加することで、両方のサービスがデータを確実に受け取れるようにしてください。
// 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);
}
}