Tenjin SDK 能够监管 TopOn 的展示级收益数据(Impression Level Revenue Data),并将这些事件发送至 Tenjin 平台。 该集成方案会针对 TopOn 返回的每一次广告展示,发送对应的收益信息。 集成步骤如下:
- 安装TopOn iOS SDK: https://docs.toponad.com/#/en-us/ios/GetStarted/TopOn_Get_Started
请确保您已安装最新版本的 AnyThinkiOS iOS SDK(版本需高于 5.7.99)。 - 在接收到Ad extra dictionary后,将其传递给 Tenjin SDK:
Objective-C
[TenjinSDK initialize:@"<SDK_KEY>"];
[TenjinSDK connect];
[[ATAdManager sharedManager] loadADWithPlacementID:@"<INTERSTITIAL_AD_ID>" extra:@{} delegate:self];
-(void) didShowNativeBannerAdInView:(ATNativeBannerView*)bannerView placementID:(NSString*)placementID extra:(NSDictionary *)extra{
[TenjinSDK topOnImpressionFromDict:extra];
}以下是 TopOn Banner 集成及订阅展示事件的举例:
Objective-C
@implementation TJNTopOnViewController
- (void)viewDidLoad {
[super viewDidLoad];
_bannerPlacementID = @"<BANNER_AD_ID>";
_interstitialPlacementID = @"<INTERSTITIAL_AD_ID>";
[[ATAdManager sharedManager] loadADWithPlacementID:_interstitialPlacementID extra:@{} delegate:self];
if ([ATNativeBannerWrapper nativeBannerAdReadyForPlacementID:_bannerPlacementID]) {
[self showAd];
} else {
[ATNativeBannerWrapper loadNativeBannerAdWithPlacementID:_bannerPlacementID extra:@{kATExtraInfoNativeAdSizeKey:[NSValue valueWithCGSize:CGSizeMake(CGRectGetWidth(self.view.bounds), 120.0f)]} customData:nil delegate:self];
}
}
-(void) showAd {
ATNativeBannerView *bannerView = [ATNativeBannerWrapper retrieveNativeBannerAdViewWithPlacementID:_bannerPlacementID extra:@{kATNativeBannerAdShowingExtraAdSizeKey:[NSValue valueWithCGSize:CGSizeMake(CGRectGetWidth([UIScreen mainScreen].bounds), 120.0f)], kATNativeBannerAdShowingExtraAutorefreshIntervalKey:@10.0f, kATNativeBannerAdShowingExtraHideCloseButtonFlagKey:@NO, kATNativeBannerAdShowingExtraCTAButtonBackgroundColorKey:[UIColor redColor], kATNativeBannerAdShowingExtraCTAButtonTitleColorKey:[UIColor whiteColor], kATNativeBannerAdShowingExtraCTAButtonTitleFontKey:[UIFont systemFontOfSize:12.0f], kATNativeBannerAdShowingExtraTitleColorKey:[UIColor grayColor], kATNativeBannerAdShowingExtraTitleFontKey:[UIFont systemFontOfSize:12.0f], kATNativeBannerAdShowingExtraTextColorKey:[UIColor lightGrayColor], kATNativeBannerAdShowingExtraTextFontKey:[UIFont systemFontOfSize:10.0f], kATNativeBannerAdShowingExtraBackgroundColorKey:[UIColor whiteColor], kATNativeBannerAdShowingExtraAdvertiserTextFontKey:[UIFont systemFontOfSize:12.0f], kATNativeBannerAdShowingExtraAdvertiserTextColorKey:[UIColor lightGrayColor]} delegate:self];
bannerView.frame = CGRectMake(.0f, 100.0f, CGRectGetWidth(bannerView.bounds), CGRectGetHeight(bannerView.bounds));
bannerView.autoresizingMask = UIViewAutoresizingFlexibleWidth;
[self.view addSubview:bannerView];
}
- (IBAction)showInterstitialAd {
[[ATAdManager sharedManager] showInterstitialWithPlacementID:_interstitialPlacementID inViewController:self delegate:self];
}
#pragma mark - native banner delegate(s)
-(void) didFinishLoadingNativeBannerAdWithPlacementID:(NSString *)placementID {
NSLog(@"TJNTopOnViewController::didFinishLoadingNativeBannerAdWithPlacementID:%@", placementID);
[self showAd];
}
-(void) didFailToLoadNativeBannerAdWithPlacementID:(NSString*)placementID error:(NSError*)error {
NSLog(@"TJNTopOnViewController::didFailToLoadNativeBannerAdWithPlacementID:%@ error:%@", placementID, error);
}
-(void) didShowNativeBannerAdInView:(ATNativeBannerView*)bannerView placementID:(NSString*)placementID extra:(NSDictionary *)extra{
NSLog(@"TJNTopOnViewController::didShowNativeBannerAdInView:%@ placementID:%@ with extra: %@",bannerView, placementID,extra);
[TenjinSDK topOnImpressionFromDict:extra];
}
-(void) didClickNativeBannerAdInView:(ATNativeBannerView*)bannerView placementID:(NSString*)placementID extra:(NSDictionary *)extra{
NSLog(@"TJNTopOnViewController::didClickNativeBannerAdInView:%@ placementID:%@ with extra: %@",bannerView, placementID,extra);
}
-(void) didClickCloseButtonInNativeBannerAdView:(ATNativeBannerView*)bannerView placementID:(NSString*)placementID extra:(NSDictionary *)extra{
NSLog(@"TJNTopOnViewController::didClickCloseButtonInNativeBannerAdView:%@ placementID:%@", bannerView, placementID);
}
-(void) didAutorefreshNativeBannerAdInView:(ATNativeBannerView*)bannerView placementID:(NSString*)placementID extra:(NSDictionary *)extra{
NSLog(@"TJNTopOnViewController::didAutorefreshNativeBannerAdInView:%@ placementID:%@ with extra: %@",bannerView, placementID,extra);
}
-(void) didFailToAutorefreshNativeBannerAdInView:(ATNativeBannerView*)bannerView placementID:(NSString*)placementID extra:(NSDictionary *)extra error:(NSError*)error {
NSLog(@"TJNTopOnViewController::didFailToAutorefreshNativeBannerAdInView:%@ placementID:%@ error:%@", bannerView, placementID, error);
}
- (void)didNativeBannerDeeplinkOrJumpInView:(ATNativeBannerView *)bannerView placementID:(NSString *)placementID extra:(NSDictionary *)extra result:(BOOL)success {
NSLog(@"TJNTopOnViewController::didNativeBannerDeeplinkOrJumpInView:%@ extra:%@", placementID, extra);
}
- (void)didFinishLoadingSplashADWithPlacementID:(NSString *)placementID isTimeout:(BOOL)isTimeout {
NSLog(@"TJNTopOnViewController::didFinishLoadingSplashADWithPlacementID:%@", placementID);
}
- (void)didTimeoutLoadingSplashADWithPlacementID:(NSString *)placementID {
NSLog(@"TJNTopOnViewController::didTimeoutLoadingSplashADWithPlacementID:%@", placementID);
}
#pragma mark - Interstitial delegate method(s)
-(void) didFinishLoadingADWithPlacementID:(NSString *)placementID {
NSLog(@"TJNTopOnViewController::didFinishLoadingADWithPlacementID:%@", placementID);
}
-(void) didFailToLoadADWithPlacementID:(NSString*)placementID error:(NSError*)error {
NSLog(@"TJNTopOnViewController::didFailToLoadADWithPlacementID:%@ error:%@", placementID, error);
}
-(void) interstitialDidShowForPlacementID:(NSString *)placementID extra:(NSDictionary *)extra {
NSLog(@"TJNTopOnViewController::interstitialDidShowForPlacementID:%@ extra:%@", placementID, extra);
[TenjinSDK topOnImpressionFromDict:extra];
}
-(void) interstitialFailedToShowForPlacementID:(NSString*)placementID error:(NSError*)error extra:(NSDictionary *)extra {
NSLog(@"TJNTopOnViewController::interstitialFailedToShowForPlacementID:%@ error:%@ extra:%@", placementID, error, extra);
}
-(void) interstitialDidFailToPlayVideoForPlacementID:(NSString*)placementID error:(NSError*)error extra:(NSDictionary*)extra {
NSLog(@"TJNTopOnViewController::interstitialDidFailToPlayVideoForPlacementID:%@ error:%@ extra:%@", placementID, error, extra);
}
-(void) interstitialDidStartPlayingVideoForPlacementID:(NSString*)placementID extra:(NSDictionary *)extra {
NSLog(@"TJNTopOnViewController::interstitialDidStartPlayingVideoForPlacementID:%@ extra:%@", placementID, extra);
}
-(void) interstitialDidEndPlayingVideoForPlacementID:(NSString*)placementID extra:(NSDictionary *)extra {
NSLog(@"TJNTopOnViewController::interstitialDidEndPlayingVideoForPlacementID:%@ extra:%@", placementID, extra);
}
-(void) interstitialDidCloseForPlacementID:(NSString*)placementID extra:(NSDictionary *)extra {
NSLog(@"TJNTopOnViewController::interstitialDidCloseForPlacementID:%@ extra:%@", placementID, extra);
}
-(void) interstitialDidClickForPlacementID:(NSString*)placementID extra:(NSDictionary *)extra {
NSLog(@"TJNTopOnViewController::interstitialDidClickForPlacementID:%@ extra:%@", placementID, extra);
}
- (void)interstitialDeepLinkOrJumpForPlacementID:(NSString *)placementID extra:(NSDictionary *)extra result:(BOOL)success {
NSLog(@"TJNTopOnViewController::interstitialDeepLinkOrJumpForPlacementID:%@ extra:%@", placementID, extra);
}
@end- 【重要提示】 如果你已经接入了其他服务(例如 Game Analytics),且这些服务正在获取 TopOn 的展示(Impressions)代理回调,Tenjin 的自动订阅功能将不再生效。
在这种情况下,你必须手动将代理中的广告展示数据,通过
topOnImpressionFromJSON方法传给 TenjinSDK。 JSON Body必须遵循以下格式:
以下是 TopOn 的展示级收益数据(Impression Level Revenue Data)示例:
| 参数 | 必需? | 例子 |
| adsource_index | 否 | 0 |
| ad_network_type | 否 | 字符串 |
| is_header_bidding_adsource | 否 | Int |
| ecpm_precision | 否 | 字符串 |
| adsource_id | 否 | 5656 |
| ecpm | 否 | 1 |
| scenario_id | 否 | 字符串 |
| custom_rule | 否 | 字符串 |
| sub_channel | 否 | testSubChannel |
| publisher_revenue | 是 | 0.001 |
| scenario_reward_name | 否 | 字符串 |
| channel | 否 | testChannel |
| topon_ad_format | 否 | 字符串 |
| segment_id | 否 | 0 |
| country | 否 | DE |
| show_id | 否 | 字符串 |
| scenario_reward_number | 否 | 0 |
| network_placement_id | 否 | ca-app-pub-3940256099942544%2F6300978111 |
| topon_placement_id | 否 | 字符串 |
| ecpm_level | 否 | 1 |
| reward_user_custom_data | 否 | 字符串 |
| network_firm_id | 否 | 2 |
| currency | 否 | USD |
| precision | 否 | 字符串 |