信息流广告
信息流广告适用于列表界面中,常用于TableView, ScrollView等,可以跟随界面拖动。常用的有100,300 两种高度,各平台返回的高度可能不一样,要根据返回的View的bounds来调整。
前提条件
接入UNAD SDK
初始化UNAD SDK
在UNAD后台创建信息流广告
创建UNADFeedAd 加载广告
self.feedAd = [[UNADFeedAd alloc]initWithUnitId:UNAD_TEST_UNIT_ID adSize:CGSizeMake(SC_Width, 100)];
self.feedAd.delegate = self;
self.feedAd.rootViewController = self;
//一次最多请求3个广告,可以在展示过后动态移除,不要申请太多的广告占用过多的资源。有的平台只能返回一个,要释放后再请求
[self.feedAd loadAd:3];
实现delegate方法,监听广告状态
#pragma mark - UNADFeedAdDelegate
/**
* 拉取广告成功的回调,国外的平台在拉取成功后就会返回广告尺寸,国内广告要等渲染成功后
*/
- (void)feedAdSuccessToLoad:(UNADFeedAd *)feedAd views:(NSArray<__kindof UNADFeedAdView *> *)views
{
if (views.count) {
[views enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
UNADFeedAdView *feedAdView = (UNADFeedAdView *)obj;
feedAdView.controller = self;
[feedAdView render];
[self.expressAdViews addObject:feedAdView];
}];
}
[self.tableView reloadData];
}
//国内的广告在渲染成功后才会返回视图的大小,记得在这时候要调整和刷新界面。
- (void)feedAdViewRenderSuccess:(UNADFeedAdView *)feedAdView{
[self.tableView reloadData];
}
- (void)feedAdViewRenderFail:(UNADFeedAdView *)feedAdView{
//渲染失败的单元要移掉
NSLog(@"%s",__FUNCTION__);
[self.expressAdViews removeObject:feedAdView];
[self.tableView reloadData];
}
//国内的广告可以点击关闭,这时候要动态移除。
- (void)feedAdViewClosed:(UNADFeedAdView *)feedAdView{
NSLog(@"%s",__FUNCTION__);
//[self.tableView reloadData];
[self.expressAdViews removeObject:feedAdView];
NSUInteger index = [self.expressAdViews indexOfObject:feedAdView];
NSIndexPath *indexPath=[NSIndexPath indexPathForRow:index inSection:0];
[self.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
}
#pragma mark - UITableViewDelegate
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
//根据信息流view 的高度来调整界面
if (indexPath.row % 2 == 0) {
UIView *view = [self.expressAdViews objectAtIndex:indexPath.row / 2];
return view.bounds.size.height;
}
else {
return 100;
}
}