logo

帮助中心/文档详情/

iOS模板渲染信息流广告

简介

模板渲染信息流:场景应在应用的内容流中与应用内容穿插展示,广告内容与应用其他内容区分开,防止意外点击。

支持的广告尺寸:开发者在穿山甲平台上可以进行多模板、多尺寸的勾选。模板渲染信息流广告支持开发者调整、编辑

权限:

模版渲染信息流广告: 默认提供

模版渲染信息流广告

使用说明

模版信息流广告使用BUNativeExpressAdManager对象调用loadAd请求广告,使用BUNativeExpressAdView对象来进行广告的渲染render,通过设置BUNativeExpressAdViewDelegate代理,获取广告、展示、点击、关闭等回调。

创建广告位对象、请求广告

BUNativeExpressAdManager

请求广告时需要传入广告位对象,广告位对象创建时必须传入广告位ID

必传参数:

字段定义 字段名称 字段类型 备注
BUAdSlot / / 基本信息配置,详见事例
adSize 广告尺寸 CGSize 广告尺寸,可将宽度设置为屏宽,自适应时,可将高度直接设置为0

请求广告前需要配置BUAdSlot广告的基本信息,使用BUNativeExpressAdManager创建对象,使用BUNativeExpressAdManager调用loadAd请求广告

BUAdSlot *slot1 = [[BUAdSlot alloc] init];
slot1.ID = self.viewModel.slotID;
slot1.AdType = BUAdSlotAdTypeFeed;
BUSize *imgSize = [BUSize sizeBy:BUProposalSize_Feed228_150];
slot1.imgSize = imgSize;
slot1.position = BUAdSlotPositionFeed;
// self.nativeExpressAdManager可以重用
 if (!self.nativeExpressAdManager) {
    self.nativeExpressAdManager = [[BUNativeExpressAdManager alloc] initWithSlot:slot1 adSize:CGSizeMake(self.widthSlider.value, self.heightSlider.value)];
    }
self.nativeExpressAdManager.adSize = CGSizeMake(self.widthSlider.value, self.heightSlider.value);
self.nativeExpressAdManager.delegate = self;
NSInteger count = (NSInteger)self.adCountSlider.value;
[self.nativeExpressAdManager loadAdDataWithCount:count];

注意:

  1. self.nativeExpressAdManager可以重用
  2. 模版信息流的尺寸adSize建议宽度设置为屏宽 高度设置为0或者设置平台勾选的高度 不要随意设置尺寸大小否则有可能出现拉取失败或者广告变形的情况
  3. 模版信息流广告可多条广告同时请求,最大请求数量为3
  4. 模版信息流广告默认设置imgSizeBUProposalSize_Feed228_150即可

接收广告加载结果

BUNativeExpressAdViewDelegate

回调方法 注释
nativeExpressAdFailToLoad 返回的错误码(error)表示广告加载失败的原因,所有错误码详情请见链接。Link
nativeExpressAdViewRenderFail 渲染失败,网络原因或者硬件原因导致渲染失败,可以更换手机或者网络环境测试。建议升级到穿山甲平台最新版本
nativeExpressAdSuccessToLoad 广告视图加载成功
nativeExpressAdViewRenderSuccess 渲染成功

通过设置BUNativeExpressAdViewDelegate代理,获取广告、展示、点击、关闭等回调。其他代理方法可参见DemoBUDExpressFeedViewController类#pragma mark - BUNativeExpressAdViewDelegate部分

展示广告

由于官方Demo使用tableView进行的广告的插入展示,直接更新数据源即可更新广告的相关插入展示,此处建议开发者在收到nativeExpressAdSuccessToLoad回调后再进行广告的渲染展示,可保证播放流畅和展示流畅,用户体验更好。因此如果不是使用此种方式进行的信息流广告的展示,切记不要忘记addSubview添加广告对象来进行广告的展示。

展示信息流广告

展示时机

在收到nativeExpressAdSuccessToLoad回调后再进行广告的渲染展示,刷新数据源

- (void)nativeExpressAdSuccessToLoad:(BUNativeExpressAdManager *)nativeExpressAd views:(NSArray<__kindof BUNativeExpressAdView *> *)views {
    [self.expressAdViews removeAllObjects];//【重要】不能保存太多view,需要在合适的时机手动释放不用的,否则内存会过大
    if (views.count) {
        [self.expressAdViews addObjectsFromArray:views];
        [views enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
            BUNativeExpressAdView *expressView = (BUNativeExpressAdView *)obj;
            expressView.rootViewController = self;
            // important: 此处会进行WKWebview的渲染,建议一次最多预加载三个广告,如果超过3个会很大概率导致WKWebview渲染失败。
            [expressView render];
        }];
    }
    [self.tableView reloadData];
}

注意:为了避免内存过大触发系统优化机制,建议在合适的时机进行remove移除操作,目前SDK使用WKWebView实现,此建议不限于模版信息流广告,其他广告同样适用,保证不使用的广告,在合适的时机进行释放处理

dislike回调说明

- (void)nativeExpressAdView:(BUNativeExpressAdView *)nativeExpressAdView dislikeWithReason:(NSArray<BUDislikeWords *> *)filterWords {
    //【重要】需要在点击叉以后 在这个回调中移除视图,否则,会出现用户点击叉无效的情况
    [self.expressAdViews removeObject:nativeExpressAdView];
    NSUInteger index = [self.expressAdViews indexOfObject:nativeExpressAdView];
    NSIndexPath *indexPath=[NSIndexPath indexPathForRow:index inSection:0];
    [self.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade]; 
}

- (void)nativeExpressAdViewDidRemoved:(BUNativeExpressAdView *)nativeExpressAdView {
//【重要】若开发者收到此回调,代表穿山甲会主动关闭掉广告,广告移除后需要开发者对界面进行适配
  NSUInteger index = [self.expressAdViews indexOfObject:nativeExpressAdView];
  [self.expressAdViews removeObject:nativeExpressAdView];
  NSIndexPath *indexPath=[NSIndexPath indexPathForRow:index inSection:0];
  NSIndexPath *placeholderIndexPath = [NSIndexPath indexPathForRow:index + 1 inSection:0];
  [self.tableView deleteRowsAtIndexPaths:@[indexPath, placeholderIndexPath] withRowAnimation:UITableViewRowAnimationFade];
}

注意

  1. 切记不要忘记设置BUNativeExpressAdView对象的rootViewController,保证当前传入的rootViewController不为空,并确保self.nativeExpressAdManager进行了重用判断,否则有可能出现偶现dislike回调方法不进的异常场景

注意事项

  1. self.nativeExpressAdManager可以重用
  2. 模版信息流的尺寸adSize建议宽度设置为屏宽 高度设置为0或者设置平台勾选的高度 不要随意设置尺寸大小否则有可能出现拉取失败或者广告变形的情况
  3. 为了避免内存过大触发系统优化机制,建议在合适的时机进行remove移除操作
  4. 不要忘记设置BUNativeExpressAdView对象的rootViewController,保证当前传入的rootViewController不为空

资源

详细接入可参照Demo中的BUDExpressFeedViewController类,广告加载请求部分可参照loadData方法,广告展示渲染部分可参照nativeExpressAdSuccessToLoad方法

文档内容是否对您有帮助?
联系我们