开屏广告
<h1>开屏广告(WindMillSplashAd)<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/%E5%BC%80%E5%B1%8F%E5%B9%BF%E5%91%8A/#%E5%BC%80%E5%B1%8F%E5%B9%BF%E5%91%8A-windmillsplashad"></a></h1>
<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/%E5%BC%80%E5%B1%8F%E5%B9%BF%E5%91%8A/#_1-%E6%8E%A5%E5%8F%A3%E8%AF%B4%E6%98%8E"></a></h2>
<h3>WindMillAdRequest<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/%E5%BC%80%E5%B1%8F%E5%B9%BF%E5%91%8A/#windmilladrequest"></a></h3>
<p>objective-c</p>
<pre><code>@interface WindMillAdRequest : NSObject
/// 【可选】,媒体用户ID。
@property (nonatomic,copy) NSString *userId;
/// 【必传】,广告位ID。
@property (nonatomic,copy) NSString *placementId;
/// 【可选】,服务端激励回传时,透传参数,key和value支持自定义。
@property (nonatomic,strong) NSDictionary&lt;NSString *, NSString *&gt; *options;
+ (instancetype)request;
@end</code></pre>
<h3>WindMillSplashAd<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/%E5%BC%80%E5%B1%8F%E5%B9%BF%E5%91%8A/#windmillsplashad"></a></h3>
<p>objective-c</p>
<pre><code>NS_ASSUME_NONNULL_BEGIN
@interface WindMillSplashAd : NSObject
/// 广告代理对象 [必传]
@property (nonatomic, weak) id&lt;WindMillSplashAdDelegate&gt; delegate;
/// 广告位ID
@property (nonatomic,strong, readonly) NSString *placementId;
/// 视图控制器 [必传]
@property (nonatomic, weak) UIViewController *rootViewController;
/// 在广告展示后,描述当前播放广告源信息
@property (nonatomic, strong, readonly) WindMillAdInfo *adInfo;
/// 填充后可调用, 返回广告缓存池内所有信息
- (NSArray&lt;WindMillAdInfo *&gt; *)getCacheAdInfoList;
/// 初始化splash ad对象,当请求和播放分开处理时,使用改构造函数
/// @param request 广告请求对象 [必传]
/// @param extra 各个平台需要的扩展参数 [可选]
/// 1、kWindMillSplashExtraBottomView: 如果需要品牌区,需要通过改参数设置,类型:UIView
/// 2、kWindMillSplashExtraAdSize: 如果需要品牌区,需要通过改参数设置,类型NSString,字符串格式为NSStringFromCGSize
- (instancetype)initWithRequest:(WindMillAdRequest *)request
extra:(NSDictionary *)extra;
/**
* 返回广告是否可展示
* 对于并行请求,在调用showAdInWindow前时需判断下
* @return 当广告已经加载完成且未曝光时,为YES,否则为NO
*/
- (BOOL)isAdReady;
/**
* 广告发起请求并自动展示在Window中
* 详解:[可选]发起拉取广告请求,并将获取的广告以全屏形式展示在传入的Window参数中
*/
-(void)loadAdAndShow;
/**
* 广告发起请求并展示在Window中, 同时在屏幕底部设置应用自身的Logo页面或是自定义View
* 详解:[可选]发起拉取广告请求,并将获取的广告以半屏形式展示在传入的Window的上半部,剩余部分展示传入的bottomView
* 请注意bottomView需设置好宽高,所占的空间不能过大,并保证广告界面的高度大于360
* @param bottomView [可选] 自定义底部View,可以在此View中设置应用Logo
*
*/
-(void)loadAdAndShowWithBottomView:(UIView * _Nullable)bottomView;
/**
* 广告发起请求并展示在Window中, 同时在屏幕底部设置应用自身的Logo页面
* 详解:[logo会自动读取应用图标]
*
@param title 设置标题 【必传】
@param description 设置描述信息【必传】
*/
- (void)loadADAndShowWithTitle:(NSString *)title description:(NSString *)description;
/**
* 发起拉取广告请求,只拉取不展示
* 详解:广告素材及广告图片拉取成功后会回调onSplashAdDidLoad方法,当拉取失败时会回调onSplashAdFailToPresent方法
*/
- (void)loadAd;
/**
* 展示广告,调用此方法前需调用isAdValid方法判断广告素材是否有效
* 详解:广告展示成功时会回调onSplashAdSuccessPresentScreen方法,展示失败时会回调onSplashAdFailToPresent方法
@param window 用来展示广告的容器【必传】
@param bottomView 底部自定义视图【可选】
*/
- (void)showAdInWindow:(UIWindow *)window withBottomView:(UIView * _Nullable)bottomView;
/**
* 广告发起请求并展示在Window中, 同时在屏幕底部设置应用自身的Logo页面
* 详解:[logo会自动读取应用图标],请中高度位100,宽度为屏幕宽度
*
@param window 容器 【必传】
@param title 设置标题 【必传】
@param desc 设置描述信息 【必传】
*/
- (void)showAdInWindow:(UIWindow *)window title:(NSString *)title desc:(NSString *)desc;
@end
NS_ASSUME_NONNULL_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/%E5%BC%80%E5%B1%8F%E5%B9%BF%E5%91%8A/#_2-%E5%9B%9E%E8%B0%83%E7%9B%91%E5%90%AC"></a></h2>
<p>objective-c</p>
<pre><code>NS_ASSUME_NONNULL_BEGIN
@protocol WindMillSplashAdDelegate &lt;NSObject&gt;
@optional
/// 广告加载成功回调
/// - Parameter splashAd: WindMillSplashAd 实例对象
- (void)onSplashAdDidLoad:(WindMillSplashAd *)splashAd;
/// 广告加载失败回调
/// - Parameters:
/// - splashAd: WindMillSplashAd 实例对象
/// - error: 具体错误信息
-(void)onSplashAdLoadFail:(WindMillSplashAd *)splashAd error:(NSError *)error;
/// 广告曝光回调
/// - Parameter splashAd: WindMillSplashAd 实例对象
-(void)onSplashAdSuccessPresentScreen:(WindMillSplashAd *)splashAd;
/// 广告展示失败回调
/// - Parameters:
/// - splashAd: WindMillSplashAd 实例对象
/// - error: 具体错误信息
-(void)onSplashAdFailToPresent:(WindMillSplashAd *)splashAd withError:(NSError *)error;
/// 广告点击回调
/// - Parameter splashAd: WindMillSplashAd 实例对象
- (void)onSplashAdClicked:(WindMillSplashAd *)splashAd;
/// 广告跳过回调
/// - Parameter splashAd: WindMillSplashAd 实例对象
- (void)onSplashAdSkiped:(WindMillSplashAd *)splashAd;
/// 广告即将关闭回调
/// - Parameter splashAd: WindMillSplashAd 实例对象
- (void)onSplashAdWillClosed:(WindMillSplashAd *)splashAd;
/// 广告关闭回调
/// - Parameter splashAd: WindMillSplashAd 实例对象
- (void)onSplashAdClosed:(WindMillSplashAd *)splashAd;
/** 目前仅支持gromore csj
This method is called when another controller has been closed.
@param interactionType : open appstore in app or open the webpage or view video ad details page.
@Note : Mediation dimension does not support this callBack.
*/
- (void)onSplashAdDidCloseOtherControllerWithInteractionType:(WindMillInteractionType)interactionType;
/// 广告小窗口点击回调
/// - Parameter splashAd: WindMillSplashAd 实例对象
- (void)onSplashZoomOutViewAdDidClick:(WindMillSplashAd *)splashAd;
/// 广告小窗口关闭回调
/// - Parameter splashAd: WindMillSplashAd 实例对象
- (void)onSplashZoomOutViewAdDidClose:(WindMillSplashAd *)splashAd;
@end
NS_ASSUME_NONNULL_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/%E5%BC%80%E5%B1%8F%E5%B9%BF%E5%91%8A/#_3-%E8%87%AA%E5%8A%A8%E6%92%AD%E6%94%BE%E5%92%8C%E9%A2%84%E5%8A%A0%E8%BD%BD%E6%A8%A1%E5%BC%8F"></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/%E5%BC%80%E5%B1%8F%E5%B9%BF%E5%91%8A/#_3-1-%E5%8A%A0%E8%BD%BD%E5%90%8E%E8%87%AA%E5%8A%A8%E5%B1%95%E7%A4%BA"></a></h3>
<p>sdk提供了3个接口用于开屏的自动展示,即load和play功能合成一个接口,在onSplashAdDidLoad回调后,会自动展示在当前的KeyWindow中。</p>
<p>objective-c</p>
<pre><code>/**
* 广告发起请求并自动展示在Window中
* 详解:[可选]发起拉取广告请求,并将获取的广告以全屏形式展示在传入的Window参数中
*/
-(void)loadAdAndShow;
/**
* 广告发起请求并展示在Window中, 同时在屏幕底部设置应用自身的Logo页面或是自定义View
* 详解:[可选]发起拉取广告请求,并将获取的广告以半屏形式展示在传入的Window的上半部,剩余部分展示传入的bottomView
* 请注意bottomView需设置好宽高,所占的空间不能过大,并保证广告界面的高度大于360
* @param bottomView 【可选】自定义底部View,可以在此View中设置应用Logo
*
*/
-(void)loadAdAndShowWithBottomView:(UIView * _Nullable)bottomView;
/**
* 广告发起请求并展示在Window中, 同时在屏幕底部设置应用自身的Logo页面
* 详解:[logo会自动读取应用图标]
*
@param title 设置标题 【必传】
@param description 设置描述信息【必传】
*/
- (void)loadADAndShowWithTitle:(NSString *)title description:(NSString *)description;</code></pre>
<h3>3.2 加载后调用API后展示<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/%E5%BC%80%E5%B1%8F%E5%B9%BF%E5%91%8A/#_3-2-%E5%8A%A0%E8%BD%BD%E5%90%8E%E8%B0%83%E7%94%A8api%E5%90%8E%E5%B1%95%E7%A4%BA"></a></h3>
<p>Windmill提供了预加载LoadAd接口,当广告加载成功后会回调onSplashAdDidLoad,开发者在收到加载成功回调后,可以在合适的时机调用showAd方法展示广告。</p>
<p>objective-c</p>
<pre><code>/**
* 发起拉取广告请求,只拉取不展示
* 详解:广告素材及广告图片拉取成功后会回调onSplashAdDidLoad方法,当拉取失败时会回调onSplashAdFailToPresent方法
*/
- (void)loadAd;
/**
* 展示广告,调用此方法前需调用isAdValid方法判断广告素材是否有效
* 详解:广告展示成功时会回调onSplashAdSuccessPresentScreen方法,展示失败时会回调onSplashAdFailToPresent方法
@param window 用来展示广告的容器【必传】
@param bottomView 底部自定义视图【可选】
*/
- (void)showAdInWindow:(UIWindow *)window withBottomView:(UIView * _Nullable)bottomView;
/**
* 广告发起请求并展示在Window中, 同时在屏幕底部设置应用自身的Logo页面
* 详解:[logo会自动读取应用图标],请中高度位100,宽度为屏幕宽度
*
@param window 容器 【必传】
@param title 设置标题 【必传】
@param desc 设置描述信息 【必传】
*/
- (void)showAdInWindow:(UIWindow *)window title:(NSString *)title desc:(NSString *)desc;</code></pre>
<h2>4. 自定义底部View<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/%E5%BC%80%E5%B1%8F%E5%B9%BF%E5%91%8A/#_4-%E8%87%AA%E5%AE%9A%E4%B9%89%E5%BA%95%E9%83%A8view"></a></h2>
<p>开发者可自定义开屏底部View,用于logo展示等个性化设置。自定义底部View的最大高度不得超过屏幕高度的25%,设置值超过则取25%有效值。</p>
<p>目前提供多种模式设置底部View</p>
<ol>
<li>在播放时直接传入BottomView</li>
<li>在播放时传入title和desc,SDK会去当前Icon配合标题和描述进行自动布局</li>
</ol>
<h3>4.1 扩展参数(extra)<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/%E5%BC%80%E5%B1%8F%E5%B9%BF%E5%91%8A/#_4-1-%E6%89%A9%E5%B1%95%E5%8F%82%E6%95%B0-extra"></a></h3>
<p>开发者在使用开屏预加载模式是,需要在extra中传入kWindMillSplashExtraAdSize,由聚合SDK传入三方adn。</p>
<p>如果使用自动展示模式kWindMillSplashExtraAdSize参数可以忽略。</p>
<p>CGSize adSize = CGSizeMake(width, height);</p>
<p>Extra = @{kWindMillSplashExtraAdSize: NSStringFromCGSize(adSize)};</p>
<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/%E5%BC%80%E5%B1%8F%E5%B9%BF%E5%91%8A/#_5-%E8%B0%83%E7%94%A8%E7%A4%BA%E4%BE%8B"></a></h2>
<h3>5.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/%E5%BC%80%E5%B1%8F%E5%B9%BF%E5%91%8A/#_5-1-%E8%87%AA%E5%8A%A8%E6%92%AD%E6%94%BE"></a></h3>
<p>objective-c</p>
<pre><code>WindMillAdRequest *request = [WindMillAdRequest request];
request.placementId = @&quot;聚合广告位id&quot;;
request.userId = @&quot;user_id&quot;;
CGFloat bottomHeight = 100;
CGSize adSize = CGSizeMake(self.navigationController.view.bounds.size.width, self.navigationController.view.bounds.size.height-bottomHeight);
NSDictionary *extra = @{kWindMillSplashExtraAdSize: NSStringFromCGSize(adSize)};
self.splashAd = [[WindMillSplashAd alloc] initWithRequest:request extra:extra];
self.splashAd.delegate = self;
self.splashAd.rootViewController = self;
UIView *bottomView; //自定义底部View
if (bottomView) {
[self.splashAd loadAdAndShowWithBottomView:bottomView];
}else {
[self.splashAd loadAdAndShow];
}</code></pre>
<h3>5.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/%E5%BC%80%E5%B1%8F%E5%B9%BF%E5%91%8A/#_5-2-%E9%A2%84%E5%8A%A0%E8%BD%BD%E6%92%AD%E6%94%BE"></a></h3>
<p>objective-c</p>
<pre><code> CGSize adSize = CGSizeMake(self.navigationController.view.bounds.size.width, self.navigationController.view.bounds.size.height-logoHeight);
NSDictionary *extra = @{kWindMillSplashExtraAdSize: NSStringFromCGSize(adSize)};
WindMillAdRequest *request = [WindMillAdRequest request];
request.placementId = [self getSelectPlacementId];
request.userId = @&quot;your user id&quot;;
self.splashAd = [[WindMillSplashAd alloc] initWithRequest:request extra:extra];
self.splashAd.delegate = self;
self.splashAd.rootViewController = self;
[self.splashAd loadAd];
///广告拉取成功后会回调onSplashAdDidLoad方法,之后调用showAdInWindow
UIView *bottomView; //自定义底部View, 可以为nil
if (self.splashAd.isAdReady) {
[self.splashAd showAdInWindow:self.view.window withBottomView: bottomView];
}</code></pre>