一、接入SDK
1、将sdk文件手动导入到目标项目中,如下图所示:
2、该SDK需接入其他三方广告,通过pod的方式接入,在Profile中加入如下代码:
pod 'GDTMobSDK', '~> 4.14.40'
pod 'BaiduMobAdSDK', '~> 5.313'
pod 'KSAdSDK', '~> 3.3.51.1'
3、该SDK所依赖的②中的三方库的版本号与您项目中本身存在的库的版本号不一致,请您适配或联系SDK开发者适配。
4、该SDK不是必须依赖②中的三方库,如您不需要某个广告商的资源,也请您联系开发者开发。
二、代码接入
1、初始化
// 导入项目头文件
#import <MTAd/MTAd.h>
// 初始化方式,token 是指运营方提供的与接入方bundle id 绑定了的token
[MTAdApi initXWAdWithToken:@"token"];
// 获取当前sdk 版本号
NSLog(@"=========%@",[MTAdApi MT_version]);
2、服务端竞价相关数据
// 上报内容的key-value内容如下
typedef NS_ENUM(NSUInteger, BidPriceKey) {
/** 代表竞胜方 价格的key */
KEY_WIN_EXPECT_COST_PRICE = 1,
/** 代表竞胜的时候 失败放的最大价格的 key */
KEY_HIGHEST_LOSS_PRICE = 2,
/** 代表是 竞胜败 方 时候的 竞价原因 它的 valut 值 可以是: 0、其他,1、竞争力不足,2、无广告返回,3、未参与竞价) */
KEY_FAILED_REASON = 3,
/** 代表 竞败方 广告厂商 它的值可以是 (0、其他渠道,1、广点通,2、百青藤,3、穿山甲,4、快手,5、京准通,10、Π金引擎) */
KEY_ADN_TYPE = 4,
/** 竞胜败⽅渠道名称 */
KEY_ADN_NAME = 5,
/**
* 竞胜之后调用, 需要在调用广告 show 之前调用
*
* @param params - 必填,其中
* 键 KEY_EXPECT_COST_PRICE 对应值为竞胜出价(单位:分),类型为Int,选填;
* 键 KEY_HIGHEST_LOSS_PRICE 对应值为最大竞败方出价(单位:分),类型为Int,选填。
*/
};
//获取竞价信息后,将会得到一个model 信息如下
@interface PRXServerBidingModel : NSObject
/** 京胜 token */
@property (nonatomic,copy) NSString * token;
/** 京胜 价格 */
@property (nonatomic,copy) NSString * price;
/** 京胜 上报url */
@property (nonatomic,copy) NSString * nurl;
/** 竞败 上报url */
@property (nonatomic,copy) NSString * lurl;
/** 错误码 */
@property (nonatomic,copy) NSString * errorCode;
@end
3、开屏广告接入方式
// 初始化 开屏广告对象
[[MTSplashObject alloc] initWithPlacementId:@"广告位id"];
//遵守 开屏广告对象的代理 代理详情参见 <MTSplashObjectDelegate>
xxx.delegate = self;
// 获取竞价信息 --- 适用服务端竞价
[xxx getBidingInfoResult];
// 获取竞价信息后,媒体方会收到 如下代理(请提前签订delegate)
- (void)mt_splashbidEnd:(MTSplashObject *)splashAd info:(PRXServerBidingModel *)info{
NSLog(@"2开屏广告竞价成功----->%s,error = %@ -- info-%@",__func__,splashAd,info);
}
//服务端竞价 加载广告方式
[xxx bidLoadAd];
//普通模式 加载广告方式
[xxx loadAd];
/**
* 开屏广告素材加载成功
*/
- (void)mt_splashAdDidLoad:(MTSplashObject * __nullable)splashAd{
NSLog(@"2开屏广告素材加载成功----->%s,error = %@",__func__,splashAd);
}
/**
* 开屏广告展示失败
*/
- (void)mt_splashAdFailToPresent:(MTSplashObject * __nullable)splashAd withError:(NSError *)error{
NSLog(@"3开屏广告展示失败----->%s,error = %@",__func__,error);
}
//在广告加载成功之后 才可以展示广告
//支持 开屏广告底部 自定义视图
//支持 开屏广告 自定义跳过按钮
[xxx showAdInWindow:windoww withBottomView:nil skipView:nil];
// 由该sdk提供的广告资源得到竞价结果后请您调用如下代码上报
/**
竞价成功的上报
*/
- (void)sendBidPriceWin:(NSDictionary *_Nullable)winInfo;
/**
竞价失败的上报
*/
- (void)sendBidPriceLoss:(NSDictionary *_Nullable)lossInfo;
其他代理方法
/**
* 应用进入后台时回调
* 详解: 当点击下载应用时会调用系统程序打开,应用切换到后台
*/
- (void)mt_splashAdApplicationWillEnterBackground:(MTSplashObject * __nullable)splashAd
{
NSLog(@"4应用进入后台时回调----->%s",__func__);
}
/**
* 开屏广告曝光回调
*/
- (void)mt_splashAdExposured:(MTSplashObject * __nullable)splashAd
{
NSLog(@"5开屏广告曝光回调----->%s",__func__);
}
/**
* 开屏广告点击回调
*/
- (void)mt_splashAdClicked:(MTSplashObject * __nullable)splashAd
{
NSLog(@"6开屏广告点击回调----->%s",__func__);
}
/**
* 开屏广告将要关闭回调
*/
- (void)mt_splashAdWillClosed:(MTSplashObject * __nullable)splashAd
{
NSLog(@"7开屏广告将要关闭回调----->%s",__func__);
}
/**
* 开屏广告关闭回调
*/
- (void)mt_splashAdClosed:(MTSplashObject * __nullable)splashAd
{
NSLog(@"8开屏广告关闭回调----->%s",__func__);
}
- (void)mt_splashAdClickSkip:(MTSplashObject *)splashAd
{
NSLog(@"9点击了跳过按钮");
}
/**
* 开屏广告点击以后即将弹出全屏广告页
*/
- (void)mt_splashAdWillPresentFullScreenModal:(MTSplashObject * __nullable)splashAd
{
NSLog(@"10开屏广告点击以后即将弹出全屏广告页----->%s",__func__);
}
/**
* 开屏广告点击以后弹出全屏广告页
*/
- (void)mt_splashAdDidPresentFullScreenModal:(MTSplashObject * __nullable)splashAd
{
NSLog(@"11开屏广告点击以后弹出全屏广告页----->%s",__func__);
}
/**
* 点击以后全屏广告页将要关闭
*/
- (void)mt_splashAdWillDismissFullScreenModal:(MTSplashObject * __nullable)splashAd
{
NSLog(@"12点击以后全屏广告页将要关闭----->%s",__func__);
}
/**
* 点击以后全屏广告页已经关闭
*/
- (void)mt_splashAdDidDismissFullScreenModal:(MTSplashObject * __nullable)splashAd
{
NSLog(@"13点击以后全屏广告页已经关闭----->%s",__func__);
}
/**
* 开屏广告剩余时间回调
*/
- (void)mt_splashAdLifeTime:(NSUInteger)time splashAd:(MTSplashObject * _Nullable)splashAd
{
NSLog(@"14开屏广告剩余时间回调----->%s",__func__);
}
4、激励视频 接入方式
// 激励视频初始化
xxx = [[MTRewardVideoAd alloc] initWithPlacementId:@"广告位"];
// 签代理 遵守代理 <MTRewardVideoAdDelegate>
xxx.delegate = self;
//服务端竞价 --- 获取竞价信息
[xxx getBidingInfoResult];
//收到竞价信息后
- (void)mt_rewardVideoBidEnd:(MTRewardVideoAd *)rewardedVideoAd info:(PRXServerBidingModel *)info{
self.statusLabel.text = @"竞价成功";
}
//服务端竞价方式 -- 加载广告
[xxx bidLoadAd];
//普通模式下 --- 加载广告
[xxx loadAd];
/**
广告数据加载成功回调
@param rewardedVideoAd MTRewardVideoAd 实例
*/
- (void)mt_rewardVideoAdDidLoad:(MTRewardVideoAd *)rewardedVideoAd
{
self.statusLabel.text = @"广告数据加载成功";
}
/**
视频广告各种错误信息回调
@param rewardedVideoAd MTRewardVideoAd 实例
@param error 具体错误信息
*/
- (void)mt_rewardVideoAd:(MTRewardVideoAd *)rewardedVideoAd didFailWithError:(NSError *)error
{
NSLog(@"%s",__FUNCTION__);
if (error.code == 4014) {
NSLog(@"请拉取到广告后再调用展示接口");
self.statusLabel.text = @"请拉取到广告后再调用展示接口";
} else if (error.code == 4016) {
NSLog(@"应用方向与广告位支持方向不一致");
self.statusLabel.text = @"应用方向与广告位支持方向不一致";
} else if (error.code == 5012) {
NSLog(@"广告已过期");
self.statusLabel.text = @"广告已过期";
} else if (error.code == 4015) {
NSLog(@"广告已经播放过,请重新拉取");
self.statusLabel.text = @"广告已经播放过,请重新拉取";
} else if (error.code == 5002) {
NSLog(@"视频下载失败");
self.statusLabel.text = @"视频下载失败";
} else if (error.code == 5003) {
NSLog(@"视频播放失败");
self.statusLabel.text = @"视频播放失败";
} else if (error.code == 5004) {
NSLog(@"没有合适的广告");
self.statusLabel.text = @"没有合适的广告";
} else if (error.code == 5013) {
NSLog(@"请求太频繁,请稍后再试");
self.statusLabel.text = @"请求太频繁,请稍后再试";
} else if (error.code == 3002) {
NSLog(@"网络连接超时");
self.statusLabel.text = @"网络连接超时";
}
NSLog(@"ERROR: %@", error);
}
// 视频加载成功后,展示激励视频, 注意 controller 不能为空
[xxx showAdFromRootViewController:controller];
由sdk竞价成功或失败 上报方法
/**
竞价成功的上报
*/
- (void)sendBidPriceWin:(NSDictionary *_Nullable)winInfo;
/**
竞价失败的上报
*/
- (void)sendBidPriceLoss:(NSDictionary *_Nullable)lossInfo;
其他代理方法
/**
视频播放页即将展示回调
@param rewardedVideoAd MTRewardVideoAd 实例
*/
- (void)mt_rewardVideoAdWillVisible:(MTRewardVideoAd *)rewardedVideoAd
{
}
/**
视频广告曝光回调
@param rewardedVideoAd MTRewardVideoAd 实例
*/
- (void)mt_rewardVideoAdDidExposed:(MTRewardVideoAd *)rewardedVideoAd
{
self.statusLabel.text = @"广告已曝光";
}
/**
视频播放页关闭回调
@param rewardedVideoAd MTRewardVideoAd 实例
*/
- (void)mt_rewardVideoAdDidClose:(MTRewardVideoAd *)rewardedVideoAd
{
self.statusLabel.text = @"广告已关闭";
}
/**
视频广告信息点击回调
@param rewardedVideoAd MTRewardVideoAd 实例
*/
- (void)mt_rewardVideoAdDidClicked:(MTRewardVideoAd *)rewardedVideoAd
{
self.statusLabel.text = @"广告已点击";
}
/**
视频广告播放达到激励条件回调
@param rewardedVideoAd MTRewardVideoAd 实例
*/
- (void)mt_rewardVideoAdDidRewardEffective:(MTRewardVideoAd *)rewardedVideoAd
{
NSLog(@"播放达到激励条件");
}
/**
视频广告视频播放完成
@param rewardedVideoAd MTRewardVideoAd 实例
*/
- (void)mt_rewardVideoAdDidPlayFinish:(MTRewardVideoAd *)rewardedVideoAd
{
NSLog(@"视频播放结束");
self.statusLabel.text = @"视频播放结束";
}
5、插屏广告 接入方式
// 插屏广告对象初始化方式
xxx = [[MTInterstitialAd alloc] initWithPlacementId:@"代码位"];
// 遵守代理 <MTInterstitialAdDelegate>
xxx.delegate = self;
//服务端竞价 获取竞价信息
[xxx getBidingInfoResult];
//获取竞价信息 得到的数据 回调信息
- (void)mt_unifiedInterstitialBidEnd:(MTInterstitialAd *)splashAd info:(PRXServerBidingModel *)info {
self.statusLabel.text = @"竞价数据请求成功";
}
//服务端竞价方式 -- 加载广告
[xxx bidLoadAd];
//普通模式下 --- 加载广告
[xxx loadAd]
// 加载结果的回调
/**
* 广告预加载成功回调
* 详解:当接收服务器返回的广告数据成功且预加载后调用该函数
*/
- (void)mt_unifiedInterstitialSuccessToLoadAd:(MTInterstitialAd *)unifiedInterstitial{
self.statusLabel.text = @"广告数据请求成功";
}
/**
* 广告预加载失败回调
* 详解:当接收服务器返回的广告数据失败后调用该函数
*/
- (void)mt_unifiedInterstitialFailToLoadAd:(MTInterstitialAd *)interstitialAd error:(NSError *)error
{
self.statusLabel.text = @"广告数据加载失败";
}
// 广告加载成功后 展示开屏 controller 不能为空
[xxx presentAdFromRootViewController:controller];
竞价结果汇报方法
/**
竞价成功的上报
*/
- (void)sendBidPriceWin:(NSDictionary *_Nullable)winInfo;
/**
竞价失败的上报
*/
- (void)sendBidPriceLoss:(NSDictionary *_Nullable)lossInfo;
其他代理回调方法
/**
* 广告预加载成功回调
* 详解:当接收服务器返回的广告数据成功且预加载后调用该函数
*/
- (void)mt_unifiedInterstitialSuccessToLoadAd:(MTInterstitialAd *)unifiedInterstitial{
self.statusLabel.text = @"广告数据请求成功";
NSLog(@"%s,%@",__func__,self);
}
/**
* 广告预加载失败回调
* 详解:当接收服务器返回的广告数据失败后调用该函数
*/
- (void)mt_unifiedInterstitialFailToLoadAd:(MTInterstitialAd *)interstitialAd error:(NSError *)error
{
self.statusLabel.text = @"广告数据加载失败";
NSLog(@"%s,%@",__func__,self);
NSLog(@"error==%@",error.description);
}
/**
* 插屏广告将要展示回调
* 详解: 插屏广告即将展示回调该函数
*/
- (void)mt_unifiedInterstitialWillPresentScreen:(MTInterstitialAd *)interstitialAd
{
NSLog(@"%s,%@",__func__,self);
}
/**
* 插屏广告视图展示成功回调
* 详解: 插屏广告展示成功回调该函数
*/
- (void)mt_unifiedInterstitialDidPresentScreen:(MTInterstitialAd *)interstitialAd
{
NSLog(@"%s,%@",__func__,self);
}
/**
* 插屏广告展示结束回调
* 详解: 插屏广告展示结束回调该函数
*/
- (void)mt_unifiedInterstitialDidDismissScreen:(MTInterstitialAd *)interstitialAd
{
self.statusLabel.text = @"插屏广告展示结束回调";
NSLog(@"%s,%@",__func__,self);
}
/**
* 详解:当点击应用下载或者广告调用系统程序打开时调用
*/
- (void)mt_interstitialApplicationWillEnterBackground:(MTInterstitialAd *)interstitialAd
{
NSLog(@"%s,%@",__func__,self);
}
/**
* 插屏广告曝光回调
*/
- (void)mt_interstitialWillExposure:(MTInterstitialAd *)interstitialAd
{
NSLog(@"%s,%@",__func__,self);
}
/**
* 插屏广告点击回调
*/
- (void)mt_unifiedInterstitialClicked:(MTInterstitialAd *)interstitialAd
{
NSLog(@"%s,%@",__func__,self);
self.statusLabel.text = @"插屏广告点击回调";
}
/**
* 点击插屏广告以后即将弹出全屏广告页
*/
- (void)mt_unifiedInterstitialAdWillPresentFullScreenModal:(MTInterstitialAd *)interstitialAd
{
NSLog(@"%s,%@",__func__,self);
}
/**
* 点击插屏广告以后弹出全屏广告页
*/
- (void)mt_unifiedInterstitialAdDidPresentFullScreenModal:(MTInterstitialAd *)interstitialAd
{
NSLog(@"%s,%@",__func__,self);
}
/**
* 全屏广告页将要关闭
*/
- (void)mt_unifiedInterstitialAdWillDismissFullScreenModal:(MTInterstitialAd *)interstitialAd
{
NSLog(@"%s,%@",__func__,self);
}
/**
* 全屏广告页被关闭
*/
- (void)mt_unifiedInterstitialAdDidDismissFullScreenModal:(MTInterstitialAd *)interstitialAd
{
NSLog(@"%s,%@",__func__,self);
self.statusLabel.text = @"全屏广告页被关闭";
}
/**
* 当点击下载应用时会调用系统程序打开其它App或者Appstore时回调
*/
- (void)mt_unifiedInterstitialWillLeaveApplication:(MTInterstitialAd *)unifiedInterstitial{
NSLog(@"%s,%@",__func__,self);
}
/**
* 插屏广告曝光回调
*/
- (void)mt_unifiedInterstitialWillExposure:(MTInterstitialAd *)unifiedInterstitial{
NSLog(@"%s,%@",__func__,self);
self.statusLabel.text = @"插屏广告曝光回调";
}
/**
* 插屏视频广告 player 播放状态更新回调
*/
- (void)mt_unifiedInterstitialAd:(MTInterstitialAd *)unifiedInterstitial playerStatusChanged:(MTMediaPlayerStatus)status{
NSLog(@"%s,%@",__func__,self);
}
/**
* 插屏视频广告详情页 WillPresent 回调
*/
- (void)mt_unifiedInterstitialAdViewWillPresentVideoVC:(MTInterstitialAd *)unifiedInterstitial{
NSLog(@"%s,%@",__func__,self);
}
/**
* 插屏视频广告详情页 DidPresent 回调
*/
- (void)mt_unifiedInterstitialAdViewDidPresentVideoVC:(MTInterstitialAd *)unifiedInterstitial{
NSLog(@"%s,%@",__func__,self);
}
/**
* 插屏视频广告详情页 WillDismiss 回调
*/
- (void)mt_unifiedInterstitialAdViewWillDismissVideoVC:(MTInterstitialAd *)unifiedInterstitial{
NSLog(@"%s,%@",__func__,self);
}
/**
* 插屏视频广告详情页 DidDismiss 回调
*/
- (void)mt_unifiedInterstitialAdViewDidDismissVideoVC:(MTInterstitialAd *)unifiedInterstitial{
NSLog(@"%s,%@",__func__,self);
}
6、信息流广告接入方式
// 信息流对象初始化方式 -- 服务端竞价方式必须使用这种方式初始化
xxx = [[MTUnifiedNativeAd alloc] initWithPlacementId:@"广告位"];
[self.unifiedNativeAd getBidingInfoResultWithCount:1];
// 信息流代理 遵守 <MTUnifiedNativeAdDelegate,MTUnifiedNativeAdViewDelegate,MTMediaViewDelegate>
xxx.delegate = self;
// 获取竞价信息 -- 传入期待的信息流数量
[xxx getBidingInfoResultWithCount:1];
- (void)mt_unifiedNativeBid:(MTUnifiedNativeAd *)object bidInfo:(PRXServerBidingModel *)info {
NSLog(@"信息流竞价成功");
}
// 正常模式下,加载广告方式
[self.unifiedNativeAd loadAdWithAdCount:1];
//服务端竞价方式, 加载广告
[xxx bidLoadAd];
// 得到加载成功后 广告资源,或者 失败后的信息
- (void)mt_unifiedNativeAdLoaded:(NSArray<MTUnifiedNativeAdObject *> *)unifiedNativeAdDataObjects error:(NSError *)error
{
if (unifiedNativeAdDataObjects.count > 0) {
}
NSLog(@"error = %@",error);
}
// 由该sdk提供的广告资源得到竞价结果后请您调用如下代码上报
/**
竞价成功的上报
*/
- (void)sendBidPriceWin:(NSDictionary *_Nullable)winInfo;
/**
竞价失败的上报
*/
- (void)sendBidPriceLoss:(NSDictionary *_Nullable)lossInfo;
其他代理方法
/**
广告曝光回调
@param unifiedNativeAdView MTUnifiedNativeAdView 实例
*/
- (void)mt_unifiedNativeAdViewWillExpose:(MTUnifiedNativeAdView *)unifiedNativeAdView
{
NSLog(@"XW曝光回调");
}
/**
广告点击回调
@param unifiedNativeAdView MTUnifiedNativeAdView 实例
*/
- (void)mt_unifiedNativeAdViewDidClick:(MTUnifiedNativeAdView *)unifiedNativeAdView
{
NSLog(@"XW点击回调");
}
/**
广告详情页关闭回调
@param unifiedNativeAdView MTUnifiedNativeAdView 实例
*/
- (void)mt_unifiedNativeAdDetailViewClosed:(MTUnifiedNativeAdView *)unifiedNativeAdView
{
NSLog(@"XW广告详情页关闭回调");
}
/**
当点击应用下载或者广告调用系统程序打开时调用
@param unifiedNativeAdView MTUnifiedNativeAdView 实例
*/
- (void)mt_unifiedNativeAdViewApplicationWillEnterBackground:(MTUnifiedNativeAdView *)unifiedNativeAdView
{
NSLog(@"XW");
}
/**
广告详情页面即将展示回调
@param unifiedNativeAdView MTUnifiedNativeAdView 实例
*/
- (void)mt_unifiedNativeAdDetailViewWillPresentScreen:(MTUnifiedNativeAdView *)unifiedNativeAdView
{
NSLog(@"XW广告详情页面即将展示回调");
}
/**
视频广告播放状态更改回调
@param unifiedNativeAdView 实例
@param status 视频广告播放状态
@param userInfo 视频广告信息
*/
- (void)mt_unifiedNativeAdView:(MTUnifiedNativeAdView *)unifiedNativeAdView playerStatusChanged:(MTMediaPlayerStatus)status userInfo:(NSDictionary *)userInfo
{
NSLog(@"");
NSLog(@"视频广告状态变更");
switch (status) {
case MTMediaPlayerStatusError:
NSLog(@"视频播放出错");
//开发者可以在这里添加逻辑
default:
break;
}
}
- (void)mt_mediaViewDidTapped:(MTMediaView *)mediaView{
NSLog(@"mt_mediaViewDidTapped");
}
/**
播放完成回调
@param mediaView 播放器实例
*/
- (void)mt_mediaViewDidPlayFinished:(MTMediaView *)mediaView{
NSLog(@"mt_mediaViewDidPlayFinished");
}