方法 | 参数说明 | 返回值 | 作用 | 是否 必须 |
---|---|---|---|---|
- (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)showSplash:(ATSplash *)splash localInfo:(NSDictionary *)localInfo delegate:(id)delegate | splash: 本次加载传入的对象 localInfo: 本次加载传入的参数字典,包含在 show ad 时传入的window 等参数 delegate:广告对象代理 | void | 实现自定义广告平台展示开屏广告的逻辑。注意这个是类方法 | 是 1.创建一个继承NSObject的类,此类的命名可包含自定义广告平台的名称,并以SplashAdapter结尾; 2.创建一个继承ATSplashCustomEvent的类,此类的命名应同样包含你的自定义广告平台名称,并以SplashCustomEvent结尾 3.在自定义SplashAdapter类中引入以下头文件 |
3. 回调方法说明如下:需要自定义实现一个xxxCustomEvent类,继承ATSplashCustomEvent类,并通过这个类添加自定义广告平台对应开屏的回调代理,当广告平台有回调时,将对应事件调用ATSplashCustomEvent的方法回传给Taku SDK。
具体回调方法说明如下:
回调方法 | 参数说明 | 说明 |
---|---|---|
-(void) trackSplashAdLoaded:(id)splashAd adExtra:(NSDictionary *)adExtra | splashAd:广告对象 adExtra:拓展信息 | 广告加载成功时执行回调给Taku SDK |
-(void) trackSplashAdLoadFailed:(NSError*)error | error:错误信息 | 广告加载失败时执行回调给Taku SDK |
-(void) trackSplashAdClick | - | 广告被点击时执行的回调给Taku SDK |
-(void) trackSplashAdShow | - | 广告展示时执行的回调给Taku SDK |
-(void) trackSplashAdClosed | - | 广告被关闭时执行的回调给Taku SDK |
-(void) trackSplashAdCountdownTime:(NSInteger)countdown | countdown:当前的倒计时时间 | 实现了自定义按钮和倒计时相关参数,在倒计时开始后,回调当前的倒计时时间给Taku SDK |
1. 创建一个自定义Splash Adapter类,可继承NSObject,建议以SplashAdapter结尾,类名需要配置到Taku后台的自定义广告平台;
2.自定义adapter类必须实现方法如下:
•实现initWithNetworkCustomInfo:实例化adapter对象,可以在这里进行广告SDK的相关初始化;
•实现广告加载时调用的loadADWithInfo:方法,触发广告SDK的广告请求;
•实现adReadyWithCustomObject:方法,用于告知Taku SDK当前是否有广告填充;
•实现showSplash:方法,当Taku SDK触发广告展示时,会调用此方法触发广告SDK的广告展示逻辑。
以下是集成示例,具体项目可参考 Demo 中 CustomAdapter中 的示例代码:
创建并实现ToutiaoCustomSplashAdapter类:
#import <AnyThinkSplash/AnyThinkSplash.h>
@interface ToutiaoCustomSplashAdapter()
@property(nonatomic, readonly) TouTiaoSplashCustomEvent *customEvent;
@end
@implementation ToutiaoCustomSplashAdapter
/// 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 {
NSDictionary *extra = localInfo;
NSTimeInterval tolerateTimeout = localInfo[kATSplashExtraTolerateTimeoutKey] ? [localInfo[kATSplashExtraTolerateTimeoutKey] doubleValue] : 5.0;
NSDate *curDate = [NSDate date];
if (tolerateTimeout > 0) {
_customEvent = [[TouTiaoSplashCustomEvent alloc] initWithInfo:serverInfo localInfo:localInfo];
//必须赋值
_customEvent.requestCompletionBlock = completion;
_customEvent.expireDate = [curDate dateByAddingTimeInterval:tolerateTimeout];;
dispatch_async(dispatch_get_main_queue(), ^{
self->_splashView = [[BUSplashAdView alloc] initWithSlotID:serverInfo[@"slot_id"] frame:CGRectMake(.0f, .0f, CGRectGetWidth([UIScreen mainScreen].bounds), CGRectGetHeight([UIScreen mainScreen].bounds))];
self->_splashView.tolerateTimeout = tolerateTimeout;
if (extra[kATSplashExtraHideSkipButtonFlagKey]) { self->_splashView.hideSkipButton = [extra[kATSplashExtraHideSkipButtonFlagKey] boolValue]; }
self->_splashView.delegate = self->_customEvent;
self->_customEvent.ttSplashView = (UIView*)self->_splashView;
// v 5.7.06 及以上添加如下的方法
UIView *containerView = extra[kATSplashExtraContainerViewKey];
self->_customEvent.containerView = containerView;
[self->_splashView loadAdData];
});
} else {
completion(nil, [NSError errorWithDomain:ATADLoadingErrorDomain code:ATADLoadingErrorCodeThirdPartySDKNotImportedProperly userInfo:@{NSLocalizedDescriptionKey:@"AT has failed to load splash.", NSLocalizedFailureReasonErrorKey:@"It took too long to load placement stragety."}]);
}
}
/// Check whether the ad source is ready
/// - Parameters:
/// - customObject: ad source object
/// - info: info
+(BOOL) adReadyWithCustomObject:(id)customObject info:(NSDictionary*)info {
return ((BUSplashAdView *)customObject).adValid;
}
+ (void)showSplash:(ATSplash *)splash localInfo:(NSDictionary *)localInfo delegate:(id)delegate {
BUSplashAdView *splashView = splash.customObject;
ATTTSplashCustomEvent *customEvent = (TouTiaoSplashCustomEvent *)splashView.delegate;
// 这里可以获取到开发者在 show ad 时传入的 window
UIWindow *window = localInfo[kATSplashExtraWindowKey];
customEvent.backgroundImageView = localInfo[kATSplashExtraBackgroundImageViewKey];
[window addSubview:customEvent.containerView];
[window addSubview:customEvent.ttSplashView];
}
需要自定义实现一个xxxCustomEvent类,继承ATSplashCustomEvent类,并通过这个类添加自定义广告平台对应开屏的回调代理,当广告平台有回调时,将对应事件调用ATSplashCustomEvent的方法回传给Taku SDK。
以下是集成示例,具体项目可参考 Demo 中 CustomAdapter中 的示例代码:
创建并实现TouTiaoSplashCustomEvent类:
@interface ATTTSplashCustomEvent : ATSplashCustomEvent
//超时时间
@property(nonatomic) NSDate *expireDate;
@end
- (void)splashAdDidLoad:(BUSplashAdView *)splashAd {
if ([[NSDate date] timeIntervalSinceDate:_expireDate] > 0) {
NSError *error = [NSError errorWithDomain:ATADLoadingErrorDomain code:ATADLoadingErrorCodeADOfferLoadingFailed userInfo:@{NSLocalizedDescriptionKey:@"AT has failed to load splash.", NSLocalizedFailureReasonErrorKey:@"It took too long for TT to load splash."}];
[_backgroundImageView removeFromSuperview];
[self trackSplashAdLoadFailed:error];
} else {
[_window addSubview:_containerView];
[_window addSubview:_ttSplashView];
[self trackSplashAdLoaded:splashAd adExtra:nil];
}
}
- (void)splashAd:(BUSplashAdView *)splashAd didFailWithError:(NSError *)error {
[_backgroundImageView removeFromSuperview];
[_ttSplashView removeFromSuperview];
[_containerView removeFromSuperview];
[self trackSplashAdLoadFailed:error];
}
- (void)splashAdDidClick:(BUSplashAdView *)splashAd {
[self trackSplashAdClick];
}
- (void)splashAdDidClose:(BUSplashAdView *)splashAd {
[_containerView removeFromSuperview];
[_backgroundImageView removeFromSuperview];
[(UIView*)splashAd removeFromSuperview];
[self trackSplashAdClosed];
}
- (void)splashAdWillClose:(BUSplashAdView *)splashAd {
}
- (void)splashAdWillVisible:(BUSplashAdView *)splashAd {
[self trackSplashAdShow];
}
- (NSString *)networkUnitId {
return self.serverInfo[@"slot_id"];
}