菜单

原生广告

💡Tips

  • 🚀 采用预加载机制提升用户体验
  • ⚠️ 注意处理生命周期防止内存泄漏
  • 🔧 推荐使用标准化回调处理流程

1. 加载广告

java 复制代码
// 导入头文件
#import <AnyThinkNative/AnyThinkNative.h>
 
@interface SelfRenderVC () <ATADXPublicLoadingDelegate, ATADXPublicNativeLoadingDelegate, ATADXPubNativeDelegate>

@property (nonatomic, strong) UIView *selfRenderView;
@property (nonatomic, strong) ATADXNativeAd *nativeAd;

@end

@implementation SelfRenderVC

//广告位ID
#define Native_SelfRender_PlacementID @"广告位id"

//场景ID,可选,可在后台生成。没有可传入空字符串
#define Native_SelfRender_SceneID @""
 
#pragma mark - Load Ad 加载广告
/// 加载广告
- (void)loadAd {
    NSMutableDictionary * loadConfigDict = [NSMutableDictionary dictionary];
    
    //设置请求广告的尺寸
    [loadConfigDict setValue:[NSValue valueWithCGSize:CGSizeMake(SelfRenderViewWidth, SelfRenderViewHeight)] forKey:kATExtraInfoNativeAdSizeKey];
		
    ATADXNativeAd *adInfo = [[ATADXNativeAd alloc] initAdWithPlacementId:Native_SelfRender_PlacementID];
		adInfo.extra = loadConfigDict;
    adInfo.loadDelegate = self;
    adInfo.showDelegate = self;
    [adInfo loadAd];
}

#pragma mark - ATADXPublicLoadingDelegate
/// 广告位加载完成
- (void)didFinishLoadingADXNativeItem:(ATADXBaseAd *)item nativeView:(ATNativeADView *)nativeView {
    // item为nativeView绑定关系
}

/// 广告位加载失败
- (void)didFailToLoadADXItem:(ATADXBaseAd *)item
                       error:(NSError*)error {
	  
}

#pragma mark - ATADXPubNativeDelegate
/// 原生广告已展示
- (void)adxDidShowNativeAd:(ATADXBaseAd *)item {
    
}

/// 原生广告点击
- (void)adxDidClickNativeAd:(ATADXBaseAd *)item {
		
}

/// 原生广告开始播放视频
- (void)adxDidStartPlayingVideo:(ATADXBaseAd *)item {
}

/// 原生广告视频播放结束
- (void)adxDidEndPlayingVideo:(ATADXBaseAd *)item {
}

/// 原生广告点击了关闭按钮
- (void)adxDidTapCloseButton:(ATADXBaseAd *)item {
}

/// 原生广告已打开或跳转深链接页面
- (void)adxDidDeepLinkOrJump:(ATADXBaseAd *)item
                      result:(BOOL)success {
}

2. 展示广告

渲染方式 实现步骤
自渲染 1、根据当前的 nativeAd 调用showNativeViewWithConfig进行视图数据绑定
2、调用 ATNativePrepareInfoloadPrepareInfo 方法进行自渲染控件的绑定,绑定需展示的控件,其他不展示的不需要绑定。
3、调用 ATNativeAdOfferrendererWithConfiguration: selfRenderView: nativeADView: 方法完成渲染步骤。
模板渲染 1、根据当前的 nativeAd 调用showNativeViewWithConfig进行视图数据绑定
2、调用 ATNativeAdOfferrendererWithConfiguration: selfRenderView: nativeADView: 方法完成渲染步骤,selfRenderView传入nil

2.1 原生自渲染

objective-c 复制代码
/// 自渲染展示
- (void)showAd {
    // 场景统计功能,可选接入
    // [[ATAdManager sharedManager] entryNativeScenarioWithPlacementID:Native_SelfRender_PlacementID scene:Native_SelfRender_SceneID];

    // 检查是否有就绪
  	BOOL isReady = [self.nativeAd isReady];
    if (!isReady) {
        return;
    }
    
    // 初始化config配置
    ATNativeADConfiguration *config = [[ATNativeADConfiguration alloc] init];
    // 给原生广告进行预布局
    config.ADFrame = CGRectMake(0, 0, SelfRenderViewWidth, SelfRenderViewHeight);
    // 给视频播放器进行预布局,建议在后面添加到自定义视图后,再次进行一次布局
    config.mediaViewFrame = CGRectMake(0, 0, SelfRenderViewMediaViewWidth, SelfRenderViewMediaViewHeight);
    // 设置代理
    config.delegate = self;
    config.rootViewController = self;
    // 让广告View容器贴合于广告
    config.sizeToFit = YES;

    //【手动布局方式】精确设置logo大小以及位置,与下方【Masonry方式】选择一种实现
    config.logoViewFrame = CGRectMake(kScreenW-50-10, SelfRenderViewHeight-50-10, 50, 50);
    
    // 设置广告平台logo位置偏好(部分广告平台无法进行精确设置,则通过下面代码设置,建议尽量和上方logoViewFrame位置匹配)
    [ATAPI sharedInstance].preferredAdLogoPosition = ATAdLogoPositionBottomRightCorner;
    
    // 调用后消耗一条广告缓存,创建绑定视图
    [self.nativeAd showNativeViewWithConfig:showConfig nativeConfig:config];
    
    // 创建自渲染视图view,同时根据offer信息内容去赋值
    SelfRenderView *selfRenderView = [[SelfRenderView alloc] initWithOffer:offer];
    
    // 创建广告nativeADView
    // 获取原生广告展示容器视图
    ATNativeADView *nativeADView = adInfo.nativeView;
    
    // 创建可点击组件的容器数组
    NSMutableArray *clickableViewArray = [NSMutableArray array];
    
    // 获取mediaView,如需要自行添加到自渲染视图上
    UIView *mediaView = [nativeADView getMediaView];
    if (mediaView) {
        selfRenderView.mediaView = mediaView;
    }
    
    // 设置需要注册点击事件的UI控件,最好不要把信息流的父视图整体添加到点击事件中,不然可能会出现点击关闭按钮,还触发了点击信息流事件。
    // 关闭按钮(dislikeButton)无需注册点击事件
    [clickableViewArray addObjectsFromArray:@[selfRenderView.iconImageView,
                                              selfRenderView.titleLabel,
                                              selfRenderView.textLabel,
                                              selfRenderView.ctaLabel,
                                              selfRenderView.mainImageView]];
    
    // 给UI控件注册点击事件
    [nativeADView registerClickableViewArray:clickableViewArray];
    
    // 绑定组件
    ATNativePrepareInfo *info = [ATNativePrepareInfo loadPrepareInfo:^(ATNativePrepareInfo * prepareInfo) {
        prepareInfo.textLabel = selfRenderView.textLabel;
        prepareInfo.advertiserLabel = selfRenderView.advertiserLabel;
        prepareInfo.titleLabel = selfRenderView.titleLabel;
        prepareInfo.ratingLabel = selfRenderView.ratingLabel;
        prepareInfo.iconImageView = selfRenderView.iconImageView;
        prepareInfo.mainImageView = selfRenderView.mainImageView;
        prepareInfo.logoImageView = selfRenderView.logoImageView;
        prepareInfo.ctaLabel = selfRenderView.ctaLabel;
        prepareInfo.dislikeButton = selfRenderView.dislikeButton;
        prepareInfo.mediaView = selfRenderView.mediaView;
    }];
    [nativeADView prepareWithNativePrepareInfo:info];
    
    // 渲染广告
    [self.nativeAd.nativeOffer rendererWithConfiguration:config selfRenderView:selfRenderView nativeADView:nativeADView];
    
    self.adView = nativeADView;
    
    // 展示广告
    AdDisplayVC *showVc = [[AdDisplayVC alloc] initWithAdView:nativeADView offer:offer adViewSize:CGSizeMake(SelfRenderViewWidth, SelfRenderViewHeight)];
    [self.navigationController pushViewController:showVc animated:YES];  
}

2.2 原生模版渲染

objective-c 复制代码
/// 模版渲染展示
- (void)showAd {
    // 场景统计功能,可选接入
    // [[ATAdManager sharedManager] entryNativeScenarioWithPlacementID:Native_Express_PlacementID scene:Native_Express_SceneID];

    // 检查是否有就绪
  	BOOL isReady = [self.nativeAd isReady];
    if (!isReady) {
        return;
    }
    
    // 初始化config配置
    ATNativeADConfiguration *config = [[ATNativeADConfiguration alloc] init];
    // 给模版广告nativeADView设置大小,通常为请求广告时设置的大小
    config.ADFrame = CGRectMake(0, 0, ExpressAdWidth, ExpressAdHeight);
    // 设置代理
    config.delegate = self;
    // 设置展示根控制器
    config.rootViewController = self;
    // 开启模版广告自适应高度,当实际返回的广告大小与请求广告时设置的大小不一致时,SDK内部将自动调整nativeADView的大小为实际返回广告的大小。
    config.sizeToFit = YES;

		// 调用后消耗广告创建绑定视图
    [self.nativeAd showNativeViewWithConfig:showConfig nativeConfig:config];
    ATNativeADView *nativeADView = adInfo.nativeView;
    // 渲染广告
    [self.nativeAd rendererWithConfiguration:config selfRenderView:nil nativeADView:nativeADView];
 
    self.adView = nativeADView;
    
    // 展示广告
    AdDisplayVC *showVc = [[AdDisplayVC alloc] initWithAdView:nativeADView offer:offer adViewSize:CGSizeMake(ExpressAdWidth, ExpressAdHeight)];
    [self.navigationController pushViewController:showVc animated:YES];
}

3. 销毁广告

objc 复制代码
- (void)removeAd {
    [self.nativeAd destroy];
    if (self.adView && self.adView.superview) {
        [self.adView removeFromSuperview];
    }
    // [self.adView destroyNative];
    // self.adView = nil;
    
    // 自渲染及时销毁offer
    [self.selfRenderView destory];
    self.selfRenderView = nil;
}

4. 客户端竞价

可参考此文档:客户端竞价

最近修改: 2025-12-03Powered by