激励视频
<h1>激励视频广告(WindMillRewardVideoAd)<a href="https://doc.sigmob.com/ToBid%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97/SDK%E9%9B%86%E6%88%90%E8%AF%B4%E6%98%8E/iOS/%E5%B9%BF%E5%91%8A%E7%B1%BB%E5%9E%8B/%E6%BF%80%E5%8A%B1%E8%A7%86%E9%A2%91/#%E6%BF%80%E5%8A%B1%E8%A7%86%E9%A2%91%E5%B9%BF%E5%91%8A-windmillrewardvideoad"></a></h1>
<p>激励视频广告是一种全新的广告形式,用户可选择观看视频广告以换取有价物,例如虚拟货币、应用内物品和独家内容等等;这类广告一般有一定长度,部分可支持跳过(具体支持视不同adn而定)。</p>
<p>> 注:部分ADN广告无点击、跳过回调</p>
<h2>1. 接口说明<a href="https://doc.sigmob.com/ToBid%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97/SDK%E9%9B%86%E6%88%90%E8%AF%B4%E6%98%8E/iOS/%E5%B9%BF%E5%91%8A%E7%B1%BB%E5%9E%8B/%E6%BF%80%E5%8A%B1%E8%A7%86%E9%A2%91/#_1-%E6%8E%A5%E5%8F%A3%E8%AF%B4%E6%98%8E"></a></h2>
<p>objective-c</p>
<pre><code>@interface WindMillRewardVideoAd : NSObject
@property (nonatomic, weak) id&lt;WindMillRewardVideoAdDelegate&gt; delegate;
@property (nonatomic, strong, readonly) NSString *placementId;
@property (nonatomic, getter=isAdReady, readonly) BOOL ready;
/// 获取当前播放的广告网络的详细信息
@property (nonatomic, strong, readonly) WindMillAdInfo *adInfo;
- (instancetype)initWithRequest:(WindMillAdRequest *)request;
- (void)loadAdData;
/// 填充后可调用, 返回广告缓存池内所有信息
- (NSArray&lt;WindMillAdInfo *&gt; *)getCacheAdInfoList;
/**
Display video ad.
@param rootViewController : root view controller for displaying ad.
@param extras : Extended parameters for displaying ad.
*/
- (void)showAdFromRootViewController:(UIViewController *)rootViewController
options:(NSDictionary&lt;NSString *, NSString *&gt; *)extras;
@end</code></pre>
<h2>2. 监听回调<a href="https://doc.sigmob.com/ToBid%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97/SDK%E9%9B%86%E6%88%90%E8%AF%B4%E6%98%8E/iOS/%E5%B9%BF%E5%91%8A%E7%B1%BB%E5%9E%8B/%E6%BF%80%E5%8A%B1%E8%A7%86%E9%A2%91/#_2-%E7%9B%91%E5%90%AC%E5%9B%9E%E8%B0%83"></a></h2>
<table>
<thead>
<tr>
<th>回调</th>
<th>含义</th>
<th>使用建议</th>
</tr>
</thead>
<tbody>
<tr>
<td>rewardVideoAdDidLoad:</td>
<td>广告加载成功</td>
<td>当次加载成功标识/可调用show的条件/加载数据统计</td>
</tr>
<tr>
<td>rewardVideoAdDidLoad: didFailWithError:</td>
<td>广告加载失败</td>
<td>当次加载失败标识/重新加载条件/加载数据统计/失败原因排查</td>
</tr>
<tr>
<td>rewardVideoAdDidVisible</td>
<td>广告展示成功</td>
<td>当次展示标识/展示数据统计</td>
</tr>
<tr>
<td>rewardVideoAdDidClick:</td>
<td>广告点击事件</td>
<td>点击数据统计</td>
</tr>
<tr>
<td>rewardVideoAdDidClickSkip:</td>
<td>广告跳过事件</td>
<td>跳过数据统计</td>
</tr>
<tr>
<td>rewardVideoAdDidClose:</td>
<td>广告关闭</td>
<td>广告销毁/自定义预缓存时机</td>
</tr>
<tr>
<td>rewardVideoAd: reward:</td>
<td>奖励发放的标识(包括adn的C2C/)</td>
<td>标识奖励发放的条件</td>
</tr>
<tr>
<td>rewardVideoAdDidPlayFinish: didFailWithError:</td>
<td>视频播放结束(可能因为错误非正常结束)</td>
<td>标识播放结束(包括播放错误)/问题排查</td>
</tr>
</tbody>
</table>
<p>objective-c</p>
<pre><code>@protocol WindMillRewardVideoAdDelegate&lt;NSObject&gt;
/**
This method is called when video ad material loaded successfully.
*/
- (void)rewardVideoAdDidLoad:(WindMillRewardVideoAd *)rewardVideoAd;
/**
This method is called when video ad materia failed to load.
@param error : the reason of error
*/
- (void)rewardVideoAdDidLoad:(WindMillRewardVideoAd *)rewardVideoAd didFailWithError:(NSError *)error;
/**
This method is called when video ad slot will be showing.
*/
- (void)rewardVideoAdWillVisible:(WindMillRewardVideoAd *)rewardVideoAd;
/**
This method is called when video ad slot has been shown.
*/
- (void)rewardVideoAdDidVisible:(WindMillRewardVideoAd *)rewardVideoAd;
/**
This method is called when video ad is clicked.
*/
- (void)rewardVideoAdDidClick:(WindMillRewardVideoAd *)rewardVideoAd;
/**
This method is called when video ad is clicked skip button.
*/
- (void)rewardVideoAdDidClickSkip:(WindMillRewardVideoAd *)rewardVideoAd;
/**
This method is called when video ad is can be motivated
*/
- (void)rewardVideoAd:(WindMillRewardVideoAd *)rewardVideoAd reward:(WindMillRewardInfo *)reward;
/**
This method is called when video ad is about to close.
*/
- (void)rewardVideoAdDidClose:(WindMillRewardVideoAd *)rewardVideoAd;
/**
This method is called when video ad play completed or an error occurred.
@param error : the reason of error
*/
- (void)rewardVideoAdDidPlayFinish:(WindMillRewardVideoAd *)rewardVideoAd didFailWithError:(NSError *)error;
@end</code></pre>
<h2>3. 调用示例<a href="https://doc.sigmob.com/ToBid%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97/SDK%E9%9B%86%E6%88%90%E8%AF%B4%E6%98%8E/iOS/%E5%B9%BF%E5%91%8A%E7%B1%BB%E5%9E%8B/%E6%BF%80%E5%8A%B1%E8%A7%86%E9%A2%91/#_3-%E8%B0%83%E7%94%A8%E7%A4%BA%E4%BE%8B"></a></h2>
<h3>3.1 广告加载<a href="https://doc.sigmob.com/ToBid%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97/SDK%E9%9B%86%E6%88%90%E8%AF%B4%E6%98%8E/iOS/%E5%B9%BF%E5%91%8A%E7%B1%BB%E5%9E%8B/%E6%BF%80%E5%8A%B1%E8%A7%86%E9%A2%91/#_3-1-%E5%B9%BF%E5%91%8A%E5%8A%A0%E8%BD%BD"></a></h3>
<p>objective-c</p>
<pre><code>WindMillAdRequest *request = [WindMillAdRequest request];
request.userId = @&quot;user_id&quot;;
request.placementId = @&quot;ea1f8f7b662&quot;;
request.options = @{@&quot;test_key&quot;:@&quot;test_value&quot;};//s2s激励时自定义参数
//rewardVideoAd全局对象,后续可以使用平台提供的预加载功能提高填充速度
if (self.rewardVideoAd == nil) {
self.rewardVideoAd = [[WindMillRewardVideoAd alloc] initWithRequest:request];
}
self.rewardVideoAd.delegate = self;
[self.rewardVideoAd loadAdData];</code></pre>
<h3>3.2 广告播放<a href="https://doc.sigmob.com/ToBid%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97/SDK%E9%9B%86%E6%88%90%E8%AF%B4%E6%98%8E/iOS/%E5%B9%BF%E5%91%8A%E7%B1%BB%E5%9E%8B/%E6%BF%80%E5%8A%B1%E8%A7%86%E9%A2%91/#_3-2-%E5%B9%BF%E5%91%8A%E6%92%AD%E6%94%BE"></a></h3>
<p>objective-c</p>
<pre><code>//WindMillAdSceneName在播放时可以定义播放的场景
if (self.rewardVideoAd.ready) {
[self.rewardVideoAd showAdFromRootViewController:self.viewController options:nil];
}</code></pre>
<h3>3.3 广告预加载注意事项<a href="https://doc.sigmob.com/ToBid%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97/SDK%E9%9B%86%E6%88%90%E8%AF%B4%E6%98%8E/iOS/%E5%B9%BF%E5%91%8A%E7%B1%BB%E5%9E%8B/%E6%BF%80%E5%8A%B1%E8%A7%86%E9%A2%91/#_3-3-%E5%B9%BF%E5%91%8A%E9%A2%84%E5%8A%A0%E8%BD%BD%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A1%B9"></a></h3>
<ul>
<li>需要在变现平台开启预加载功能</li>
<li>当广告开始播放时,SDK会自动执行下一条广告加载逻辑,当下一跳广告加载成功后,SDK会再次回调开发者<code>rewardVideoAdDidLoad:</code>广告加载成功的回调</li>
<li>WindMillRewardVideoAd每个广告位ID创建一个实例对象,多个实例对象之间的预加载逻辑互不干扰。</li>
</ul>
<p>objective-c</p>
<pre><code>WindMillAdRequest *request = [WindMillAdRequest request];
request.userId = @&quot;user_id&quot;;
request.placementId = @&quot;ea1f8f7b662&quot;;
//rewardVideoAd全局对象,不能每次都重新new实例对象,否则预加载功能不生效
if (self.rewardVideoAd == nil) {
self.rewardVideoAd = [[WindMillRewardVideoAd alloc] initWithRequest:request];
}
self.rewardVideoAd.delegate = self;
[self.rewardVideoAd loadAdData];</code></pre>
<h2>4. Scene(代码位场景)<a href="https://doc.sigmob.com/ToBid%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97/SDK%E9%9B%86%E6%88%90%E8%AF%B4%E6%98%8E/iOS/%E5%B9%BF%E5%91%8A%E7%B1%BB%E5%9E%8B/%E6%BF%80%E5%8A%B1%E8%A7%86%E9%A2%91/#_4-scene-%E4%BB%A3%E7%A0%81%E4%BD%8D%E5%9C%BA%E6%99%AF"></a></h2>
<ul>
<li>适用Adn: Sigmob,穿山甲</li>
<li>使用说明:如果需要传入一定的场景来用于区别看广告场景,请使用该接口(一般游戏会用到)</li>
<li>接口说明:</li>
</ul>
<p>objective-c</p>
<pre><code>// WindMillAdSceneId: 自定义场景ID
// WindMillAdSceneDesc: 自定义场景描述
NSDictionary *sceneDicsBySDK = @{
WindMillAdSceneId: @&quot;1&quot;,
WindMillAdSceneDesc: @&quot;custom scene description&quot;
};
[self.rewardVideoAd showAdFromRootViewController:self.viewController options:sceneDicsBySDK];</code></pre>
<h2>5. 服务端奖励校验<a href="https://doc.sigmob.com/ToBid%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97/SDK%E9%9B%86%E6%88%90%E8%AF%B4%E6%98%8E/iOS/%E5%B9%BF%E5%91%8A%E7%B1%BB%E5%9E%8B/%E6%BF%80%E5%8A%B1%E8%A7%86%E9%A2%91/#_5-%E6%9C%8D%E5%8A%A1%E7%AB%AF%E5%A5%96%E5%8A%B1%E6%A0%A1%E9%AA%8C"></a></h2>
<p>当选择需要服务端验证时,开发者需要按照各Adn要求进行接口开发,并在adn平台上做相应配置。</p>
<p>服务端回调是指在用户看完激励视频达到奖励条件时,对应广告的adn服务端会向开发者服务端发送一个验证请求,同时客户端会给出- (void)rewardVideoAd:(WindMillRewardVideoAd *)rewardVideoAd reward:(WindMillRewardInfo *)reward;:回调,开发者根据回调进行奖励发放。</p>
<p>> <strong>注意:在满足激励条件时会触发此回调,与是否选择服务端验证以及服务端验证是否成功无关。</strong></p>