菜单

开屏广告

1. 主要开发工作说明

  1. 创建一个自定义Splash Adapter类,可继承NSObject,并遵循ATAdAdapter协议,建议以SplashAdapter结尾,类名需要配置到Taku后台的自定义广告平台;
  2. 自定义Adapter类必须实现方法说明如下:
  • 当SDK需要请求到配置自定义广告源时,会调用方法initWithNetworkCustomInfo:实例化adapter对象;
  • 请求自定义广告源广告会触发adapter的loadADWithInfo:方法调用;
  • 当需要判断自定义广告源广告是否已经填充,会触发adReadyWithCustomObject:方法调用;
  • 当需要展示自定义广告源开屏广告的时候,会触发showSplash:方法调用。
    具体方法说明如下:
方法参数说明返回值作用是否
必须
- (instancetype)initWithNetworkCustomInfo:(NSDictionary*)serverInfo localInfo:(NSDictionary*)localInfoserverInfo: 服务端配置的参数字典
localInfo: 本次加载传入的参数字典
instancetype用于初始化自定义Adapter
- (void)loadADWithInfo:(NSDictionary*)serverInfo localInfo:(NSDictionary*)localInfo completion:(void (^)(NSArrayserverInfo: 服务端配置的参数字典 localInfo: 本次加载传入的参数字典void实现自定义广告平台加载开屏广告的逻辑。
+ (BOOL)adReadyWithCustomObject:(id)customObject info:(NSDictionary*)infocustomObject:自定义广告平台的实例对象
info:服务端配置的参数字典
BOOL用于判断自定义广告平台的开屏广告是否已经是准备完成的状态
+ (void)showSplash:(ATSplash *)splash localInfo:(NSDictionary *)localInfo delegate:(id)delegatesplash: 本次加载传入的对象
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 *)adExtrasplashAd:广告对象
adExtra:拓展信息
广告加载成功时执行回调给Taku SDK
-(void) trackSplashAdLoadFailed:(NSError*)errorerror:错误信息广告加载失败时执行回调给Taku SDK
-(void) trackSplashAdClick-广告被点击时执行的回调给Taku SDK
-(void) trackSplashAdShow-广告展示时执行的回调给Taku SDK
-(void) trackSplashAdClosed-广告被关闭时执行的回调给Taku SDK
-(void) trackSplashAdCountdownTime:(NSInteger)countdowncountdown:当前的倒计时时间实现了自定义按钮和倒计时相关参数,在倒计时开始后,回调当前的倒计时时间给Taku SDK

2. 具体集成说明及示例

2.1 实现广告加载的Adapter类

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];
}

2.2 实现广告回调的CustomEvent类

需要自定义实现一个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"];
}


上一个
插屏广告
下一个
横幅广告
最近修改: 2025-09-03Powered by