激励视频广告
简介
激励视频广告是一种全新的广告形式,用户可选择观看视频广告以换取有价物,例如虚拟货币、应用内物品和独家内容等等;这类广告一般有一定长度,部分可支持跳过(具体支持视不同adn而定)。
注意事项
- Cloooud是通过广告位ID发起广告请求的,切记不要使用混淆
- 在广告接入前需要明确各adn对应Cloooud广告样式情况,以确保正确完成广告接入,避免由于广告类型不匹配导致接入报错等情况的发生
- 由于各广告平台对于包名校验规则不同,需确保在穿山甲媒体平台填写的包名符合各adn平台规范,避免由于包名校验不匹配导致的无广告返回情况的产生
- 广告请求时机,建议在收到config回调后发起广告请求
- 当config回调一直失败时,建议首先明确appid及广告位id是否赋值正确,是否有多余空格,是否是网络不文档导致的超时等,当排查后无法定位问题时,建议通过抓包将config字段下的加密内容提供过来,我们协助定位
-
部分Adn广告并无点击回调,开发者可根据属性hasClickCallback来判断对应当前展示广告是否有点击回调,从而在回调中进行个性化操作
-
部分Adn广告并无跳过回调,开发者可根据属性hasSkipCallback来判断对应当前展示广告是否有点击回调,从而在回调中进行个性化操作
-
为了保证播放流畅,建议在收到rewardedVideoAdDidDownLoadVideo:之后进行广告展示,广告展示前可通过isReady字段来判断当前广告是否可用
-
当广告无法展示时,建议在展示失败rewardedVideoAdDidShowFailed:回调内输出对应的error错误码明确展示失败的原因,如果是穿山甲广告触发此回调,可优先检查是否调整了系统时间导致触发此场景
-
如若针对展示失败有重试机制,建议只重试一次即可,避免无限重试引发死循环场景
-
当展示失败/回调监听不执行时,建议检查是否有广告对象被覆盖或者被提前释放的场景导致,每次发次广告请求时,需要重新创建新的广告来调用广告请求方法
-
为了保证获取数据的准确性, 建议在展示成功后rewardedVideoAdDidVisible:再获取广告相关信息(通过调用[self.rewardedVideoAd getPreEcpm];来获取),如对应的广告平台,代码位ID,cpm等
-
视频是否静音由接口mutedIfCan控制,默认为NO,对YLH、MTG、KS生效
- 开启Cloooud的服务端验证功能后,请不要在第三方ADN重复配置这些代码位的服务端验证,否则可能会导致奖励发放出现问题;
- 穿山甲的多阶奖励发放目前仅adn形式支持
- 当rewardVerify返回为false时,对应的errorCode为50001/50002,可提供对应的广告位ID及trans_id(交易ID)及发生的具体时间反馈给技术支持同学进行排查。错误码获取可参照如下代码或者通过抓包查询reward字段下返回的错误码来获取
- (void)rewardedVideoAdServerRewardDidSucceed:(CloooudRewardedVideoAd *)rewardedVideoAd rewardInfo:(CloooudAdapterRewardAdInfo *)rewardInfo verify:(BOOL)verify {
CloooudD_LogCallback(@"%@----errorcode:%@----errorMsg:%@", __func__,
rewardInfo.customData[CloooudAdapterRewardAdCustomDataErrorCodeKey],rewardInfo.customData[CloooudAdapterRewardAdCustomDataErrorMsgKey]
}
接口说明
@interface CloooudRewardedVideoAd : CloooudBaseAd
- (instancetype)initWithAdUnitID:(NSString *)unitID;
/// 激励广告的自定义数据
@property (nonatomic, strong) CloooudRewardedVideoModel *rewardedVideoModel;
@property (nonatomic, weak) id<CloooudRewardedVideoAdDelegate> delegate;
/// 再看一次的回调代理;在触发"再看一次"后,展示回调后的一些回调会依此触发,通过该标识判断当次回调是否属于再看一次的回调。支持的adn:Pangle/KS;
/// 再看一次可触发的会滴:visiable/click/clickSkip/playFinesh/rewardedVideoAdServerRewardDidSucceed
@property (nonatomic, weak) id<CloooudRewardedVideoAdDelegate> rewardPlayAgainDelegate;
/**
optional
设定是否静音播放视频,YES = 静音,NO = 非静音
PS:
①仅广点通支持设定mute
②仅适用于视频播放器设定生效
重点:请在loadAdData前设置,否则不生效
*/
@property (nonatomic, assign) BOOL mutedIfCan;
/// 是否已经准备广告展示,理论上在广告加载回调后即为YES,但受一些因素的影响(例如广告失效),可能为NO。建议在广告展示前调用该方法进行是否可以展示
@property (nonatomic, assign, readonly) BOOL isReady;
/// 展示广告
/// @param viewController 跳转控制器,必传
- (BOOL)showAdFromRootViewController:(UIViewController *)viewController;
/// 展示广告
/// @param viewController 跳转控制器,必传
/// @param extraInfos 扩展信息,可选,与adapter及ADN是否实现有关,字段参见CloooudADSDKConst.h中全屏视频、激励视频展示扩展部分
- (BOOL)showAdFromRootViewController:(UIViewController *)viewController extraInfos:(NSDictionary *_Nullable)extraInfos;
/// 广告的扩展信息,可能为nil
- (NSDictionary *_Nullable)extraData;
/// 填充后可调用,获取广告中的extra信息。目前只支持穿山甲,并且只支持获取coupon, live_room, product信息。
- (nullable NSDictionary *)getMediaExtraInfo;
@end
监听回调
/// 激励视频广告代理协议
@protocol CloooudRewardedVideoAdDelegate <NSObject>
@optional
/// 广告加载成功回调
/// @param rewardedVideoAd 广告管理对象
- (void)rewardedVideoAdDidLoad:(CloooudRewardedVideoAd *)rewardedVideoAd;
/// 广告加载失败回调
/// @param rewardedVideoAd 广告管理对象
/// @param error 错误信息
- (void)rewardedVideoAd:(CloooudRewardedVideoAd *)rewardedVideoAd didFailWithError:(NSError *_Nullable)error;
/// 广告已加载视频素材回调
/// @param rewardedVideoAd 广告管理对象
- (void)rewardedVideoAdDidDownLoadVideo:(CloooudRewardedVideoAd *)rewardedVideoAd;
/// 广告展示回调
/// @param rewardedVideoAd 广告管理对象
- (void)rewardedVideoAdDidVisible:(CloooudRewardedVideoAd *)rewardedVideoAd;
/// 广告展示失败回调
/// @param rewardedVideoAd 广告管理对象
/// @param error 展示失败的原因
- (void)rewardedVideoAdDidShowFailed:(CloooudRewardedVideoAd *_Nonnull)rewardedVideoAd error:(NSError *_Nonnull)error;
/// 广告点击详情事件回调
/// @param rewardedVideoAd 广告管理对象
- (void)rewardedVideoAdDidClick:(CloooudRewardedVideoAd *)rewardedVideoAd;
/// 广告点击跳过事件回调
/// @param rewardedVideoAd 广告管理对象
- (void)rewardedVideoAdDidSkip:(CloooudRewardedVideoAd *)rewardedVideoAd;
/// 广告关闭事件回调
/// @param rewardedVideoAd 广告管理对象
- (void)rewardedVideoAdDidClose:(CloooudRewardedVideoAd *)rewardedVideoAd;
/// 请求的服务器验证成功包括C2C和S2S方法回调
/// @param rewardedVideoAd 广告管理对象
/// @param rewardInfo 奖励发放验证信息
/// @param verify 是否验证通过
- (void)rewardedVideoAdServerRewardDidSucceed:(CloooudRewardedVideoAd *)rewardedVideoAd rewardInfo:(CloooudAdapterRewardAdInfo *_Nullable)rewardInfo verify:(BOOL)verify;
/// 广告视频播放完成或者出错回调
/// @param rewardedVideoAd 广告管理对象
/// @param error 播放出错时的信息,播放完成时为空
- (void)rewardedVideoAd:(CloooudRewardedVideoAd *)rewardedVideoAd didPlayFinishWithError:(NSError *_Nullable)error;
@end
调用示例
// 广告加载
// gdt和穿山甲激励服务端校验需要赋值CloooudRewardedVideoModel
CloooudRewardedVideoModel *model = [[CloooudRewardedVideoModel alloc] init];
model.userId = @"123";
self.rewardedVideoAd = [[CloooudRewardedVideoAd alloc] initWithAdUnitID:adUnitID rewardedVideoModel:model];
// 如果需要场景,请设置该属性
self.rewardedVideoAd.scenarioID = @"xxx";
self.rewardedVideoAd.delegate = self;
self.rewardedVideoAd.mutedIfCan = YES; //静音
// 该逻辑用于判断配置是否拉取成功。如果拉取成功,可直接加载广告,否则需要调用addConfigLoadSuccessObserver:withAction,传入block并在block中调用加载广告。SDK内部会在配置拉取成功后调用传入的block
if([CloooudAdSDKManager configDidLoad]) {
//当前配置拉取成功,直接loadAdData
[self.rewardedVideoAd loadAdData];
} else {
//当前配置未拉取成功,在成功之后会调用该callback
[CloooudAdSDKManager addConfigLoadSuccessObserver:self withAction:^(id _Nonnull observer) {
[observer.rewardedVideoAd loadAdData];
}];
}
- (void)showRewardVideoAd {
// 广告展示,请在收到download回调后进行展示调用
if (self.rewardedVideoAd.isReady) {
[self.rewardedVideoAd showAdFromRootViewController:self];
// !!!如果需要传入一定的场景来用于区别奖励场景,请使用该接口(一般游戏会用到),目前场景赋值只有pangle SDK支持
// SDK定义的场景(仅支持激励视频)eg:CloooudRitSceneType_home_try_props(观看激励广告试用皮肤、道具,关卡,技能等)
// NSDictionary *sceneDicsBySDK = @{CloooudShowExtroInfoKeySceneType:@(CloooudRitSceneType_home_try_props)};
//// 自定义场景,只有自定义(CloooudShowExtroInfoKeySceneType=CloooudRitSceneType_custom),需要传入CloooudShowExtroInfoKeySceneDescription
// NSDictionary *sceneDicsByCustom = @{
// CloooudShowExtroInfoKeySceneType:@(CloooudRitSceneType_custom),
// CloooudShowExtroInfoKeySceneDescription:@"custom scene description"
// };
// [self.rewardedVideoAd showAdFromRootViewController:self extroInfos:sceneDicsBySDK];
}
// 回调监听
/// 广告加载成功回调
/// @param rewardedVideoAd 广告管理对象
- (void)rewardedVideoAdDidLoad:(CloooudRewardedVideoAd *_Nonnull)rewardedVideoAd {
CloooudD_Log(@"%s",__func__);
}
/// 广告加载失败回调
/// @param rewardedVideoAd 广告管理对象
/// @param error 错误信息
- (void)rewardedVideoAd:(CloooudRewardedVideoAd *_Nonnull)rewardedVideoAd didFailWithError:(NSError *_Nullable)error {
CloooudD_Log(@"%s",__func__);
CloooudD_Log(@"error:%@",error);
}
/// 广告已加载视频素材回调
/// @param rewardedVideoAd 广告管理对象
- (void)rewardedVideoAdDidDownLoadVideo:(CloooudRewardedVideoAd *_Nonnull)rewardedVideoAd {
CloooudD_Log(@"%s",__func__);
}
/// 广告展示回调
/// @param rewardedVideoAd 广告管理对象
- (void)rewardedVideoAdDidVisible:(CloooudRewardedVideoAd *_Nonnull)rewardedVideoAd {
CloooudD_Log2(@"ecpm:%@",[self.rewardedVideoAd getPreEcpm]);
CloooudD_Log2(@"platformID:%ld",(long)[self.rewardedVideoAd getAdNetworkPlaformId]);
CloooudD_Log2(@"ritID:%@",[self.rewardedVideoAd getAdNetworkRitId]);
CloooudD_Log(@"%s",__func__);
}
/// 广告展示失败回调
/// @param rewardedVideoAd 广告管理对象
/// @param error 展示失败的原因
- (void)rewardedVideoAdDidShowFailed:(CloooudRewardedVideoAd *_Nonnull)rewardedVideoAd error:(NSError *_Nonnull)error {
CloooudD_LogCallback(@"%s", __func__);
CloooudD_Log(@"Ad show fail:%@", error);
}
/// 广告关闭事件回调
/// @param rewardedVideoAd 广告管理对象
- (void)rewardedVideoAdDidClose:(CloooudRewardedVideoAd *_Nonnull)rewardedVideoAd {
CloooudD_Log(@"%s",__func__);
}
/// 广告点击详情事件回调
/// @param rewardedVideoAd 广告管理对象
- (void)rewardedVideoAdDidClick:(CloooudRewardedVideoAd *_Nonnull)rewardedVideoAd {
CloooudD_Log(@"%s",__func__);
}
/// 请求的服务器验证成功包括C2C和S2S方法回调
/// @param rewardedVideoAd 广告管理对象
/// @param rewardInfo 奖励发放验证信息
/// @param verify 是否验证通过
- (void)rewardedVideoAdServerRewardDidSucceed:(CloooudRewardedVideoAd *)rewardedVideoAd rewardInfo:(CloooudAdapterRewardAdInfo *)rewardInfo verify:(BOOL)verify {
CloooudD_LogCallback(@"%s----platformID:%ld----rewardName:%@----rewardAmount:%ld----tradeId:%@", __func__,
[self.rewardedVideoAd getAdNetworkPlaformId],
rewardInfo.rewardName,
rewardInfo.rewardAmount,
rewardInfo.tradeId);
}
注意
SDK展示失败回调(rewardedVideoAdDidShowFailed: error:),主要针对以下几种情况:
- 无可用广告,错误码:40052
- 三方adn返回的展示失败,错误码:具体由三方而定
ritScene(代码位场景)
- 适用Adn: 穿山甲
- 使用说明:如果需要传入一定的场景来用于区别看广告场景,请使用该接口(一般游戏会用到),目前场景赋值只有pangle SDK支持
接口说明
// 展示额外参数的key:CloooudShowExtroInfoKey
static NSString * CloooudShowExtroInfoKeySceneType = @"CloooudShowExtroInfoKeySceneType"; // type of scene, only used for pangle SDK now.And the value of key see CloooudRitSceneType CloooudRitSceneType
static NSString * CloooudShowExtroInfoKeySceneDescription = @"CloooudShowExtroInfoKeySceneDescription"; // scene description, the description defined by the developer, which needs to be assigned when CloooudShowExtroInfoKeySceneType = 0
CloooudRitSceneType_custom = 0, //custom
CloooudRitSceneType_home_open_bonus = 1, //“home_open_bonus”, Login/open rewards (login, sign-in,offline rewards doubling, etc.)
CloooudRitSceneType_home_svip_bonus = 2, //"home_svip_bonus", Special privileges (VIP privileges,daily rewards, etc.)
CloooudRitSceneType_home_get_props = 3, //"home_get_props", Watch rewarded video ad to gain skin,props, levels, skills, etc
CloooudRitSceneType_home_try_props = 4, //"home_try_props", Watch rewarded video ad to try outskins, props, levels, skills, etc
CloooudRitSceneType_home_get_bonus = 5, //"home_get_bonus", Watch rewarded video ad to get goldCOINS, diamonds, etc
CloooudRitSceneType_home_gift_bonus = 6, //"home_gift_bonus", Sweepstakes, turntables, gift boxes, etc
CloooudRitSceneType_game_start_bonus = 7, //"game_start_bonus", Before the opening to obtain physicalstrength, opening to strengthen, opening buff, task props
CloooudRitSceneType_game_reduce_waiting = 8, //"geme_reduce_waiting", Reduce wait and cooldown on skillCD, building CD, quest CD, etc
CloooudRitSceneType_game_more_opportunities = 9, //"game_more_opportunities", More chances (resurrect death,extra game time, decrypt tips, etc.)
CloooudRitSceneType_game_finish_rewards = 10, //"game_finish_rewards", Settlement multiple times/extrabonus (completion of chapter, victory over boss, firstplace, etc.)
CloooudRitSceneType_game_gift_bonus = 11, //"game_gift_bonus", The game dropped treasure box,treasures and so on
使用方式
// !!!如果需要传入一定的场景来用于区别奖励场景,请使用该接口(一般游戏会用到),目前场景赋值只有CSJ SDK支持
// SDK定义的场景(仅支持激励视频)eg:CloooudRitSceneType_home_try_props(观看激励广告试用皮肤、道具,关卡,技能等)
NSDictionary *sceneDicsBySDK = @{CloooudShowExtroInfoKeySceneType:@(CloooudRitSceneType_home_try_props)};
//// 自定义场景,只有自定义(CloooudShowExtroInfoKeySceneType=CloooudRitSceneType_custom),需要传入CloooudShowExtroInfoKeySceneDescription
// NSDictionary *sceneDicsByCustom = @{
// CloooudShowExtroInfoKeySceneType:@(CloooudRitSceneType_custom),
// CloooudShowExtroInfoKeySceneDescription:@"custom scene description"
// };
[self.rewardedVideoAd showAdFromRootViewController:self extroInfos:sceneDicsBySDK];
注意:不需要使用ritScene的请使用showAdFromRootViewController接口进行展示。
代码位维度服务端奖励校验
目前支持该功能的ADN:CSJ、GDT、Admob、Sigmob、Mintegral、Baidu、KS
当选择需要服务端验证时,开发者需要按照各ADN要求进行接口开发,并在ADN平台上做相应配置。
服务端回调是指在用户看完激励视频达到奖励条件时,对应广告的ADN服务端会向开发者服务端发送一个验证请求,同时客户端会给出rewardedVideoAdServerRewardDidSucceed:info:verify:回调,开发者根据回调进行奖励发放。
注意:
- GDT在满足激励条件时会触发此回调,与是否选择服务端验证以及服务端验证是否成功无关。若选择了服务端验证,可以通过CloooudAdapterRewardAdInfo中的tradeId属性获取此次交易的transId.
- GDT在V4.12.3+、KS在V3.3.9.1支持该功能
相关核心类
- CloooudRewardedVideoModel
使用服务端奖励验证时需要在初始化广告对象时,对该类进行赋值。其中,有些属性是针对gdt可能不生效的。
// 开发者提供给Cloooud和ADN的奖励信息,适用于ADN的服务端验证和Cloooud的S2S验证
@interface CloooudRewardedVideoModel : NSObject
// 可选,三方用户ID。主要用于奖励发放,是服务器到服务器的回调传递参数。在非服务器回调模式下,当视频播放结束时,它也将被透传。是否有效依赖于adapter和adn。
@property (nonatomic, copy) NSString *userId;
// 可选,奖励名称。是否有效依赖于adapter和adn。
@property (nonatomic, copy) NSString *rewardName;
// 可选,奖励金额。是否有效依赖于adapter和adn。
@property (nonatomic, assign) NSInteger rewardAmount;
// 可选,可序列化字符串。是否有效依赖于adapter和adn。
@property (nonatomic, copy) NSString *extra;
@end
该属性作为激励视频达到奖励条件(并不一定是服务端验证)后的奖励信息,并不是所有Adn都有该信息。
- CloooudAdapterRewardAdInfo
注意:当GDT开启服务端验证后,该信息会返回tradeId属性代表取此次交易的transId
/// 验证失败的原因----string
extern NSString *const CloooudAdapterRewardAdCustomDataReasonKey;
/// 无法完成验证的错误码----number
extern NSString *const CloooudAdapterRewardAdCustomDataErrorCodeKey;
/// 无法完成验证的错误原因----string,包括网络错误、服务端无响应、服务端无法验证等
extern NSString *const CloooudAdapterRewardAdCustomDataErrorMsgKey;
/// 奖励类型,0:基础奖励 1:进阶奖励-互动 2:进阶奖励-超过30s的视频播放完成----number
/// 目前支持返回该字段的adn:csj
/// @warning: Cloooud的S2S的验证暂不支持
extern NSString *const CloooudAdapterRewardAdCustomDataRewardTypeKey;
/// 建议奖励百分比, 基础奖励为1,进阶奖励为0.0 ~ 1.0,开发者自行换算----number
/// 目前支持返回该字段的adn:csj
/// @warning: Cloooud的S2S的验证暂不支持
extern NSString *const CloooudAdapterRewardAdCustomDataRewardProposeKey;
/// 激励视频奖励信息,适用于ADN的奖励验证和Cloooud的S2S奖励验证
@interface CloooudAdapterRewardAdInfo : NSObject
/// adn定义的奖励id
@property (nonatomic, copy, nullable) NSString *rewardId;
/// 发放奖励的名称
@property (nonatomic, copy, nullable) NSString *rewardName;
/// 发放奖励的金额
@property (nonatomic, assign) NSInteger rewardAmount;
/// 交易的唯一标识
@property (nonatomic, copy, nullable) NSString *tradeId;
/// 是否验证通过
@property (nonatomic, assign) BOOL verify;
/// 验证奖励发放的媒体名称,官方支持的ADN名称详见`CloooudAdnType`注释部分,自定义ADN名称同平台配置
@property (nonatomic, copy, nullable) NSString *adnName;
/// 其他数据信息,包括但不限于错误信息,固定字段定义见文件上方
@property (nonatomic, copy, nullable) NSDictionary *customData;
/// 是否是通过Cloooud的S2S的验证
- (BOOL)verifyByCloooudS2S;
@end
回调说明
- (void)rewardedVideoAdServerRewardDidSucceed:(CloooudRewardedVideoAd *)rewardedVideoAd rewardInfo:(CloooudAdapterRewardAdInfo *)rewardInfo verify:(BOOL)verify {
CloooudD_LogCallback(@"%s----platformID:%ld----rewardName:%@----rewardAmount:%ld----tradeId:%@", __func__,
[self.rewardedVideoAd getAdNetworkPlaformId],
rewardInfo.rewardName,
rewardInfo.rewardAmount,
rewardInfo.tradeId);
}
广告位维度服务器奖励校验
开发者需在Cloooud平台的激励视频广告位中开启服务器激励功能,并设置回调URL地址,详见平台;
开发者可以在激励视频广告加载中通过CloooudRewardedVideoModel对象配置自定义参数,自定义参数将传递给开发者服务器;
当激励视频播放完成后,Cloooud将通过回调URL地址通知到开发者服务器,由开发者自行判断是否下发奖励;
最终结果将通过如下接口回调到给移动端开发者,代码如下
- (void)rewardedVideoAdServerRewardDidSucceed:(CloooudRewardedVideoAd *)rewardedVideoAd rewardInfo:(CloooudAdapterRewardAdInfo *)rewardInfo verify:(BOOL)verify {
CloooudD_LogCallback(@"%s", __func__);
CloooudD_LogCallback(@"%s----platform:%@----rewardName:%@----rewardAmount:%ld----tradeId:%@",
__func__,
[self.rewardedVideoAd getShowEcpmInfo].adnName,
rewardInfo.rewardName,
rewardInfo.rewardAmount,
rewardInfo.tradeId);
// 是否是通过Cloooud的S2S服务完成验证的
BOOL byCloooud = rewardInfo.verifyByCloooudS2S;
if (byCloooud && !verify) {
// 通过Cloooud但是没有通过验证时,有可能是因为网络问题或者S2S服务异常导致,此时开发者可通过错误信息进行判断,如40001/40002/50001/50002
NSNumber *errorCode = rewardInfo.customData[CloooudAdapterRewardAdCustomDataErrorCodeKey];
NSString *errorMsg = rewardInfo.customData[CloooudAdapterRewardAdCustomDataErrorMsgKey];
CloooudD_LogCallback(@"verify by Cloooud but failed, error info is (%@)%@", errorCode, errorMsg);
}
}
“再看一次”功能
支持Adn:CSJ(穿山甲) “再看一次”功能为一次激励视频播放完成后,触发再看一次视图,用户可以选择点击“再看一次”继续观看广告,也可以选择结束该次广告。当选择继续观看时,会有后续的广告回调。 需要在adn平台配置该功能
调用示例
//optional
/// 当使用穿山甲激励视频"再看一次"时用于区分
@property (nonatomic, strong) CloooudDRewardedVideoAgainDelegateObj *rewardedVideoAgainDelegateObj;
// 如果waterfall有配置穿山甲激励视频“再看一次”功能代码位需设置
self.rewardedVideoAd.rewardPlayAgainDelegate = self.rewardedVideoAgainDelegateObj;
// 实现“再看一次”代理
@implementation CloooudDRewardedVideoAgainDelegateObj
#pragma mark - <---CloooudRewardedVideoAdDelegate--->
/**
This method is called when video ad slot has been shown.
*/
- (void)rewardedVideoAdDidVisible:(CloooudRewardedVideoAd *_Nonnull)rewardedVideoAd {
CloooudD_LogCallback(@"%s", __func__);
CloooudD_Log(@"再看一次触发的回调。。。");
}
/**
This method is called when video ad show API is called failed.
*/
- (void)rewardedVideoAdDidShowFailed:(CloooudRewardedVideoAd *_Nonnull)rewardedVideoAd error:(NSError *_Nonnull)error {
CloooudD_LogCallback(@"%s", __func__);
CloooudD_Log(@"Ad show fail:%@", error);
CloooudD_Log(@"再看一次触发的回调。。。");
}
/**
This method is called when video ad is clicked.
*/
- (void)rewardedVideoAdDidClick:(CloooudRewardedVideoAd *_Nonnull)rewardedVideoAd {
CloooudD_LogCallback(@"%s", __func__);
CloooudD_Log(@"再看一次触发的回调。。。");
}
- (void)rewardedVideoAdDidSkip:(CloooudRewardedVideoAd *)rewardedVideoAd {
CloooudD_LogCallback(@"%s", __func__);
CloooudD_Log(@"再看一次触发的回调。。。");
}
/**
Server verification which is requested asynchronously is succeeded.include C2C and S2S methods .
@param verify :return YES when return value is 2000.
*/
- (void)rewardedVideoAdServerRewardDidSucceed:(CloooudRewardedVideoAd *_Nonnull)rewardedVideoAd verify:(BOOL)verify {
CloooudD_LogCallback(@"%s", __func__);
CloooudD_Log(@"再看一次触发的回调。。。");
}
/**
This method is called when video ad play completed or an error occurred.
@param error : the reason of error
*/
- (void)rewardedVideoAdDidPlayFinish:(CloooudRewardedVideoAd * _Nonnull)rewardedVideoAd didFailWithError:(NSError *_Nullable)error {
CloooudD_LogCallback(@"%s", __func__);
CloooudD_Log(@"再看一次触发的回调。。。");
}
- (void)rewardedVideoAdServerRewardDidSucceed:(CloooudRewardedVideoAd *)rewardedVideoAd rewardInfo:(CloooudAdapterRewardAdInfo *)rewardInfo verify:(BOOL)verify {
CloooudD_LogCallback(@"%s----platformID:%ld----rewardName:%@----rewardAmount:%ld----tradeId:%@",
__func__,
[rewardedVideoAd getAdNetworkPlaformId],
rewardInfo.rewardName,
rewardInfo.rewardAmount,
rewardInfo.tradeId);
CloooudD_LogCallback(@"%s", __func__);
CloooudD_Log(@"再看一次触发的回调。。。");
}