怎么集成穿山甲(今日头条广告SDK)
一、创建应用ID和广告位ID
1.新建应用
(1)在流量管理-应用管理界面创建应用
(2)建议创建为测试状态,注意测试状态代码位的展示和点击是无效的,不计费!
(3)正式上线后一定要变更成正式状态才有数据
2.新建代码位
(1)在流量管理-代码位管理中可新建代码位
(2)媒体可以根据自己需要的类型来创建代码位
(3)可新建信息流、banner、插屏、全屏视频、开屏、激励视屏和Draw信息流等多种广告类型。
(4)媒体创建代码位成功后,即可获取到代码位ID
二、集成网盟iOS SDK接入
1.工程设置导入framework
方法一:获取 framework 文件后直接将 {BUAdSDK.framework, BUAdSDK.bundle}文件拖入工程即可。 升级SDK必须同时更新framework和bundle文件,否则可能出现部分页面无法展示的问题
拖入时请按以下方式选择:
方法二:通过pod方式引入
pod 'Bytedance-UnionAD'
2.添加权限
工程plist文件设置,点击右边的information Property List后边的 “+” 展开
添加 App Transport Security Settings,先点击左侧展开箭头,再点右侧加号,Allow Arbitrary Loads 选项自动加入,修改值为 YES。 SDK API 已经全部支持HTTPS,但是广告主素材存在非HTTPS情况。
Build Settings中Other Linker Flags 增加参数-ObjC,SDK同时支持-all_load
3.运行环境配置
支持系统 iOS 9.X 及以上;
SDK编译环境 Xcode 10.0及以上;
支持架构:i386, x86-64, armv7, armv7s, arm64
4.添加依赖库
如果通过cocoapods安装,则不需要添加下面的库。
工程需要在TARGETS -> Build Phases中找到Link Binary With Libraries,点击“+”,依次添加下列依赖库
StoreKit.frameworkMobileCoreServices.frameworkWebKit.frameworkMediaPlayer.frameworkCoreMedia.frameworkCoreLocation.frameworkAVFoundation.frameworkCoreTelephony.frameworkSystemConfiguration.frameworkAdSupport.frameworkCoreMotion.frameworklibresolv.9.tbdlibc++.tbdlibz.tbdImageIO.framework
5.添加语言配置
注意 : 开发者必须在这里设置所支持的语言,否则会有语言显示的问题.
例如 : 支持中文 添加 Chinese
三、广告接入
1.开屏广告
OC:
引入头文件
#import <BUAdSDK/BUAdSDK.h>
遵守协议:
<BUSplashAdDelegate>
在- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions方法里加入。
[BUAdSDKManager setAppID:@"第一步申请的应用ID"];CGRect frame = [UIScreen mainScreen].bounds;BUSplashAdView *splashView = [[BUSplashAdView alloc] initWithSlotID:@"第一步申请的代码为ID" frame:frame];splashView.delegate = self;UIWindow *keyWindow = [UIApplication sharedApplication].windows.firstObject;[splashView loadAdData];[keyWindow.rootViewController.view addSubview:splashView];splashView.rootViewController = keyWindow.rootViewController;
实现协议方法:
- (void)splashAdDidClose:(BUSplashAdView *)splashAd {[splashAd removeFromSuperview];
}- (void)splashAd:(BUSplashAdView *)splashAd didFailWithError:(NSError * _Nullable)error{[splashAd removeFromSuperview];
}
swift:
引入头文件
import BUAdSDK
遵守协议:
BUSplashAdDelegate
在func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool 方法里加入
BUAdSDKManager.setAppID("第一步申请的应用ID")let frame = UIScreen.main.boundslet splashView = BUSplashAdView.init(slotID: "第一步申请的代码为ID", frame: frame)splashView.delegate = selflet keyWindow = UIApplication.shared.windows.firstsplashView.loadAdData()keyWindow?.rootViewController?.view.addSubview(splashView)splashView.rootViewController = keyWindow?.rootViewController
实现协议方法
func splashAdDidClose(_ splashAd: BUSplashAdView) {splashAd.removeFromSuperview()}func splashAd(_ splashAd: BUSplashAdView, didFailWithError error: Error?) {splashAd.removeFromSuperview()}
2.Banner广告
一般选择时选择600X150大小的banner
OC:
引入头文件
#import <BUAdSDK/BUAdSDK.h>
在- (void)viewDidLoad里加入下面的代码
// 加载banner广告CGFloat screenWidth = CGRectGetWidth([UIScreen mainScreen].bounds);CGFloat bannerHeigh = (screenWidth)/600*90;BUSize *imgSize = [BUSize sizeBy:BUProposalSize_Banner600_150];self.bannerView = [[BUNativeExpressBannerView alloc] initWithSlotID:@"您的代码位" rootViewController:self imgSize:imgSize adSize:CGSizeMake(screenWidth, bannerHeigh) IsSupportDeepLink:YES interval:30];self.bannerView.frame = CGRectMake(0, TWScreenH-bannerHeigh-DZVirtualHomeHeight, screenWidth, bannerHeigh);self.bannerView.delegate = self;[self.view addSubview:self.bannerView];[self.bannerView loadAdData];
swift:
引入头文件
import BUAdSDK
在func viewDidLoad()里面添加
//加载banner广告let screenWidth = UIScreen.main.bounds.widthlet screenHeight = UIScreen.main.bounds.heightlet bannerHeight = screenWidth/600*90let imageSize = BUSize(by: .banner600_150)// 要用30s循环,请参考oc代码bannerView = BUNativeExpressBannerView.init(slotID: "931527852", rootViewController: self, imgSize: imageSize, adSize:CGSize(width: screenWidth, height: bannerHeight) , isSupportDeepLink: true)var height : CGFloat = 0.0if UIScreen.main.bounds.height >= 812 {height = 34.0}bannerView.frame = CGRect(x: 0, y: screenHeight - bannerHeight - height, width: screenWidth, height: bannerHeight)bannerView.delegate = selfview.addSubview(bannerView)bannerView.loadAdData()
3.激励视频广告
oc:
引入头文件
#import <BUAdSDK/BUAdSDK.h>
在- (void)viewDidLoad中加入
BURewardedVideoModel *model2 = [[BURewardedVideoModel alloc] init];model2.userId = @"123";self.rewardedVideoAd = [[BUNativeExpressRewardedVideoAd alloc] initWithSlotID:@"激励视频广告ID" rewardedVideoModel:model2];self.rewardedVideoAd.delegate = self;[self.rewardedVideoAd loadAdData];
然后在触发激励广告的地方加入以下代码:
[self.rewardedVideoAd showAdFromRootViewController:self.navigationController ritScene:BURitSceneType_home_get_bonus ritSceneDescribe:nil];
4.全屏视频广告
我们全屏视频广告的加入实际是用户从后台返回前台的时候
swift:
引入头文件
import BUAdSDK
定义变量
var fullscreenVideoAd : BUNativeExpressFullscreenVideoAd?
在func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool 方法里加入
fullscreenVideoAd = BUNativeExpressFullscreenVideoAd(slotID: "广告位id")fullscreenVideoAd?.delegate = selffullscreenVideoAd?.loadData()
在func applicationWillEnterForeground(_ application: UIApplication)里加入代码:
let keyWindow = UIApplication.shared.windows.firstfullscreenVideoAd?.show(fromRootViewController: keyWindow?.rootViewController ?? ViewController())
OC:
引入头文件
#import <BUAdSDK/BUAdSDK.h>
定义属性
@property (nonatomic, strong)BUNativeExpressFullscreenVideoAd *fullscreenVideoAd;
加载数据
self.fullscreenVideoAd = [[BUNativeExpressFullscreenVideoAd alloc] initWithSlotID:@"广告位id"];self.fullscreenVideoAd.delegate = self;[self.fullscreenVideoAd loadAdData];
在- (void)applicationWillEnterForeground:(UIApplication *)application 里弹出全屏广告
[self.fullscreenVideoAd showAdFromRootViewController:self.window.rootViewController];
五、插屏广告
OC:
引入头文件
#import <BUAdSDK/BUAdSDK.h>
定义属性
@property (nonatomic, strong) BUNativeExpressInterstitialAd *interstitialAd;
加载数据
- (void)loadInterstitialAd{self.interstitialAd = [[BUNativeExpressInterstitialAd alloc] initWithSlotID:@"xxx" imgSize:[BUSize sizeBy:BUProposalSize_Interstitial600_900] adSize:CGSizeMake(300, 450)];self.interstitialAd.delegate = self;[self.interstitialAd loadAdData];
}
在合适的实际弹出插屏
if (self.interstitialAd.isAdValid) {[self.interstitialAd showAdFromRootViewController:self.window.rootViewController];}
遵守协议BUNativeExpresInterstitialAdDelegate
并实现以下代理方法
-(void)nativeExpresInterstitialAdDidClose:(BUNativeExpressInterstitialAd *)interstitialAd{[self loadInterstitialAd];
}
否则再次触发弹出插屏,没反应。
swift
引入头文件
#import <BUAdSDK/BUAdSDK.h>
定义属性
var interstitialAd = BUNativeExpressInterstitialAd.init(slotID: "931527033", imgSize: BUSize.init(by: .interstitial600_600), adSize: CGSize(width: 300,height: 300))
加载数据
interstitialAd.delegate = selfinterstitialAd.loadData()
在合适的时机弹出插屏
if self.interstitialAd.isAdValid{self.interstitialAd.show(fromRootViewController: self)}
遵守协议BUNativeExpresInterstitialAdDelegate
并实现以下代理方法
func nativeExpresInterstitialAdDidClose(_ interstitialAd: BUNativeExpressInterstitialAd) {interstitialAd.loadData()}
六、第一次加载开屏广告逻辑
if([[NSUserDefaults standardUserDefaults] boolForKey:@"isNotFirst"]){[self loadBUAd];}else{AFNetworkReachabilityManager *netManager = [AFNetworkReachabilityManager sharedManager];[netManager startMonitoring]; //开始监听[netManager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status){if (status != AFNetworkReachabilityStatusNotReachable){[self loadBUAd];}}];[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"isNotFirst"];}
#七、先加载QQ开屏,然后在加载穿山甲开屏
- (void)splashAdFailToPresent:(GDTSplashAd *)splashAd withError:(NSError *)error{[self addDanceAd];
}- (void)splashAdWillClosed:(GDTSplashAd *)splashAd{[self addDanceAd];
}
#八、先加载穿山甲开屏,再加载QQ开屏
- (void)splashAdDidClose:(BUSplashAdView *)splashAd {[self addQQAd];[splashAd removeFromSuperview];}- (void)splashAd:(BUSplashAdView *)splashAd didFailWithError:(NSError * _Nullable)error{[self addQQAd];[splashAd removeFromSuperview];
}
九、信息流广告
- (void)loadData {BUAdSlot *slot1 = [[BUAdSlot alloc] init];slot1.ID = @"代码位";slot1.AdType = BUAdSlotAdTypeFeed;BUSize *imgSize = [BUSize sizeBy:BUProposalSize_Feed228_150];slot1.imgSize = imgSize;slot1.position = BUAdSlotPositionFeed;slot1.isSupportDeepLink = YES;self.nativeExpressAdManager = [[BUNativeExpressAdManager alloc] initWithSlot:slot1 adSize:CGSizeMake(TWScreenW, 150*TWScreenW/228)];self.nativeExpressAdManager.delegate = self;[self.nativeExpressAdManager loadAd:1];
}- (void)nativeExpressAdSuccessToLoad:(BUNativeExpressAdManager *)nativeExpressAd views:(NSArray<__kindof BUNativeExpressAdView *> *)views {if (views.count) {self.nativeExpressAdView = views[0];self.nativeExpressAdView.rootViewController = self;[self.nativeExpressAdView render];NSLog(@"【BytedanceUnion】个性化模板拉取广告成功回调");}}- (void)nativeExpressAdFailToLoad:(BUNativeExpressAdManager *)nativeExpressAd error:(NSError *)error {}- (void)nativeExpressAdViewRenderSuccess:(BUNativeExpressAdView *)nativeExpressAdView {self.nativeExpressAdView.frame = CGRectMake(0, TWScreenH-DZVirtualHomeHeight-150*TWScreenW/228, TWScreenW, 150*TWScreenW/228);[self.view addSubview:self.nativeExpressAdView];
}- (void)nativeExpressAdView:(BUNativeExpressAdView *)nativeExpressAdView dislikeWithReason:(NSArray<BUDislikeWords *> *)filterWords {//【重要】需要在点击叉以后 在这个回调中移除视图,否则,会出现用户点击叉无效的情况[nativeExpressAdView removeFromSuperview];}
怎么集成穿山甲(今日头条广告SDK)相关推荐
- unity 接入巨量引擎今日头条广告投放分包SDK
巨量引擎今日头条广告投放分包SDK 在接入分包SDK时,一般也会同时接入今日头条上报SDK Unity 接入巨量引擎 头条上报SDK 1. 分包SDK下载 2.下载完之后,导入到导出的android ...
- 哪种营销方法效果最差_今日头条广告投放形式分几种?头条品牌营销曝光效果哪种广告更好?...
一.今日头条广告形式分几种? 所以,广告主们也想借助今日头条投放广告.那么,今日头条怎么投放广告?今日头条平台有三种投放广告形式,开屏广告.信息流广告.详情页广告: 1.开屏广告 该广告位可以让你的产 ...
- 今日头条极速版怎样签到_今日头条投放广告的费用多少钱?今日头条广告投放完整流程是怎样?...
目前,今日头条广告投放主要有3种扣费模式,分别是按CPC点击扣费.按CPM展示收费.按OCPC/OCPM/CPA效果收费.下面具体介绍下这3种广告收费模式. 1.CPM按展示扣费 当广告展示您才需要付 ...
- 今日头条ocpm计费规则_今日头条广告投放推广新产品选OCPM还是CPA好?是新的计费方式吗?...
相信大多数广告主都知道今日头条广告有CPM.CPC.CPA三种付费方式,那么这个OCPM又是从哪里冒出来的?它到底又是什么?是一种新的计费方式吗? 一.关于今日头条OCPM 1.OCPM定义 官方定义 ...
- 今日头条推广房产的广告需要什么资质?今日头条广告开户找哪里?
随着各地房产开发商的快速发展,客户已经成为房产行业的一大难题,没有客户就意味着没有变现,因此这个问题可以说是每个老板的一个刻不容缓想要处理的难题.今日头条到目前为止已经积累的有7亿的用户数量,一款新闻 ...
- 今日头条广告如何优化?这四个思路至关重要
今日头条广告如何优化?随着互联网的高速发展,在网络平台上投放广告已然成为潮流,而今日头条作为受到大众喜爱的平台之一,有许多广告主想要在今日头条平台内投放广告,但如何优化今日头条广告仍是许多广告主烦恼的 ...
- 今日头条广告投放技巧干货:落地页分析工具
在实际投放过程中,经常会碰见进入落地页的用户数还不错,但实际提交表单数却不高,有时候想优化落地页,却不知从哪里开始入手的情况,如果你曾经遇到过类似这样的问题,那你一定不能错过今天这篇今日头条广告投放干 ...
- 今日头条广告投放入门知识
工欲善其事,必先利其器.熟练掌握今日头条广告投放规则,对每个广告主来说都非常重要,毕竟,再优秀的广告创意也需要符合投放规则才能锦上添花.然而,很多广告主想当然地认为决定广告效果的最终还是自己的预算,和 ...
- 广告投放系统后台html,今日头条广告投放后台如何创建广告?
原标题:今日头条广告投放后台如何创建广告? 一.创建广告组 1.今日头条广告组预算如何设定 您可以通过广告组预算设置该广告组下所有广告计划预算的消费限额,该推广计划的推广信息在消费达到预算后将下线,不 ...
最新文章
- linux(以ubuntu为例)下Android利用ant自动编译、修改配置文件、批量多渠道,打包生成apk文件...
- 链表问题10——两个单链表生成相加链表
- SAP QM 如何将一个附件挂在一个Quality Notification单据上?
- 深入理解 Java 内存模型(转载)
- 运算方法和运算部件三
- pacman安装ubuntu_Ubuntu如何安装pacman
- layer ajax 用法,layer加载遮罩层使用 Ajax Loading Demo
- centos禁用exec_CentOS停用按下Ctrl-Alt-Del 重启系统的功能
- 关于focus的概念
- GBDT 和 AdaBoost
- h330 mini raid卡驱动 linux,戴尔h330阵列卡驱动下载
- SAP-ABAP-OOALV方法实现程序源码,仅供参考
- 2018计算机中文期刊影响因子排名,2018年最新影响因子:839种5分以上期刊名录
- 【VMWARE】克隆linux centos6.5 网络修复笔记
- EXCEL 2010如何分屏/多窗口显示多文件
- 工程伦理和学术道德(2021秋)
- Leecode159:至多包含两个不同字符的最长子串
- 获取ClassName MethodName
- 手动实践3-把握移动端字体设计的七大准则
- 滴滴老年版来了,推出一键打车小程序,电话叫车服务