菜单

横幅广告

1. 主要开发工作说明

1. 创建一个自定义Banner Adapter类,可继承NSObject,并遵循ATAdAdapter协议,建议以BannerAdapter结尾,类名需要配置到Taku后台的自定义广告平台;

2. 自定义adapter类必须实现方法说明如下:

  • 当SDK需要请求到配置自定义广告源时,会调用方法initWithNetworkCustomInfo:实例化adapter对象;
  • 请求自定义广告源广告会触发adapter的loadADWithInfo:方法调用;
  • 当需要展示自定义广告源广告的时候,会触发showBanner:方法调用。

具体方法说明如下:

抽象方法参数说明返回值作用是否必须
-(instancetype) initWithNetworkCustomInfo:(NSDictionary* )serverInfo localInfo:(NSDictionary* )localInfoserverInfo: 服务端配置的参数字典
localInfo: 本次加载传入的参数字典
instancetype用于初始化自定义Adapter
-(void) loadADWithInfo:(NSDictionary* )serverInfo localInfo:(NSDictionary* )localInfo completion:(void (^)(NSArrayserverInfo: 服务端配置的参数字典
localInfo: 本次加载传入的参数字典
void实现展示自定义广告平台加载广告的逻辑
+(void) showBanner:(ATBanner* )banner inView:(UIView* )view presentingViewController:(UIViewController* )viewController;banner:Taku SDK的Banner对象,可通过banner.customObject获取到您传入的自定义广告平台 SDKbanner 广告对象
view:Taku SDK内部定义的BannerView容器
viewController:外部通过presentingViewController属性传入的视图控制器
void用于处理广告平台加载成功回调中没有返回bannerAdView对象时,可通过该方法去添加bannerView

3. 回调方法说明如下: 需要自定义实现一个xxxCustomEvent类,继承ATBannerCustomEvent类,并通过这个类添加自定义广告平台对应开屏的回调代理,当广告平台有回调时,将对应事件调用ATBannerCustomEvent的方法回传给Taku SDK。

具体回调方法说明如下:

回调方法参数说明说明
-(void) trackBannerAdLoaded:(id)bannerView adExtra:(NSDictionary * )adExtrabannerView:可传入自定义广告平台 SDK 的bannerView对象 ,便于展示时获取
adExtra:拓展信息
广告加载成功时执行回调给开发者
-(void) trackBannerAdLoadFailed:(NSError* )errorerror:错误信息广告加载失败时执行回调给开发者
-(void) trackBannerAdClick-广告被点击时执行的回调给开发者
-(void) trackBannerAdClosed
-(void) bannerView:(ATBannerView* )bannerView didTapCloseButtonWithPlacementID:(NSString* )placementID extra:(NSDictionary* )extra
bannerView:bannerView对象
placementID:广告位id
extra:广告源的具体信息
广告点击关闭时执行回调给开发者

2. 具体集成说明及示例

2.1 实现广告加载的Adapter类

1. 创建一个自定义Banner Adapter类,可继承NSObject,建议以BannerAdapter结尾,类名需要配置到Taku后台的自定义广告平台;

2.自定义adapter类必须实现方法如下:

•实现initWithNetworkCustomInfo:实例化adapter对象,可以在这里进行广告SDK的相关初始化;

•实现广告加载时调用的loadADWithInfo:方法,触发广告SDK的广告请求;

•实现adReadyWithCustomObject:方法,用于告知Taku SDK当前是否有广告填充;

•实现showBanner:方法,当Taku SDK触发广告展示时,会调用此方法触发广告SDK的广告展示逻辑。

以下是集成示例,具体项目可参考 Demo 中 CustomAdapter中 的示例代码:

创建并实现TouTiaoBannerCustomAdapter类:

//TouTiaoBannerCustomAdapter.m
#import <AnyThinkBanner/AnyThinkBanner.h>

@interface TouTiaoBannerCustomAdapter()
@property(nonatomic, readonly) TouTiaoBannerCustomEvent *customEvent;
@end

@implementation TouTiaoBannerCustomAdapter

/// 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 *extraInfo = localInfo;
    CGSize adSize = [extraInfo[kATAdLoadingExtraBannerAdSizeKey] respondsToSelector:@selector(CGSizeValue)] ? [extraInfo[kATAdLoadingExtraBannerAdSizeKey] CGSizeValue] : CGSizeMake(320.0f, 50.0f);

    _customEvent = [[TouTiaoBannerCustomEvent alloc] initWithInfo:serverInfo localInfo:localInfo];
     //必须赋值
    _customEvent.requestCompletionBlock = completion;
    dispatch_async(dispatch_get_main_queue(), ^{
        BUSize *size = [BUSize sizeBy:[serverInfo[@"media_size"] integerValue]];

        self->_bannerView = [[BUNativeExpressBannerView alloc] initWithSlotID:serverInfo[@"slot_id"] rootViewController:[ATBannerCustomEvent rootViewControllerWithPlacementID:((ATPlacementModel*)serverInfo[kAdapterCustomInfoPlacementModelKey]).placementID requestID:serverInfo[kAdapterCustomInfoRequestIDKey]]
                             adSize:CGSizeMake(adSize.width, adSize.width * size.height / size.width) IsSupportDeepLink:YES ];
        self->_bannerView.frame = CGRectMake(.0f, .0f, adSize.width, adSize.width * size.height / size.width);
        self->_bannerView.delegate = self->_customEvent;
        [self->_bannerView loadAdData];
    });    
}

+(void) showBanner:(ATBanner*)banner inView:(UIView*)view presentingViewController:(UIViewController*)viewController {
    //展示banner
    ALAdView *bannerView = banner.bannerView;
    [bannerView render:banner.customObject];
}

2.2 实现广告回调的CustomEvent类

  需要自定义实现一个xxxCustomEvent类,继承ATBannerCustomEvent类,并通过这个类添加自定义广告平台对应开屏的回调代理,当广告平台有回调时,将对应事件调用ATBannerCustomEvent的方法回传给Taku SDK。

以下是集成示例,具体项目可参考 Demo 中 CustomAdapter中 的示例代码:

创建并实现TouTiaoBannerCustomEvent类:

以下为穿山甲Banner广告回调示例:

- (void)nativeExpressBannerAdViewDidLoad:(BUNativeExpressBannerView *)bannerAdView {
    NSLog(@"TouTiaoBannerCustomEvent::bannerAdViewDidLoad:WithAdmodel:");
    [self trackBannerAdLoaded:bannerAdView adExtra:nil];
}

- (void)nativeExpressBannerAdViewWillBecomVisible:(BUNativeExpressBannerView *)bannerAdView {
    NSLog(@"TouTiaoBannerCustomEvent::bannerAdViewDidBecomVisible:WithAdmodel:");
}

- (void)nativeExpressBannerAdViewDidClick:(BUNativeExpressBannerView *)bannerAdView {
    NSLog(@"TouTiaoBannerCustomEvent::bannerAdViewDidClick:WithAdmodel:");
    [self trackBannerAdClick];
}

- (void)nativeExpressBannerAdView:(BUNativeExpressBannerView *)bannerAdView didLoadFailWithError:(NSError *_Nullable)error {
    NSLog(@"%@",[NSString stringWithFormat:@"TouTiaoBannerCustomEvent::bannerAdView:didLoadFailWithError:%@",error]);
    [self handleLoadingFailure:error];
}

- (void)nativeExpressBannerAdView:(BUNativeExpressBannerView *)bannerAdView dislikeWithReason:(NSArray *_Nullable)filterwords {
    NSLog(@"TouTiaoBannerCustomEvent::bannerAdView:dislikeWithReason:");
//    [self.bannerView loadNextWithoutRefresh];
    if ([self.delegate respondsToSelector:@selector(bannerView:didTapCloseButtonWithPlacementID:extra:)]) {
        [self.delegate bannerView:self.bannerView didTapCloseButtonWithPlacementID:self.banner.placementModel.placementID extra:[self delegateExtra]];
    }
    [self trackBannerAdClosed];
}

- (NSString *)networkUnitId {
    return self.serverInfo[@"slot_id"];
}


上一个
开屏广告
下一个
原生广告
最近修改: 2025-09-03Powered by