Latest 1.1.1
Homepage https://github.com/AnOrphanInTheBeautyfulWorld/DLADFrameWork
License MIT
Platforms ios 8.0
Dependencies AFNetworking
Frameworks AdSupport
Authors

跃盟科技信息流动态广告开发文档V1.1.0

1.环境

iOS 8.0及以上版本;

AFNetworking 3.0+ 和 AdSupport.framework 作为依赖库;


2.集成

① 使用Cocoapods(推荐)

在Podfile中写入:

platform :ios, '8.0'
use_frameworks!
target 'DLDynamicAdDemo' do
pod 'AFNetworking'
pod 'DLADFrameWork'
end

执行
pod install

② 手动添加:

DeepLeaper官网下载DLADFrameWork.framework静态库,在Build Phases -> Link Binary With LibrariesBuild Phases -> Copy Bundle Resources中添加DLADFrameWork.framework

3.动态广告位模块

① 在ViewController内引用:

Objective-C

#import "ViewController.h"
@import DLADFrameWork;
@interface ViewController ()<UITableViewDelegate,UITableViewDataSource,DLDynamicAdManagerDelegate>
@property(nonatomic,copy) NSMutableArray* sourceAry;//数据数组
@end
@implementation ViewController
{
    NSInteger _indexRow;//存储上一次点击的row
}

Swift

import UIKit
import DLADFrameWork;
class ViewController: UIViewController,UITableViewDelegate,UITableViewDataSource,DLDynamicAdManagerDelegate {
var _indexRow : Int = Int.init();//存储上一次点击的row
var _dataAry = NSMutableArray();//数据数组

② 请求广告:

Objective-C

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
    //初始化动态广告管理器
    DLDynamicAdManager* dlm = [DLDynamicAdManager getDynamicAdManager];
    dlm.delegate = self;
    InfoData* data = _sourceAry[indexPath.row];
    //请求广告 参数为 落地页地址,广告位ID,广告位宽度
    [dlm startLoadDynamicAD:data.webUrl AuTag:YOURADID andWidth:FeedAdWeight];
    _indexRow = indexPath.row ? indexPath.row : 0;
    //Your Code...
}    

Swift

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    //初始化动态广告管理器
    let dlm : DLDynamicAdManager = DLDynamicAdManager.getDynamicAdManager();
    dlm.delegate = self;
    let data : InfoData = _dataAry[indexPath.row] as! InfoData;
    //请求广告 参数为 落地页地址,广告位ID,广告位宽度
    dlm.startLoadDynamicAD(data.webUrl, auTag:"YOURAPPAUTAG" , andWidth:375.00);
    _indexRow = indexPath.row != 0 ? indexPath.row : 0;
    //Your Code...
}

③ 添加广告Cell的展示:

Objective-C

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
    static NSString *ID = @"adCell";
    tableView.separatorStyle = UITableViewCellSeparatorStyleSingleLine;
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier: ID];
    }
    [cell setSelectionStyle:UITableViewCellSelectionStyleNone];
    for (UIView* view in cell.contentView.subviews) {
        [view removeFromSuperview];
    }
    [cell.contentView addSubview:data.ad];//data.ad是广告view
    return cell;
}

Swift

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let ID = "adCell";
    _tableView.separatorStyle = UITableViewCellSeparatorStyle(rawValue: 1)!;
    var cell = _tableView.dequeueReusableCell(withIdentifier: ID);
    if cell == nil {
        cell = UITableViewCell.init(style: UITableViewCellStyle(rawValue: 0)!, reuseIdentifier: ID);
    }
    cell?.selectionStyle = UITableViewCellSelectionStyle(rawValue:0)!;
    cell?.contentView.addSubview(data.ad);
    return cell!;
}

④ 实现代理方法:

Objective-C

//动态广告下载成功 收到广告的view和高度
-(void)didLoadDynamicAdView:(DLFeedAdView*)AdView andHeight:(float)height{
    //根据既定数据结构添加到数据源
    InfoData* data = [[InfoData alloc]init];
    data.ad = AdView;
    data.height = height;

#warning "Optional start"
    //如果需要同时只存在一个动态广告(即展示下一个就回收上一个),就加上此段代码用来回收旧广告
    for (int i = 0; i<=_sourceAry.count-1; i++) {
        InfoData* data = _sourceAry[i];
        if (data.ad.adType == DLAD_DYNAMIC) {
            [_sourceAry removeObjectAtIndex:i];
            if(i<_indexRow){
                _indexRow--;
            }
            break;
        }
    }
#warning "Optional end"

    //成功下载的广告加入数据源
    [_sourceAry insertObject:data atIndex:_indexRow+1];
    //刷新
    dispatch_async(dispatch_get_main_queue(), ^{
        [self.tableView reloadData];
    });
}
//关闭广告位
-(void)closeDynamicFeedView{
    for (int i = 0; i<=_sourceAry.count-1; i++) {
        InfoData* data = _sourceAry[i];
        //如果广告需要关闭
        if (data.ad.isClosed) {
            //从数据源移除
            [_sourceAry removeObjectAtIndex:i];
            dispatch_async(dispatch_get_main_queue(), ^{
                [_tableView deleteRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:i inSection:0]]  withRowAnimation:UITableViewRowAnimationFade];
            });
            break;
        }
    }
}
//失败
-(void)didFailLoadDynamicAdView{
    NSLog(@"动态广告下载失败");
}

Swift

//广告下载成功
func didLoadDynamicAdView(_ AdView: DLFeedAdView!, andHeight height: Float) {
    //根据既定数据结构添加到数据源
    let data = InfoData.init();
    data.ad = AdView;
    data.height = height;

    //Start->如果需要同时只存在一个动态广告(即展示下一个就回收上一个),就加上此段代码用来回收旧广告
    var i = _dataAry.count-1;
    for temp in _dataAry {
        let tempData : InfoData = _dataAry[i] as! InfoData;
        if tempData.ad.adType == DLAD_DYNAMIC {
            _dataAry .removeObject(at: i);
            if i<_indexRow {
                _indexRow -= 1;
            }
            break;
        }
        i -= 1;
    }
    //End->如果需要同时只存在一个动态广告(即展示下一个就回收上一个),就加上此段代码用来回收旧广告

    //成功下载的广告加入数据源
    _dataAry .insert(data, at: _indexRow+1);
    //刷新
    DispatchQueue.main.async {
        self._tableView.reloadData();
    }
}
//关闭广告
func closeDynamicFeedView() {
    var i = 0;
    for temp in _dataAry {
        let data = _dataAry[i] as! InfoData;
        //如果广告需要关闭
        if data.ad.isClosed {
            //从数据源移除
            _dataAry.removeObject(at: i);
            DispatchQueue.main.async {
                self._tableView.deleteRows(at: [IndexPath.init(row: i, section: 0)], with: UITableViewRowAnimation(rawValue: 0)!)   
            }
            break;
        }
        i += 1;
    }
}
//广告下载失败
func didFailLoadDynamicAdView() {
    NSLog("Fail");
}

⑤ 在拿到需要展示的广告view(DLFeedAdView*)和广告位高度height后,可以根据您的数据结构自行适配,Demo只提供一个例子;


4.帮助

动态广告遵循以下规则:

1:每次启动,同样的URL不能重复请求两次;
2:1分钟内最多请求一次动态广告;
3:每个广告计划24h内最多出现5次;
4:每个计划10min内最多出现1次。
在Debug模式下为了方便测试,不遵循3、4规则;
在Release模式下遵循全部4条规则。

如果信息流两边需要留白,可以通过缩小广告位宽度,并把广告居中来达到两边留白,来达到和原生内容相似的效果;
如果信息流上下需要留白,可以通过加大cell高度,并把广告居中来达到上下留白,来达到和原生内容相似的效果;

如有问题,可以与跃盟科技联系。


Latest podspec

{
    "name": "DLADFrameWork",
    "version": "1.1.1",
    "summary": "Accurate delivery of the advertising platform!",
    "homepage": "https://github.com/AnOrphanInTheBeautyfulWorld/DLADFrameWork",
    "license": {
        "type": "MIT",
        "file": "MIT-LICENSE.txt"
    },
    "authors": {
        "ChangLiu": "[email protected]"
    },
    "platforms": {
        "ios": "8.0"
    },
    "source": {
        "git": "https://github.com/AnOrphanInTheBeautyfulWorld/DLADFrameWork.git",
        "tag": "1.1.1"
    },
    "resources": "DLADFrameWork.framework/*.png",
    "vendored_frameworks": "DLADFrameWork.framework",
    "frameworks": "AdSupport",
    "dependencies": {
        "AFNetworking": []
    }
}

Pin It on Pinterest

Share This