菜单

激励视频

1. 主要开发工作说明

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

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

  • 当SDK需要请求到配置自定义广告源时,会调用方法initWithNetworkCustomInfo:实例化adapter对象;
  • 请求自定义广告源广告会触发adapter的loadADWithInfo:方法调用;
  • 当需要判断自定义广告源广告是否已经填充,会触发adReadyWithCustomObject:方法调用;
  • 当需要展示自定义广告源广告的时候,会触发showRewardedVideo:方法调用。

具体方法说明如下:

抽象方法参数说明返回值作用是否
必须
-(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:自定义广告平台 SDK 的广告实例对象
info:服务端配置的参数字典
BOOL用于判断自定义广告平台的激励视频广告是否已经是准备完成的状态
+(void) showRewardedVideo:(ATRewardedVideo*)rewardedVideo inViewController:(UIViewController*)viewController delegate:(idrewardedVideo:激励视频对象
viewController:当前视图控制器
delegate:广告对象代理
void实现展示自定义广告平台激励视频的逻辑

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

具体回调方法说明如下:

回调方法参数说明说明
-(void) trackRewardedVideoAdLoaded:(id)adObject adExtra:(NSDictionary * )adExtraadObject:激励视频广告对象 adExtra:拓展信息广告加载成功时执行回调给开发者
-(void) trackRewardedVideoAdLoadFailed:(NSError* )errorerror:错误信息广告加载失败时执行回调给开发者
self.customEventMetaDataDidLoadedBlock();-广告素材内容加载成功回调(自定义广告平台激励视频代理没有素材回调时可不实现)
-(void) trackRewardedVideoAdShow
-(void) trackRewardedVideoAdVideoStart
-广告播放开始时执行回调给开发者
-(void) trackRewardedVideoAdVideoEnd-广告播放结束时执行回调给开发者
-(void) trackRewardedVideoAdPlayEventWithError:(NSError* )errorerror:播放失败信息广告播放失败时执行回调给开发者
-(void) trackRewardedVideoAdClick-广告被点击时执行的回调给开发者
-(void) trackRewardedVideoAdCloseRewarded:(BOOL)rewardedrewarded:是否发放奖励广告页面关闭时执行回调给开发者
-(void) trackRewardedVideoAdRewarded-给用户下发激励时执行回调给开发者


2. 具体集成说明及示例

2.1 实现广告加载的Adapter类

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

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

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

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

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

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

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

创建并实现TTRewardedVideoCustomAdapter类:

//TouTiaoRewardedVideoAdapter.h

#import <AnyThinkRewardedVideo/AnyThinkRewardedVideo.h>
@interface TTRewardedVideoCustomAdapter : NSObject 
@property (nonatomic,copy) void (^metaDataDidLoadedBlock)(void); 
@end
//TouTiaoRewardedVideoAdapter.m
#import <AnyThinkRewardedVideo/AnyThinkRewardedVideo.h>

@interface TTRewardedVideoCustomAdapter()
@property(nonatomic, readonly) TouTiaoRewardedVideoCustomEvent *customEvent;
@end

@implementation TTRewardedVideoCustomAdapter

/// 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 = [[TouTiaoRewardedVideoCustomEvent alloc] initWithInfo:serverInfo localInfo:localInfo];
     //必须赋值
    _customEvent.requestCompletionBlock = completion;

    BURewardedVideoModel *model = [[BURewardedVideoModel alloc] init];
    NSDictionary *extra = localInfo;
    if (extra[kATAdLoadingExtraUserIDKey] != nil) {
        model.userId = extra[kATAdLoadingExtraUserIDKey];
    }
    if (extra[kATAdLoadingExtraMediaExtraKey] != nil) {
        model.extra = extra[kATAdLoadingExtraMediaExtraKey];
    }

    _expressRvAd = [[BUNativeExpressRewardedVideoAd alloc] initWithSlotID:serverInfo[@"slot_id"] rewardedVideoModel:model];
    _expressRvAd.rewardedVideoModel = model;
    _expressRvAd.delegate = _customEvent;
    [_expressRvAd loadAdData];
}

/// Check whether the ad source is ready
/// - Parameters:
///   - customObject: ad source object
///   - info: info
+(BOOL) adReadyWithCustomObject:(id)customObject info:(NSDictionary*)info {
    return ((BUNativeExpressRewardedVideoAd *)customObject).adValid;
}


+(void) showRewardedVideo:(ATRewardedVideo*)rewardedVideo inViewController:(UIViewController*)viewController delegate:(id)delegate {
    TouTiaoRewardedVideoCustomEvent *customEvent = (TouTiaoRewardedVideoCustomEvent*)rewardedVideo.customEvent;
    customEvent.delegate = delegate;
    [((BUNativeExpressRewardedVideoAd *)rewardedVideo.customObject) showAdFromRootViewController:viewController];
}

2.2 实现广告回调的CustomEvent类

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

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

创建并实现TouTiaoRewardedVideoCustomEvent类:

@interface TouTiaoRewardedVideoCustomEvent : ATRewardedVideoCustomEvent

@end

- (void)nativeExpressRewardedVideoAdDidLoad:(BUNativeExpressRewardedVideoAd *)rewardedVideoAd {
    NSLog(@"TouTiaoRewardedVideoCustomEvent::nativeExpressRewardedVideoAdDidLoad:");
    [self trackRewardedVideoAdLoaded:rewardedVideoAd adExtra:nil];
}

- (void)nativeExpressRewardedVideoAd:(BUNativeExpressRewardedVideoAd *)rewardedVideoAd didFailWithError:(NSError *_Nullable)error {
    NSLog(@"%@",[NSString stringWithFormat:@"TouTiaoRewardedVideoCustomEvent::nativeExpressRewardedVideoAdDidLoad:didFailWithError:%@",error]);
    if (!_isFailed) {
        [self trackRewardedVideoAdLoadFailed:error];
        _isFailed = true;
    }
}

- (void)nativeExpressRewardedVideoAdDidDownLoadVideo:(BUNativeExpressRewardedVideoAd *)rewardedVideoAd {
    NSLog(@"TouTiaoRewardedVideoCustomEvent::nativeExpressRewardedVideoAdDidDownLoadVideo:");
}

- (void)nativeExpressRewardedVideoAdViewRenderSuccess:(BUNativeExpressRewardedVideoAd *)rewardedVideoAd {
    NSLog(@"TouTiaoRewardedVideoCustomEvent::nativeExpressRewardedVideoAdViewRenderSuccess:");
}

- (void)nativeExpressRewardedVideoAdViewRenderFail:(BUNativeExpressRewardedVideoAd *)rewardedVideoAd error:(NSError *_Nullable)error {
    NSLog(@"%@",[NSString stringWithFormat:@"TouTiaoRewardedVideoCustomEvent::nativeExpressRewardedVideoAdViewRenderFail:error:%@",error]);
    if (!_isFailed) {
        [self trackRewardedVideoAdLoadFailed:error];
        _isFailed = true;
    }
}

- (void)nativeExpressRewardedVideoAdWillVisible:(BUNativeExpressRewardedVideoAd *)rewardedVideoAd {
    NSLog(@"TouTiaoRewardedVideoCustomEvent::nativeExpressRewardedVideoAdWillVisible:");
}

- (void)nativeExpressRewardedVideoAdDidVisible:(BUNativeExpressRewardedVideoAd *)rewardedVideoAd {
    NSLog(@"TouTiaoRewardedVideoCustomEvent::nativeExpressRewardedVideoAdDidVisible:");
    [self trackRewardedVideoAdShow];
    [self trackRewardedVideoAdVideoStart];
}

- (void)nativeExpressRewardedVideoAdWillClose:(BUNativeExpressRewardedVideoAd *)rewardedVideoAd {
    NSLog(@"TouTiaoRewardedVideoCustomEvent::nativeExpressRewardedVideoAdWillClose:");
}

- (void)nativeExpressRewardedVideoAdDidClose:(BUNativeExpressRewardedVideoAd *)rewardedVideoAd {
    NSLog(@"TouTiaoRewardedVideoCustomEvent::nativeExpressRewardedVideoAdDidClose:");
    [self trackRewardedVideoAdCloseRewarded:self.rewardGranted];
}

- (void)nativeExpressRewardedVideoAdDidClick:(BUNativeExpressRewardedVideoAd *)rewardedVideoAd {
    NSLog(@"TouTiaoRewardedVideoCustomEvent::nativeExpressRewardedVideoAdDidClick:");
    [self trackRewardedVideoAdClick];
}

- (void)nativeExpressRewardedVideoAdDidClickSkip:(BUNativeExpressRewardedVideoAd *)rewardedVideoAd {
    NSLog(@"TouTiaoRewardedVideoCustomEvent::nativeExpressRewardedVideoAdDidClickSkip:");
}

- (void)nativeExpressRewardedVideoAdDidPlayFinish:(BUNativeExpressRewardedVideoAd *)rewardedVideoAd didFailWithError:(NSError *_Nullable)error {
    NSLog(@"TouTiaoRewardedVideoCustomEvent::nativeExpressRewardedVideoAdDidPlayFinish:didFailWithError:");
    if (error == nil) {
        [self trackRewardedVideoAdVideoEnd];
    } else {
        [self trackRewardedVideoAdPlayEventWithError:error];
    }
}

- (void)nativeExpressRewardedVideoAdServerRewardDidSucceed:(BUNativeExpressRewardedVideoAd *)rewardedVideoAd verify:(BOOL)verify {
    NSLog(@"TouTiaoRewardedVideoCustomEvent::nativeExpressRewardedVideoAdServerRewardDidSucceed:verify:");
    [self trackRewardedVideoAdRewarded];
}

- (void)nativeExpressRewardedVideoAdServerRewardDidFail:(BUNativeExpressRewardedVideoAd *)rewardedVideoAd {
    NSLog(@"TouTiaoRewardedVideoCustomEvent::nativeExpressRewardedVideoAdServerRewardDidFail:");
    self.rewardGranted = NO;
}

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

注意:在给用户下发激励回调前需要设置rewardGranted为YES,用于标识是否已经下发奖励

上一个
基本流程
下一个
插屏广告
最近修改: 2025-09-03Powered by