banner广告
<h1>banner广告(WindMillBannerView)</h1>
<p><strong>注意事项: 1、需要初始化时配置广告基本信息。例如期望尺寸,为避免渲染过程产生广告视图形变,务必和媒体平台配置相同尺寸; 2、通过设置WindMillBannerViewDelegate代理,获取广告、展示、点击、关闭等回调。值得注意的是一定要设置rootViewController,即跳转落地页需要的viewController; 3、banner广告视图需要开发者手动移除。</strong></p>
<h2>1. 接口说明</h2>
<h3>WindMillAdRequest</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>WindMillBannerView</h3>
<p>objective-c</p>
<pre><code>NS_ASSUME_NONNULL_BEGIN
@interface WindMillBannerView : UIView
/// 广告代理对象 [必传]
@property (nonatomic, weak) id&lt;WindMillBannerViewDelegate&gt; delegate;
/// 视图控制器 [必传]
@property (nonatomic, weak) UIViewController *viewController;
/// Banner展现和轮播时的动画效果开关,默认打开 [可选]
@property (nonatomic) BOOL animated;
/// 广告位ID
@property (nonatomic, copy, readonly) NSString *placementId;
/**
* 广告是否有效,以下情况会返回NO,建议在展示广告之前判断,否则会影响计费或展示失败
* a.广告未拉取成功
* b.广告过期
*/
@property (nonatomic, readonly) BOOL isAdValid;
/// 在广告展示后,描述当前播放广告源信息
@property (nonatomic, strong, readonly) WindMillAdInfo *adInfo;
/// 广告实际的大小
@property (nonatomic, assign, readonly) CGSize adSize;
/// 构造方法
/// - Parameter request: 广告请求对象 [必传]
- (instancetype)initWithRequest:(WindMillAdRequest *)request;
/// 构造方法
/// - Parameters:
/// - request: 广告请求对象 [必传]
/// - expectSize: 期望的广告视图大小 [必传]
- (instancetype)initWithRequest:(WindMillAdRequest *)request
expectSize:(CGSize)expectSize;
/// 加载广告
- (void)loadAdData;
/// 填充后可调用, 返回广告缓存池内所有信息
- (NSArray&lt;WindMillAdInfo *&gt; *)getCacheAdInfoList;
@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/%E6%A8%AA%E5%B9%85%E5%B9%BF%E5%91%8A/#_2-%E7%9B%91%E5%90%AC%E5%9B%9E%E8%B0%83"></a></h2>
<p>objective-c</p>
<pre><code>NS_ASSUME_NONNULL_BEGIN
@protocol WindMillBannerViewDelegate &lt;NSObject&gt;
@optional
/// 广告自动刷新成功回调
/// - Parameter bannerAdView: WindMillBannerView 实例对象
- (void)bannerAdViewDidAutoRefresh:(WindMillBannerView *)bannerAdView;
/// 广告自动刷新失败回调
/// - Parameters:
/// - bannerAdView: WindMillBannerView 实例对象
/// - error: 具体错误信息
- (void)bannerView:(WindMillBannerView *)bannerAdView
failedToAutoRefreshWithError:(NSError *)error;
/// 广告加载成功回调
/// - Parameter bannerAdView: WindMillBannerView 实例对象
- (void)bannerAdViewLoadSuccess:(WindMillBannerView *)bannerAdView;
/// 广告加载失败回调
/// - Parameters:
/// - bannerAdView: WindMillBannerView 实例对象
/// - error: 具体错误信息
- (void)bannerAdViewFailedToLoad:(WindMillBannerView *)bannerAdView
error:(NSError *)error;
/// 广告曝光回调
/// - Parameter bannerAdView: WindMillBannerView 实例对象
- (void)bannerAdViewWillExpose:(WindMillBannerView *)bannerAdView;
/// 广告点击回调
/// - Parameter bannerAdView: WindMillBannerView 实例对象
- (void)bannerAdViewDidClicked:(WindMillBannerView *)bannerAdView;
/// 当用户由于点击要离开您的应用程序时触发该回调,您的应用程序将移至后台
/// - Parameter bannerAdView: WindMillBannerView 实例对象
- (void)bannerAdViewWillLeaveApplication:(WindMillBannerView *)bannerAdView;
/// 将打开全屏视图。在打开storekit或在应用程序中打开网页时触发
/// - Parameter bannerAdView: WindMillBannerView 实例对象
- (void)bannerAdViewWillOpenFullScreen:(WindMillBannerView *)bannerAdView;
/// 将关闭全屏视图。关闭storekit或关闭应用程序中的网页时发送
/// - Parameter bannerAdView: WindMillBannerView 实例对象
- (void)bannerAdViewCloseFullScreen:(WindMillBannerView *)bannerAdView;
/// 广告视图被移除
/// - Parameter bannerAdView: WindMillBannerView 实例对象
- (void)bannerAdViewDidRemoved:(WindMillBannerView *)bannerAdView;
@end
NS_ASSUME_NONNULL_END</code></pre>
<h2>3. 调用示例</h2>
<h3>3.1 广告加载</h3>
<p>objective-c</p>
<pre><code>WindMillAdRequest *request = [WindMillAdRequest request];
request.userId = @&quot;user_id&quot;;
request.placementId = @&quot;聚合广告id&quot;;
request.options = @{@&quot;test_key&quot;:@&quot;test_value&quot;};//s2s激励时自定义参数,key和value都是媒体开发自定义
WindMillBannerView *bannerView = [[WindMillBannerView alloc] initWithRequest:request];
bannerView.delegate = self;
bannerView.viewController = self;
[bannerView loadAdData];
//在刷新成功和加载成功的回调中设置bannerView的frame
//成功加载广告
- (void)bannerAdViewLoadSuccess:(WindMillBannerView *)bannerAdView {
CGSize adSize = bannerAdView.adSize;
CGFloat space = (UIScreen.mainScreen.bounds.size.width - adSize.width)/2.0;
bannerAdView.frame = CGRectMake(space, 0, adSize.width, adSize.height);
}
//bannerView自动刷新
- (void)bannerAdViewDidAutoRefresh:(WindMillBannerView *)bannerAdView {
CGSize adSize = bannerAdView.adSize;
CGFloat space = (UIScreen.mainScreen.bounds.size.width - adSize.width)/2.0;
bannerAdView.frame = CGRectMake(space, 0, adSize.width, adSize.height);
}</code></pre>
<h2>4. Banner广告显示和隐藏时机</h2>
<h3>开启自动刷新功能</h3>
<p>当开启自动刷新功能时,开发者只需要调用loadAdData一次,在加载广告成功的回调(bannerAdViewLoadSuccess:)中可以把bannerView添加到屏幕上。</p>
<pre><code>- (void)bannerAdViewLoadSuccess:(WindMillBannerView *)bannerAdView {
CGSize adSize = bannerAdView.adSize;
CGFloat space = (UIScreen.mainScreen.bounds.size.width - adSize.width)/2.0;
bannerAdView.frame = CGRectMake(space, 0, adSize.width, adSize.height);
}</code></pre>
<p>在收到刷新成功的回调中(bannerAdViewDidAutoRefresh:)根据adSize调整BannerView的frame。</p>
<pre><code>- (void)bannerAdViewDidAutoRefresh:(WindMillBannerView *)bannerAdView {
CGSize adSize = bannerAdView.adSize;
CGFloat space = (UIScreen.mainScreen.bounds.size.width - adSize.width)/2.0;
bannerAdView.frame = CGRectMake(space, 0, adSize.width, adSize.height);
}</code></pre>
<p>在收到bannerAdViewDidRemoved:回调,可以移除bannerView,同时把bannerView释放掉。</p>
<pre><code>- (void)bannerAdViewDidRemoved:(WindMillBannerView *)bannerAdView {
[self.bannerView removeFromSuperview];
self.bannerView.delegate = nil;
self.bannerView = nil;
}</code></pre>
<h3>关闭自动刷新功能</h3>
<p>当不使用自动刷新功能时,开发者不会收到刷新成功和失败的回调。 当调用一次loadAdData加载广告成功时,开发者可将bannerView添加到屏幕上,当收到bannerAdViewDidRemoved:广告视图移除回调通知时,开发者需要主动调用[bannerView removeFromSuperview];方法移除bannerView; 若需要再次展示新的banner广告,开发者需要再次调用loadAdData接口,在加载成功的回调中,将对应的bannerView添加到屏幕即可。</p>