一、接入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");
}