Skip to main content

Draw信息流

一、集成建议#

  • draw信息流广告,一般是广告平台会返回多个原生广告,类似抖音中的广告一样,可以在视频流里插入广告

  • v6.9.0+新增

  • 支持的广告网络及类型

广告网络支持类型返回数组
快手模版UIView数组
穿山甲模版UIView数组
腾讯自渲染三方广告对象数组

二、TradPlusAdNative API说明#

1. 加载、展示广告#

  • 参数说明
参数说明
AdUnitIDAdUnitID为TradPlus后台创建的广告位ID,SDK将根据广告位ID拉取配置并请求广告
sceneIdsceneId为广告场景ID是可选参数,默认为nil,开发者需和- (void)showAdWithSceneId:(nullable NSString *)sceneId;配套使用
如需使用广告场景请参考: 广告场景说明
renderingViewClass指定原生渲染模版,开发者通过RenderingViewClass可实现自定义布局,未设置时SDK会使用默认模版进行渲染
TradPlusNativeRenderer指定原生的renderer,未设置时SDK会使用默认模版进行渲染
subview渲染后会添加到此view上
  • 方法说明
方法说明
- (void)setAdUnitID:(NSString *)adUnitID;设置广告位ID
- (void)loadAdWithSceneId:(nullable NSString *)sceneId;请求该广告位draw信息流广告
- (BOOL)isReady;检测该广告位是否有可用广告
true为有可用广告
flase为无可用广告
- (void)entryAdScenario:(nullable NSString *)sceneId;进入广告场景
广告场景是用来统计进入广告场景的次数和进入场景后展示广告的次数,所以请在准确的位置调用。
- (void)showADWithRenderingViewClass:(Class)renderingViewClass subview:(UIView )subView sceneId:(nullable NSString )sceneId;展示该广告位draw信息流广告
- (void)showADWithNativeRenderer:(TradPlusNativeRenderer )renderer subview:(UIView )subView sceneId:(nullable NSString *)sceneId;展示该广告位draw信息流广告
通过自定义renderer方式

2. 监听回调#

  • 参数说明
参数说明
adInfo广告位ID、三方广告平台、ecpm等信息,具体请参考回调信息说明
error返回的是TP封装的错误信息:详见: 错误码说明
  • TradPlusADNativeDelegate 回调接口及说明
方法说明
- (void)tpNativeAdLoaded:(NSDictionary *)adInfo;draw信息流广告加载完成 首个广告源加载成功时回调 一次加载流程只会回调一次
- (void)tpNativeAdLoadFailWithError:(NSError *)error;draw信息流广告加载失败
- (void)tpNativeAdImpression:(NSDictionary *)adInfo;draw信息流广告展示成功 三方认可的有效展示
- (void)tpNativeAdShow:(NSDictionary )adInfo didFailWithError:(NSError )error;draw信息流广告展现失败
- (void)tpNativeAdClicked:(NSDictionary *)adInfo;draw信息流广告被点击
  • TradPlusADNativeDelegate 回调接口及说明(可选)
方法说明
- (UIViewController *)viewControllerForPresentingModalView;为三方提供rootviewController 用于点击广告后的操作
- (void)tpNativeAdStartLoad:(NSDictionary *)adInfo;v7.6.0+新增 开始加载流程
- (void)tpNativeAdLoadStart:(NSDictionary *)adInfo;v7.6.0+已废弃 请使用 tpNativeAdOneLayerStartLoad:
- (void)tpNativeAdOneLayerStartLoad:(NSDictionary *)adInfo;当每个广告源开始加载时会都会回调一次。///v7.6.0+新增。替代原回调接口:tpNativeAdLoadStart:(NSDictionary *)adInfo;
- (void)tpNativeAdIsLoading:(NSDictionary *)adInfo;v8.7.0+新增 调用load之后如果收到此回调,说明广告位仍处于加载状态,无法触发新的一轮广告加载。
- (void)tpNativeAdClose:(NSDictionary *)adInfo;AD被关闭
- (void)tpNativeAdBidStart:(NSDictionary *)adInfo;bidding开始
- (void)tpNativeAdBidEnd:(NSDictionary *)adInfo success:(BOOL)success;v7.6.0+已废弃 请使用 tpNativeAdBidEnd:error:
- (void)tpNativeAdBidEnd:(NSDictionary )adInfo error:(NSError )error;bidding结束 error = nil 表示成功
- (void)tpNativeAdOneLayerLoaded:(NSDictionary *)adInfo;当每个广告源加载成功后会都会回调一次。
- (void)tpNativeAdOneLayerLoad:(NSDictionary )adInfo didFailWithError:(NSError )error;当每个广告源加载失败后会都会回调一次,返回三方源的错误信息
- (void)tpNativeAdAllLoaded:(BOOL)success;加载流程全部结束
- (void)tpNativePasterDidPlayFinished:(NSDictionary *)adInfo;v6.8.0+新增 视频贴片类型播放完成回调

三、示例代码#

请参考:NativeDraw

#import <TradPlusAds/TradPlusAdNative.h>
@interface TradPlusAdNativeDrawViewController ()<TradPlusADNativeDelegate>
@property (nonatomic,strong)TradPlusAdNativeObject *nativeObject;
@property (nonatomic,strong)TradPlusAdNative *nativeAd;
@end
@implementation TradPlusAdNativeDrawViewController
- (void)viewDidLoad
{
[super viewDidLoad];
self.nativeAd = [[TradPlusAdNative alloc] init];
//设置广告位ID
[self.nativeAd setAdUnitID:@"在TP平台创建的广告位ID"];
//设置代理
self.nativeAd.delegate = self;
//加载广告需要一些时间,可以在展示广告前提前加载好广告
[self.nativeAd loadAd];
}
- (IBAction)showAct:(id)sender
{
**首先通过API &#x60;getReadyNativeObject&#x60; 获取一个已缓存广告对象**
self.nativeObject = [self.nativeAd getReadyNativeObject];
if(self.nativeObject != nil)
{
if(self.nativeObject.adType == TPNativeADTYPE_Draw)
{
if(self.nativeObject.channel_id == NETWORK_GDTMOB)
{
//腾讯Draw信息流是自渲染 参考NativeGDTDrawListViewController
NativeGDTDrawListViewController *drawListViewController = [[NativeGDTDrawListViewController alloc] initWithNibName:@"NativeGDTDrawListViewController" bundle:nil];
drawListViewController.nativeObject = self.nativeObject;
[self.navigationController pushViewController:drawListViewController animated:YES];
}
else
{
//其他广告源讯Draw信息流都是模版类型
NativeDrawListViewController *drawListViewController = [[NativeDrawListViewController alloc] initWithNibName:@"NativeDrawListViewController" bundle:nil];
//getDrawList 如果广告源是 穿山甲的情况下 请在展示前调用(提前调用会导致页面内容渲染不全)
drawListViewController.drawList = [self.nativeObject getDrawList];
[self.navigationController pushViewController:drawListViewController animated:YES];
}
return;
}
}
self.logLabel.text = @"没有可展示的广告";
}
#pragma mark - TradPlusADNativeDelegate
//draw信息流广告加载完成 首个广告源加载成功时回调 一次加载流程只会回调一次
- (void)tpNativeAdLoaded:(NSDictionary *)adInfo
{
}
//draw信息流广告加载失败
- (void)tpNativeAdLoadFailWithError:(NSError *)error
{
}
//draw信息流广告展现
- (void)tpNativeAdImpression:(NSDictionary *)adInfo
{
}
//draw信息流广告展现失败
- (void)tpNativeAdShow:(NSDictionary *)adInfo didFailWithError:(NSError *)error
{
}
//draw信息流广告被点击
- (void)tpNativeAdClicked:(NSDictionary *)adInfo
{
}

四、注意事项#

  • 展示广告,首先通过API getReadyNativeObject 获取一个已缓存广告对象

⚠️注意

  • 从此API获取到缓存时,TPSDK同时会移除对此缓存的引用
  • 获取后,需要开发者自行保留好此对象的引用
  • 调用API返回nil时,则说明已经没有任何缓存了。
  • 一般情况下不要连续调用此API。
- (TradPlusAdNativeObject *)getReadyNativeObject;

参考:TradPlusAdNativeDrawViewController

⚠️注意: 当使用穿山甲Draw信息流时getDrawList需要在展示时调用,提前调用获取会导致页面内容渲染不全

  • 自渲染类型返回的是三方广告对象数组,通过TradPlusAdNativeObjectcustomObject获取,需要自行拼接展示。
    参考:NativeGDTDrawListViewController