1. 创建一个自定义Interstitial Adapter类,可继承NSObject,并遵循ATAdAdapter协议,建议以InterstitialAdapter结尾,类名需要配置到Taku后台的自定义广告平台;
2. 自定义Adapter类必须实现方法说明如下:
具体方法说明如下:
方法 | 参数说明 | 返回值 | 作用 | 是否 必须 |
---|---|---|---|---|
-(instancetype) initWithNetworkCustomInfo:(NSDictionary *)serverInfo localInfo:(NSDictionary *)localInfo | serverInfo: 服务端配置的参数字典 localInfo: 本次加载传入的参数字典 | instancetype | 用于初始化自定义Adapter | 是 |
-(void) loadADWithInfo:(NSDictionary *)serverInfo localInfo:(NSDictionary *)localInfo completion:(void (^)(NSArray | serverInfo: 服务端配置的参数字典 localInfo: 本次加载传入的参数字典 | void | 实现展示自定义广告平台加载广告的逻辑 | 是 |
+(BOOL) adReadyWithCustomObject:(id)customObject info:(NSDictionary *)info | customObject:自定义广告平台的广告实例对象 info:服务端配置的参数字典 | BOOL | 用于判断自定义广告平台的激励视频广告是否已经是准备完成的状态 | 是 |
+(void) showInterstitial:(ATInterstitial *)interstitial inViewController:(UIViewController*)viewController delegate:(id | interstitial:插屏广告对象 viewController:当前视图控制器 delegate:广告对象代理 | void | 实现展示自定义广告平台插屏的逻辑 | 是 |
3. 回调方法说明如下: 需要自定义实现一个xxxCustomEvent类,继承ATInterstitialCustomEvent类,并通过这个类添加自定义广告平台对应开屏的回调代理,当广告平台有回调时,将对应事件调用ATInterstitialCustomEvent的方法回传给Taku SDK。
具体回调方法说明如下:
回调方法 | 参数说明 | 说明 |
---|---|---|
-(void) trackInterstitialAdLoaded:(id)interstitialAd adExtra:(NSDictionary * )adExtra | interstitialAd:插屏广告对象 adExtra:拓展信息 | 广告加载成功时执行回调给开发者 |
-(void) trackInterstitialAdLoadFailed:(NSError* )error | error:错误信息 | 广告加载失败时执行回调给开发者 |
self.customEventMetaDataDidLoadedBlock() | - | 广告素材内容加载成功回调(自定义广告平台激励视频代理没有素材回调时可不实现) |
-(void) trackInterstitialAdShow | - | 广告页面打开时执行回调给开发者 |
-(void) trackInterstitialAdShowFailed:(NSError* )error | error:错误信息 | 广告页面打开失败时执行回调给开发者 |
-(void) trackInterstitialAdVideoStart | - | 广告播放开始时执行回调给开发者 |
-(void) trackInterstitialAdVideoEnd | - | 广告播放结束时执行回调给开发者 |
-(void) trackInterstitialAdDidFailToPlayVideo:(NSError* )error | error:播放失败信息 | 广告播放失败时执行回调给开发者 |
-(void) trackInterstitialAdClick | - | 广告被点击时执行的回调给开发者 |
-(void) trackInterstitialAdClose | - | 广告页面关闭时执行回调给开发者 |
1. 创建一个自定义Interstitial Adapter类,可继承NSObject,建议以InterstitialAdapter结尾,类名需要配置到Taku后台的自定义广告平台;
2.自定义adapter类必须实现方法如下:
•实现initWithNetworkCustomInfo:实例化adapter对象,可以在这里进行广告SDK的相关初始化;
•实现广告加载时调用的loadADWithInfo:方法,触发广告SDK的广告请求;
•实现adReadyWithCustomObject:方法,用于告知Taku SDK当前是否有广告填充;
•实现showInterstitial:方法,当Taku SDK触发广告展示时,会调用此方法触发广告SDK的广告展示逻辑。
以下是集成示例,具体项目可参考 Demo 中 CustomAdapter中 的示例代码:
创建并实现TTInterstitialCustomAdapter类:
//TouTiaoInterstitialCustomAdapter.h
@interface TTInterstitialCustomAdapter : NSObject
@property (nonatomic,copy) void (^metaDataDidLoadedBlock)(void);
@end
//TouTiaoInterstitialCustomAdapter.m
#import <AnyThinkInterstitial/AnyThinkInterstitial.h>
@interface TTInterstitialCustomAdapter()
@property(nonatomic, readonly) TouTiaoInterstitialCustomEvent *customEvent;
@end
@implementation TTInterstitialCustomAdapter
/// Adapter initialization method
/// - Parameters:
/// - serverInfo: Data from the server
/// - localInfo: Data from the local
-(instancetype) initWithNetworkCustomInfo:(NSDictionary*)serverInfo localInfo:(NSDictionary*)localInfo {
self = [super init];
if (self != nil) {
//TODO: add some code for initialize Network SDK
}
return self;
}
/// Adapter sends a load request, means the ad source sends an ad load request
/// - Parameters:
/// - serverInfo: Data from the server
/// - localInfo: Data from the local
/// - completion: completion
-(void) loadADWithInfo:(NSDictionary*)serverInfo localInfo:(NSDictionary*)localInfo completion:(void (^)(NSArray *, NSError *))completion {
_customEvent = [[TouTiaoInterstitialCustomEvent alloc] initWithInfo:serverInfo localInfo:localInfo];
//必须赋值
_customEvent.requestCompletionBlock = completion;
CGSize adSize = [serverInfo[@"size"] respondsToSelector:@selector(CGSizeValue)] ? [serverInfo[@"size"] CGSizeValue] : CGSizeMake(300.0f, 300.0f);
_interstitial = [[BUNativeExpressInterstitialAd alloc] initWithSlotID:serverInfo[@"slot_id"] adSize:adSize];
_interstitial.delegate = _customEvent;
[_interstitial loadAdData];
}
/// Check whether the ad source is ready
/// - Parameters:
/// - customObject: ad source object
/// - info: info
+(BOOL) adReadyWithCustomObject:(id)customObject info:(NSDictionary*)info {
return ((BUNativeExpressInterstitialAd *)customObject).adValid;
}
+(void) showInterstitial:(ATInterstitial*)interstitial inViewController:(UIViewController*)viewController delegate:(id)delegate {
BUNativeExpressInterstitialAd *ttInterstitial = interstitial.customObject;
interstitial.customEvent.delegate = delegate;
[ttInterstitial showAdFromRootViewController:viewController];
}
需要自定义实现一个xxxCustomEvent类,继承ATInterstitialCustomEvent类,并通过这个类添加自定义广告平台对应开屏的回调代理,当广告平台有回调时,将对应事件调用ATInterstitialCustomEvent的方法回传给Taku SDK。
以下是集成示例,具体项目可参考 Demo 中 CustomAdapter中 的示例代码:
创建并实现TouTiaoInterstitialCustomEvent类:
- (void)nativeExpresInterstitialAdDidLoad:(BUNativeExpressInterstitialAd *)interstitialAd {
NSLog(@"TouTiaoInterstitialCustomEvent::interstitialAdDidLoad:");
[self trackInterstitialAdLoaded:interstitialAd adExtra:nil];
}
- (void)nativeExpresInterstitialAd:(BUNativeExpressInterstitialAd *)interstitialAd didFailWithError:(NSError * __nullable)error {
NSLog(@"%@",[NSString stringWithFormat:@"TouTiaoInterstitialCustomEvent::interstitialAd:didFailWithError:%@", error]);
[self trackInterstitialAdLoadFailed:error];
}
- (void)nativeExpresInterstitialAdWillVisible:(BUNativeExpressInterstitialAd *)interstitialAd {
NSLog(@"TouTiaoInterstitialCustomEvent::interstitialAdWillVisible:");
[self trackInterstitialAdShow];
}
- (void)nativeExpresInterstitialAdDidClick:(BUNativeExpressInterstitialAd *)interstitialAd {
NSLog(@"TouTiaoInterstitialCustomEvent::interstitialAdDidClick:");
[self trackInterstitialAdClick];
}
- (void)nativeExpresInterstitialAdDidClose:(BUNativeExpressInterstitialAd *)interstitialAd {
NSLog(@"TouTiaoInterstitialCustomEvent::interstitialAdDidClose:");
[self trackInterstitialAdClose];
}
- (void)nativeExpresInterstitialAdWillClose:(BUNativeExpressInterstitialAd *)interstitialAd {
NSLog(@"TouTiaoInterstitialCustomEvent::interstitialAdWillClose:");
}
- (NSString *)networkUnitId {
return self.serverInfo[@"slot_id"];
}
注意:在实现自定义广告平台插屏广告回调事件时,若没有视频播放和结束相关回调事件,可不返回。