1. 创建一个自定义Banner Adapter类,可继承NSObject,并遵循ATAdAdapter协议,建议以BannerAdapter结尾,类名需要配置到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 | 实现展示自定义广告平台加载广告的逻辑 | 是 |
+(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 * )adExtra | bannerView:可传入自定义广告平台 SDK 的bannerView对象 ,便于展示时获取 adExtra:拓展信息 | 广告加载成功时执行回调给开发者 |
-(void) trackBannerAdLoadFailed:(NSError* )error | error:错误信息 | 广告加载失败时执行回调给开发者 |
-(void) trackBannerAdClick | - | 广告被点击时执行的回调给开发者 |
-(void) trackBannerAdClosed -(void) bannerView:(ATBannerView* )bannerView didTapCloseButtonWithPlacementID:(NSString* )placementID extra:(NSDictionary* )extra | bannerView:bannerView对象 placementID:广告位id extra:广告源的具体信息 | 广告点击关闭时执行回调给开发者 |
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];
}
需要自定义实现一个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"];
}