iOS SDK
一、SDK接入配置
1. cocoapod引入
在podfile文件中添加:
#核心库,需要指定对应的版本号
pod 'JuChengAds', '5.1.1'
2. Other Linker Flags
在Xcode中选择项目的Targets->Build Settings,配置Other Linker Flags 增加 -ObjC。
3. 添加HTTP权限
- 工程plist文件设置,点击右边的information Property List后边的 "+" 展开
添加 App Transport Security Settings,先点击左侧展开箭头,再点右侧加号,Allow Arbitrary Loads 选项自动加入,修改值为 YES。 SDK API 已经全部支持HTTPS,但是广告主素材存在非HTTPS情况。
注意:Allow Arbitrary Loads in Web Content key存在时会忽略Allow Arbitrary Loads的设置(iOS10之后)
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
4. 添加定位权限
该权限非必须,sdk不包含任何请求定位权限的代码,也不会主动请求定位权限。
工程info.plist文件设置,点击右边的information Property List后边的 "+" 展开 添加Privacy - Location When In Use Usage Description。
5. 运行环境配置
- 支持系统 iOS 11.0 及以上;
- SDK编译环境 Xcode 12.0 + ;
- 支持架构:x86-64, armv7, arm64
6. 添加依赖库
工程需要在TARGETS -> Build Phases中找到Link Binary With Libraries,点击“+”,依次添加下列依赖库
- CoreML.framework
- libc++abi.tbd
- StoreKit.framework
- CFNetwork.framework
- CoreMedia.framework
- AdSupport.framework
- CoreMotion.framework
- MediaPlayer.framework
- CoreGraphics.framework
- AVFoundation.framework
- CoreLocation.framework
- CoreTelephony.framework
- SafariServices.framework
- MobileCoreServices.framework
- WebKit.framework
- SystemConfiguration.framework
- ImageIO.framework
- AudioToolbox.framework
- libc++.tbd
- libz.tbd
- libbz2.tbd
- libsqlite3.tbd
二、SDK初始化说明
1. SDK初始化
JuChengAds 类是整个 SDK 设置的入口和接口。 初始化代码需尽早执行,最好写在APP启动回调里:
//引入聚合SDK库
#import <JuChengAds/JuChengAdsSDK.h>
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// SDK初始化接口
JuChengAds* juChengAds = [JuChengAds shareInstance];
// 是否开启调试模式、默认为false,不开启
[juChengAds enableDebugMode:true];
[juChengAds initialize:@"appId"];
}
2. 启动时预加载广告(非必须)
激励视频、半屏插屏、全屏插屏可以在启动时预加载,加快第一次的展示速度。 参考代码如下:
[juChengAds preloadAds:@"激励视频广告位id" interstitialId:@"插屏广告位id" fullScreenId:@"全屏广告位id" userId:@"用户id"];
三、开屏广告
1. 主要API
JuChengRequest
| 属性名 | 类型 | 属性介绍 |
|---|---|---|
| userId | NSString | 【可选】,媒体用户ID。 |
| placementId | NSString | 【必传】,广告位ID。 |
| options | NSDictionary<NSString *, NSString *> | 【可选】,服务端激励回传时,扩展参数。 |
JuChengSplash
| 方法名 | 方法介绍 |
|---|---|
| - (instancetype)initWithRequest:(JuChengRequest *)request | 初始化splash ad对象。参数说明:request 广告请求对象。 |
| - (BOOL)isAdReady | 返回广告是否可展示。 |
| -(void)loadAndShowAd | 广告发起请求并自动展示。 |
| - (void)loadAd | 发起拉取广告请求,只拉取不展示。 |
| - (void)showAd:(UIWindow *)window | 展示广告。 |
JuChengSplashAdDelegate
| 方法名 | 方法介绍 |
|---|---|
| -(void) onSplashAdShowed | 广告曝光回调。 |
| -(void) onSplashAdLoaded:(NSString *) placementId | 广告加载成功回调。参数说明:placementId 广告为id。 |
| -(void) onSplashAdLoadFailed:(NSString *) placementId error:(NSError *)error | 广告加载失败回调。参数说明:placementId 广告为id。error 具体错误信息。 |
| -(void) onSplashAdClicked | 广告点击回调。 |
| -(void) onSplashAdClosed | 广告关闭回调。 |
| -(void) onSplashAdSkiped | 广告跳过回调。 |
2. 开屏广告加载并展示
@property (nonatomic, strong) JuChengSplash *splash;
JuChengRequest *request = [JuChengRequest request];
request.placementId = @"广告位id";
self.splash = [[JuChengSplash alloc] initWithRequest:request];
self.splash.delegate = self;
self.splash.rootViewController = self;
[self.splash loadAndShowAd];
四、激励视频广告
1. 主要API
JuChengRequest
| 属性名 | 类型 | 属性介绍 |
|---|---|---|
| userId | NSString | 【可选】,媒体用户ID。 |
| placementId | NSString | 【必传】,广告位ID。 |
| options | NSDictionary<NSString *, NSString *> | 【可选】,服务端激励回传时,扩展参数。 |
JuChengReward
| 方法名 | 方法介绍 |
|---|---|
| - (instancetype)initWithRequest:(JuChengRequest *)request | 初始化reward ad对象。参数说明:request 广告请求对象。 |
| - (BOOL)isAdReady | 返回广告是否可展示。 |
| - (void)loadAd | 发起拉取广告请求,只拉取不展示。 |
| - (void)showAd:(UIViewController *)rootViewController options:(NSDictionary<NSString *, NSString *> * _Nullable)options | 展示广告。参数说明:rootViewController 显示广告的容器。options 激励视频广告获得奖励时,服务器回调的扩展参数。 |
JuChengRewardAdDelegate
| 方法名 | 方法介绍 |
|---|---|
| -(void) onRewardAdLoaded:(NSString *) placementId | 广告加载成功回调。参数说明:placementId 广告位id。 |
| -(void) onRewardAdLoadFailed:(NSString *) placementId error:(NSError *)error | 广告加载失败回调。参数说明:placementId 广告为id。error 具体错误信息。 |
| -(void) onRewardAdPlayStarted | 广告曝光回调。 |
| -(void) onRewardAdPlayFinished | 广告播放完成回调。 |
| -(void) onRewardEarned:(NSString *_Nonnull) transId | 获得奖励。参数说明:transId 流水号。 |
| -(void) onRewardAdClicked | 广告点击回调。 |
| -(void) onRewardAdClosed | 广告关闭回调。 |
| -(void) onRewardAdSkiped | 广告跳过回调。 |
| -(void) onRewardAdPlayFailed:(NSString *) placementId error:(NSError *)error | 广告激播放失败回调。参数说明:placementId 广告位id。error 具体错误信息。 |
2. 广告加载
@property (nonatomic, strong) JuChengReward *rewardVideoAd;
JuChengRequest *request = [JuChengRequest request];
request.userId = :@"用户id";
request.placementId = @"广告位id";
request.options = @{@"key1":@"value1"};
self.rewardVideoAd = [[JuChengReward alloc] initWithRequest:request];
self.rewardVideoAd.delegate = self;
[self.rewardVideoAd loadAd];
3. 广告展示
// 在激励视频广告加载成功回调里执行showAd,需要先判断广告状态是否ready
if (self.rewardVideoAd.isAdReady) {
[self.rewardVideoAd showAd:self options:nil];
}
五、信息流广告
1. 主要API
JuChengRequest
| 属性名 | 类型 | 属性介绍 |
|---|---|---|
| userId | NSString | 【可选】,媒体用户ID。 |
| placementId | NSString | 【必传】,广告位ID。 |
| options | NSDictionary<NSString *, NSString *> | 【可选】,服务端激励回传时,扩展参数。 |
JuChengNativeAdManager
| 方法名 | 方法介绍 |
|---|---|
| - (instancetype)initWithRequest:(JuChengRequest *)request | 初始化方法。参数说明:request(广告请求对象)。 |
| - (void)loadAdDataWithCount:(NSInteger)count | 请求广告。参数说明:count (一次请求广告数量,数值区间[1,3])。 |
| - (NSArray<JuChengNativeAd *> * _Nullable)getAllNativeAds | 广告拉取成功后,获取广告集合。 |
JuChengNativeAdManagerDelegate
| 方法名 | 方法介绍 |
|---|---|
| - (void)onNativeAdLoaded:(JuChengNativeAdManager *)nativeAdsManager | 广告成功加载。 |
| - (void)onNativeAdLoadFailed:(NSError *)error; | 广告加载失败。参数说明:error(报错信息)。 |
JuChengNativeAdView
| 方法名 | 方法介绍 |
|---|---|
| + (instancetype) initAdView; | 初始化方法。 |
| - (void)refreshData:(JuChengNativeAd *)nativeAd | 刷新广告数据 |
| - (UIView *)getView | 获取View |
JuChengNativeAdViewDelegate
| 方法名 | 方法介绍 |
|---|---|
| - (void)nativeExpressAdViewRenderSuccess:(JuChengNativeAdView *)nativeExpressAdView | 广告渲染成功 |
| - (void)nativeExpressAdViewRenderFail:(NSError *)error | 广告渲染失败。 |
| - (void)nativeAdViewDidClick | 广告点击回调 |
| - (void)dislikeWithReason:(NSString *) reason | dislike弹窗选择后的回调,有穿山甲广告源时,必须在该方法里移除广告 |
2. 广告加载
JuChengRequest *request = [JuChengRequest request];
request.placementId = @"广告位id";
request.userId = @"用户id"
if (self.nativeAdManager == nil) {
self.nativeAdManager = [[JuChengNativeAdManager alloc] initWithRequest:request];
}
self.nativeAdManager.delegate = self;
self.nativeAdManager.adSize = CGSizeMake(320, 150);
[self.nativeAdManager loadAdDataWithCount:1];
3. 广告展示
self.adView = [JuChengNativeAdView initAdView];
UIViewController *rootViewController = [JuChengUtil getCurrentController];
[adContainer addSubview:self.adView.getView];
// 调整广告view的frame
self.adView.frame = adContainer.bounds;
self.adView.delegate = self;
self.adView.viewController = rootViewController;
[self.adView refreshData:self.nativeAd];
4. 注意事项
穿山甲信息流关闭时,需要在- (void)dislikeWithReason:(NSString *) reason回调方法里,主动remove掉广告,否则有些广告会无法关闭,影响收益。
六、Banner广告
1. 主要API
JuChengRequest
| 属性名 | 类型 | 属性介绍 |
|---|---|---|
| userId | NSString | 【可选】,媒体用户ID。 |
| placementId | NSString | 【必传】,广告位ID。 |
| options | NSDictionary<NSString *, NSString *> | 【可选】,服务端激励回传时,扩展参数。 |
JuChengBanner
| 方法名 | 方法介绍 |
|---|---|
| - (instancetype)initWithRequest:(JuChengRequest *)request | 构造方法。参数说明:request(广告请求对象) |
| - (instancetype)initWithRequest:(JuChengRequest *)request expectSize:(CGSize)expectSize | 构造方法。参数说明:request(广告请求对象), expectSize banner尺寸 |
| - (void)loadAd | 加载广告 |
| - (BOOL)isAdReady | 广告是否有效 |
| - (UIView *)getView | 获取广告view |
JuChengBannerDelegate
| 方法名 | 方法介绍 |
|---|---|
| - (void)onBannerAdLoaded:(JuChengBanner *)bannerAdView | 广告成功加载。参数说明:bannerAdView(banner对象)。 |
| - (void)onBannerAdLoadFailed:(NSError *)error | 广告加载失败。参数说明:error(报错信息) |
| - (void)onBannerAdClicked | 广告点击回调 |
2. 广告加载
JuChengRequest *request = [JuChengRequest request];
request.placementId = @"广告位id";
JuChengBanner *bannerView = [[JuChengBanner alloc] initWithRequest:request];
bannerView.delegate = self;
bannerView.viewController = self;
[bannerView loadAd];
3. 广告展示
//在加载成功的回调方法(onBannerAdLoaded)里可以设置广告view的frame
CGSize adSize = bannerAdView.adSize;
self.bannerView.getView.frame = CGRectMake(0, 0, adSize.width, adSize.height);
// 在显示的时候把广告view添加到显示的容器中
[self.view addSubview: self.bannerView.getView];
七、插屏广告
1. 主要API
JuChengRequest
| 属性名 | 类型 | 属性介绍 |
|---|---|---|
| userId | NSString | 【可选】,媒体用户ID。 |
| placementId | NSString | 【必传】,广告位ID。 |
| options | NSDictionary<NSString *, NSString *> | 【可选】,服务端激励回传时,扩展参数。 |
JuChengInterstitial
| 方法名 | 方法介绍 |
|---|---|
| - (instancetype)initWithRequest:(JuChengRequest *)request; | 初始化 ad对象。参数说明:request 广告请求对象。 |
| - (BOOL)isAdReady | 返回广告是否可展示。 |
| - (void)loadAd | 发起拉取广告请求,只拉取不展示。 |
| - (void)showAd:(UIViewController *)rootViewController | 展示广告。 |
JuChengInterstitialAdDelegate
| 方法名 | 方法介绍 |
|---|---|
| -(void) onInterstitialAdLoaded:(NSString *) placementId | 广告加载成功回调。参数说明:placementId 广告为id。 |
| -(void) onInterstitialAdLoadFailed:(NSString *) placementId error:(NSError *)error | 广告加载失败回调。参数说明:placementId 广告为id。error 具体错误信息。 |
| -(void) onInterstitialAdPlayStarted | 广告曝光回调。 |
| -(void) onInterstitialAdPlayFinished | 广告播放完成回调。 |
| -(void) onInterstitialAdClicked | 广告点击回调。 |
| -(void) onInterstitialAdClosed | 广告关闭回调。 |
| -(void) onInterstitialAdSkiped | 广告跳过回调。 |
2. 广告加载
@property (nonatomic, strong) JuChengInterstitial *intersititialAd;
JuChengRequest *request = [JuChengRequest request];
request.placementId = @"广告位id";
self.intersititialAd = [[JuChengInterstitial alloc] initWithRequest:request];
self.intersititialAd.delegate = self;
// 加载广告
[self.intersititialAd loadAd];
3. 广告展示
// 在插屏广告加载成功回调里执行showAd,需要先判断广告状态是否ready
if (self.intersititialAd.isAdReady) {
[self.intersititialAd showAd:self];
}