章鱼聚合 SDK-IOS 接入文档
一、iOS14 适配指南
1.1、简介
iOS14 后的系统,根据苹果政策要求,需要请求用户授权,访问与应用相关的数据以跟踪用户或设备。我们建议流量等待方法回调完成后处理广告相关逻辑,这样如果用户授权使用 IDFA 信息,SDK 可以使用 IDFA 进行广告请求,获取更好的广告投放效果,如果用户拒绝此请求,应用获取到的 IDFA 将自动清零,可能会导致您的广告收入的降低。
访问苹果政策说明了解更多信息。
1.2、获取 App Tracking Transparency 授权(弹窗授权获取 IDFA)
如果想在流量中显示 App Tracking Transparency 授权来获取 IDFA,需要在 Info.plist 中添加 NSUserTrackingUsageDescription,描述获取 IDFA 的用途。例如:
<key>NSUserTrackingUsageDescription</key>
<string>您的允许将用于个性化广告投放</string>
该描述将用于授权 IDFA 的弹窗提示中,如下所示: 弹窗小字文案建议:
- 获取标记权限向您提供更优质、安全的个性化服务及内容,未经同意我们不会用于其他目的;开启后,您也可以前往系统 “ 设置-隐私 ” 中随时关闭。
- 获取 IDFA 标记权限向您提供更优质、安全的个性化服务及内容;开启后,您也可以前往系统 “ 设置-隐私 ” 中随时关闭。
展示授权弹窗需要调用 requestTrackingAuthorizationWithCompletionHandler:
方法。我们建议流量等待方法回调完成后处理广告相关逻辑,这样如果用户授权使用 IDFA 信息,Octopus iOS SDK 可以使用 IDFA 进行广告请求。代码如下:
#import <AppTrackingTransparency/AppTrackingTransparency.h>
#import <AdSupport/AdSupport.h>
#import <OctopusSDK/OctopusSDK.h>
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[OctopusSDKManager configureWithApplicationID:@"从 Octopus 申请的 AppID"];
// 请求idfa,此方法在iOS15上需要放到applicationDidBecomeActive内执行,可能会被其他询问覆盖
[self requestIDFA];
}
- (void)requestIDFA {
if (@available(iOS 14, *)) {
[ATTrackingManager requestTrackingAuthorizationWithCompletionHandler:^(ATTrackingManagerAuthorizationStatus status) {
// 授权完成回调,block可能不在主线程,如果在此请求广告请先调用回到主线程
}];
}
}
1.3、SKAdNetwork
SKAdNetwork(SKAN)是 Apple 的归因解决方案,可帮助广告客户在保持用户隐私的同时衡量广告活动。 访问SKAdNetwork 说明了解更多信息。
- 应用编译环境升级至
Xcode 12.0
及以上版本 - 将 SKAdNetwork ID 添加到 info.plist 中,以保证 SKAdNetwork 的正确运行
<key>SKAdNetworkItems</key>
<array>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>238da6jt44.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>22mmun2rn5.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>f7s53z58qe.skadnetwork</string>
</dict>
</array>
二、自动部署配置
2.1、确保您的开发及部署环境符合以下标准
1、开发工具:推荐 Xcode 12 及以上版本
2、部署目标:iOS 11.0 及以上版本
2.2、接入配置
自动部署可以省去您工程配置的时间。iOS SDK 会通过 CocoaPods 进行发布,推荐您使用自动部署。
2.2.1、安装 CocoaPods
CocoaPods 是一个 Swift 和 Objective-C 项目的依赖管理器,如果您未安装过 cocoaPods,可以通过以下命令行进行安装。更多详情请访问CocoaPods 官网。
$ sudo gem install cocoapods
2.2.2、使用 CocoaPods 进行 SDK 部署
在 podfile 文件中加入以下代码即可接入成功
pod 'OctopusAdSDK'
pod 'OctAdCsjAdapter'
pod 'OctAdGdtAdapter'
pod 'OctAdKsAdapter'
pod 'OctAdBdAdapter'
pod 'OctAdMobAdapter'
2.2.3、升级 SDK
升级 SDK 时,首先要更新 repo 库,执行命令:
$ pod repo update
之后重新执行如下命令进行安装即可升级至最新版 SDK
$ pod install
2.2.4、设置允许 http 连接
在工程的 Info.plist 文件中,设置 App Transport Security Settings 选项下 Allow Arbitrary Loads 值为 YES,对应 plist 内容为
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
2.2.5、设置 SDK 关联方式
选择项目->TARGET->Frameworks->KSAdSDK.framework 选择 Embed 方式为 Embed&Sign
2.2.6、设置谷歌 SDK
更新 Info.plist
- GADApplicationIdentifier 是从谷歌平台获取的 appid;
- SKAdNetworkItems 是三方的 id;
如谷歌 demo 提供的 id:
<key>GADApplicationIdentifier</key>
<string>ca-app-pub-3940256099942544~1458002511</string>
<key>SKAdNetworkItems</key>
<array>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>cstr6suwn9.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>4fzdc2evr5.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>4pfyvq9l8r.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>2fnua5tdw4.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>ydx93a7ass.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>5a6flpkh64.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>p78axxw29g.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>v72qych5uu.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>ludvb6z3bs.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>cp8zw746q7.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>c6k4g5qg8m.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>s39g8k73mm.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>3qy4746246.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>3sh42y64q3.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>f38h382jlk.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>hs6bdukanm.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>prcb7njmu6.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>v4nxqhlyqp.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>wzmmz9fp6w.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>yclnxrl5pm.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>t38b2kh725.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>7ug5zh24hu.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>9rd848q2bz.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>y5ghdn5j9k.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>n6fk4nfna4.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>v9wttpbfk9.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>n38lu8286q.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>47vhws6wlr.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>kbd757ywx3.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>9t245vhmpl.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>a2p9lx4jpn.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>22mmun2rn5.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>4468km3ulz.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>2u9pt9hc89.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>8s468mfl3y.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>av6w8kgt66.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>klf5c3l5u5.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>ppxm28t8ap.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>424m5254lk.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>ecpz2srf59.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>uw77j35x4d.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>mlmmfzh3r3.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>578prtvx9j.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>4dzt52r2t5.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>gta9lk7p23.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>e5fvkxwrpn.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>8c4e2ghe7u.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>zq492l623r.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>3rd42ekr43.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>3qcr597p9d.skadnetwork</string>
</dict>
</array>
2.2.7、iOS14 适配指南
iOS 14.5 后,对于用户隐私保护,苹果新政策原因,需要对 14 及其以上系统适配,详情查看列表 iOS14 适配指南
2.2.8、初始化 SDK,在程序入口设置 AppID 信息
#import <OctopusSDK/OctopusSDK.h>
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[OctopusAdManager configureWithApplicationID:@"从 OctopusSDK 申请的 AppID"];
//...
}
三、手动部署配置
3.1、确保您的开发及部署环境符合以下标准
1、开发工具:推荐 Xcode 12 及以上版本
2、部署目标:iOS 11.0 及以上版本
3.2、接入配置
3.2.1、为工程添加 OctopusSDK SDK Framework
导入 SDK,将 OctopusAdSDK 文件夹下所有文件导入到相应的工程中(手动拖动时,选择 Copy items if needed )
3.2.2、添加必要依赖库以及工程配置
在工程 Target Setting -> Build Phases -> Link Binary With Libraries 中进行添加
- AdSupport.framework
- AVFoundation.framework
- AVKit.framework
- Accelerate.framework
- CoreData.framework
- CoreLocation.framework
- CoreMedia.framework
- CoreMotion.framework
- CoreGraphics.framework
- CoreTelephony.framework
- Foundation.framework
- MediaPlayer.framework
- MessageUI.framework
- MobileCoreServices.framework
- QuartzCore.framework
- QuickLook.framework
- SystemConfiguration.framework
- Security.framework
- StoreKit.framework
- SafariServices.framework
- WebKit.framework
- UIKit.framework
- DeviceCheck.framework
- AppTrackingTransparency.framework
- libz.dylib/tbd
- libc++.dylib/tbd
- libsqlite3.dylib/tbd
- libxml2.tbd
- libbz2.tbd
- libc++abi.tbd
- libresolv.9.tbd
- libiconv.tbd
3.2.3、支持分类引用
在工程 Target Setting -> Build Settings -> Other Linker Flags 项添加 "-ObjC"
3.2.4、设置允许 http 连接
在工程的 Info.plist 文件中,设置 App Transport Security Settings 选项下 Allow Arbitrary Loads 值为 YES,对应 plist 内容为
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
3.2.5、设置 SDK 关联方式
选择项目->TARGET->Frameworks->KSAdSDK.framework 选择 Embed 方式为 Embed&Sign
3.2.6、iOS14 适配指南
iOS 14.5 后,对于用户隐私保护,苹果新政策原因,需要对 14 及其以上系统适配,详情查看列表 iOS14 适配指南
3.2.7、初始化 SDK,在程序入口设置 AppID 信息
#import <OctopusAdSDK/OctopusAdSDK.h>
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[OctopusAdManager configureWithApplicationID:@"从 OctopusAdSDK 申请的 AppID"];
//...
}
四、开屏广告接入代码
4.1、 包含头文件
#import <OctopusAdSDK/OctopusAdSDK.h>
4.2、创建和初始化
#import <OctopusAdSDK/OctopusAdSDK.h>
@interface OctSplashViewController () <OctSplashDelegate>
@property (nonatomic, strong) OctAdSplash *splash;
@end
创建和初始化广告,广告是异步的,所以不需要修改 APP 原有逻辑,初始化广告的方法放到
[self.window makeKeyAndVisible];
之后进行初始化
// 初始化广告位
_splash = [[OctAdSplash alloc]initWithSpaceID:@"id" spaceParam:@"" lifeTime:5000];
_splash.delegate = self;
_splash.octSplashViewController = self;
_splash.showLaunchImage = YES;
[_splash loadSplashAdWithSkipView:nil];
在代理开屏展现方法内实现下面代码
- (void)oct_splashAdSuccess:(OctAdSplash *)splashAd {
[splashAd showSplashAd];
}
如果需要设置底部的 logoView 可以调用相应的代理 如果异步加载先加载的首页问题,可以创建 ImageView 添加到 Window 上,在广告成功和失败时进行移除。 详细代码参考 Demo
4.3、主要属性说明
/**
用来接收开屏广告读取和展示状态变化通知的 delegate
*/
@property (nonatomic, weak) id<OctSplashDelegate> delegate;
/**
octSplashViewController 展示view的控制器或者弹出落地页的需要的控制器,此参数不能为空
*/
@property (nonatomic, weak) UIViewController *octSplashViewController;
/**
showLaunchImage 是否展示启动图片到广告显示。
ps:广告异步加载,会先进入主页,广告加载完成后在弹出,此属性可控制是否进入先进入主页。默认开启。
请在load广告前设置是否需要。
*/
@property (nonatomic, assign) BOOL showLaunchImage;
/**
初始化方法
@param spaceID 广告位 ID
@param spaceParam 广告位参数 可填写任意字符串
@param lifeTime 给予广告请求时间
@return 开屏广告对象
*/
- (instancetype)initWithSpaceID:(NSString *)spaceID
spaceParam:(NSString *)spaceParam
lifeTime:(uint64_t)lifeTime;
/**
请求加载开屏广告并控制是否要不显示,需要用此方法load
*/
- (void)loadSplashAdWithSkipView:(UIView *__nullable)skipView;
/**
展示开屏广告
*/
- (void)showSplashAd;
/**
使用oct_loadAndDisplaySplashAd加载的开屏,不在显示。
*/
- (void)removeSplashAd;
/**
获取启动图片,特殊需求时获取
@return 启动Image
*/
+ (UIImage *)octLaunchImage;
4.4、主要方法说明
/**
@return 展示下部logo位置,需要给传入view设置尺寸。
*/
- (UIView *)oct_splashBottomView;
/**
广告加载成功
*/
- (void)oct_splashAdSuccess:(OctAdSplash *)splashAd;
/**
广告已出现
*/
- (void)oct_splashAdDidVisible:(OctAdSplash *)splashAd;
/**
广告加载失败
*/
- (void)oct_splashAdDidLoadFail:(OctAdSplash *)splashAd error:(NSError * _Nullable)error;
/**
SDK渲染开屏广告点击回调
*/
- (void)oct_splashAdDidClick:(OctAdSplash *)splashAd;
/**
SDK渲染开屏广告将要关闭回调
*/
- (void)oct_splashAdWillClose:(OctAdSplash *)splashAd;
/**
SDK渲染开屏广告关闭回调,当用户点击广告时会直接触发此回调,建议在此回调方法中直接进行广告对象的移除操作
*/
- (void)oct_splashAdDidClose:(OctAdSplash *)splashAd;
/**
用户点击跳过按钮时会触发此回调,可在此回调方法中处理用户点击跳转后的相关逻辑
*/
- (void)oct_splashAdDidClickSkip:(OctAdSplash *)splashAd;
/**
倒计时为0时会触发此回调
*/
- (void)oct_splashAdCountdownToZero:(OctAdSplash *)splashAd;
/**
点击进入的广告扩展页关闭
*/
- (void)oct_splashAdOtherControllerClose:(OctAdSplash *)splashAd;
五、原生广告接入代码
5.1、包含头文件
#import <OctopusAdSDK/OctopusAdSDK.h>
5.2、创建和初始化
在需要导入广告的 ViewController 头文件中导入头文件并声明实例以及声明代理
#import <OctopusAdSDK/OctopusAdSDK.h>
@interface OctNativeViewController () <OctAdNativeDelegate>
@property (nonatomic, strong) OctAdNative *native;
@end
创建和初始化广告
self.native = [[OctAdNative alloc] initWithSpaceID:@"7842" spaceParam:@"" lifeTime:5000];
self.native.channelAdSize = CGSizeMake([UIScreen mainScreen].bounds.size.width, 200);
self.native.controller = self;
self.native.delegate = self;
[self.native loadNativeAd:3];
- (void)oct_nativeAdSuccessToLoad:(OctAdNative *)octNative {
[self.view addSubview:octNative.nativeAdViews[0]];
}
5.3、主要属性说明
/**
用来接收原生广告获取状态变化通知的 delegate
*/
@property (nonatomic, weak) id<OctAdNativeDelegate> delegate;
/**
显示oct广告的View,此参数不能为空
*/
@property (nonatomic, weak) UIView *octNativeView;
/**
显示渠道广告时,想要返回的view尺寸,需要load前设置。设置与octNativeView相同尺寸。
*/
@property (nonatomic, assign) CGSize channelAdSize;
/**
controller 展示view的控制器或者弹出落地页的需要的控制器,此参数不能为空
*/
@property (nonatomic, weak) UIViewController *controller;
/**
是否由SDK生成Logo,默认Yes。
*/
@property (nonatomic, assign) BOOL iSAdLogoView;
/**
初始化方法
@param spaceID 广告位 ID
@param spaceParam 广告位参数 可填写任意字符串
@return 原生广告对象
*/
- (instancetype)initWithSpaceID:(NSString *)spaceID
spaceParam:(NSString *)spaceParam
lifeTime:(uint64_t)lifeTime;
/**
是否为渠道广告,当iSChannelAd为NO时,使用adDataModels自定义广告。当iSChannelAd为YES时,使用channeNativeAdView将View直接添加到页面。
*/
@property (nonatomic, assign, readonly) BOOL iSChannelAd;
/**
广告加载成功后获得的 原生广告数据模型(使用model数据,自定义View样式)
*/
@property (nonatomic, strong, readonly) NSArray<OctAdNativeAdDataModel *> *adDataModels;
/**
广告加载成功后获得的 View广告(数组内部为加载完成的View形式广告,直接add到目标View)
*/
@property (nonatomic, strong, readonly) NSArray *nativeAdViews;
/**
Native 获取
@param count 广告条数(渠道广告时候生效,oct广告只能拉取1条广告)
*/
- (void)loadNativeAd:(int)count;
5.4、主要方法说明
/**
广告加载成功
*/
- (void)oct_nativeAdSuccessToLoad:(OctAdNative *)adModel;
/**
广告加载失败
*/
- (void)oct_nativeAdFailToLoad:(OctAdNative *)adModel error:(NSError *_Nullable)error;
/**
渲染成功
*/
- (void)oct_nativeAdRenderSuccess:(OctAdNative *)adModel;
/**
渲染失败
*/
- (void)oct_nativeAdRenderFail:(OctAdNative *)adModel error:(NSError *_Nullable)error;
/**
广告曝光
*/
- (void)oct_nativeAdDidVisible:(OctAdNative *)adModel;
/**
广告被点击
*/
- (void)oct_nativeAdViewDidClick:(OctAdNative *)adModel;
/**
广告关闭
*/
- (void)oct_nativeAdViewDidClose:(OctAdNative *)adModel;
/**
点击广告之后,即将Present广告内容
*/
- (void)oct_nativeAdViewWillPresentScreen:(OctAdNative *)adModel;
六、插屏广告接入代码
6.1、包含头文件
#import <OctopusAdSDK/OctopusAdSDK.h>
6.2、 创建和初始化
在需要导入广告的 ViewController 头文件中导入头文件并声明实例以及声明代理
#import <OctopusAdSDK/OctopusAdSDK.h>
@interface OctInterstitialsViewController () <OctAdInterstitialDelegate>
@property (nonatomic, strong) OctAdInterstitial *interstitial;
@end
创建和初始化广告
self.interstitial = [[OctAdInterstitial alloc]initWithSpaceID:@"id" spaceParam:@"" lifeTime:5000];
self.interstitial.controller = [UIApplication sharedApplication].delegate.window.rootViewController;
self.interstitial.delegate = self;
[self.interstitial loadIntersititialAd];
6.3、主要属性说明
/**
用来接收 Interstitial 广告读取和展示状态变化通知的 delegate
*/
@property (nonatomic, weak) id<OctAdInterstitialDelegate> delegate;
/**
controller 展示view的控制器或者弹出落地页的需要的控制器,此参数不能为空
详解:[必选]开发者需传入用来弹出目标页的ViewController,一般为当前ViewController
当需要在Tabbar页面弹出时,根视图须设置为Tabbar,否则会影响广告后续点击
*/
@property (nonatomic, weak) UIViewController *controller;
/**
初始化方法
@param spaceID 广告位 ID
@param spaceParam 广告位参数 可填写任意字符串
@return Interstitial 广告对象
*/
- (instancetype)initWithSpaceID:(NSString *)spaceID spaceParam:(NSString *)spaceParam lifeTime:(uint64_t)lifeTime;
/**
Interstitial 加载
*/
- (void)loadIntersititialAd;
/**
Interstitial 展示,确保广告加载成功后调用
*/
- (void)showIntersititialAd;
6.4、主要方法说明
/**
广告加载成功
*/
- (void)oct_interstitialSuccessToLoadAd:(OctAdInterstitial *)model;
/**
广告已出现
*/
- (void)oct_interstitialAdDidVisible:(OctAdInterstitial *)model;
/**
广告加载失败
*/
- (void)oct_interstitialAdDidLoadFail:(OctAdInterstitial *)model error:(NSError *)error;
/**
广告渲染成功
*/
- (void)oct_interstitialRenderSuccess:(OctAdInterstitial *)model;
/**
广告渲染失败
*/
- (void)oct_interstitialRenderFail:(OctAdInterstitial *)model error:(NSError *)error;
/**
广告关闭
*/
- (void)oct_interstitialAdDidClose:(OctAdInterstitial *)model;
/**
广告被点击
*/
- (void)oct_interstitialAdDidClick:(OctAdInterstitial *)model;
七、激励视频广告接入代码
7.1、包含头文件
#import <OctopusAdSDK/OctopusAdSDK.h>
7.2、初始化与请求
在需要导入广告的 ViewController 头文件中导入头文件并声明实例以及声明代理
#import <OctopusAdSDK/OctopusAdSDK.h>
@interface OctRewardedVideoViewController () <OctRewardedVideoDelegate>
@property (nonatomic, strong) OctAdRewardedVideo *rewardedVideo;
@end
创建和初始化广告
_rewardedVideo = [[OctAdRewardedVideo alloc] initWithSpaceID:@"id" spaceParam:@"" lifeTime:5000];
_rewardedVideo.delegate = self;
_rewardedVideo.controller = self;
[_rewardedVideo loadRewardedVideoAd];
- (void)oct_rewardedVideoAdSuccess:(OctAdRewardedVideo *)rewardedVideoAd {
[rewardedVideoAd showRewardedVideoAd];
}
7.3、主要属性说明
/**
用来接收激励视频广告读取和展示状态变化通知的 delegate
*/
@property (nonatomic, weak) id<OctRewardedVideoDelegate> delegate;
/**
controller 展示view的控制器或者弹出落地页的需要的控制器,此参数不能为空
*/
@property (nonatomic, weak) UIViewController *controller;
/**
初始化方法
@param spaceID 广告位 ID
@param spaceParam 广告位参数 可填写任意字符串
@return 激励视频广告对象
*/
- (instancetype)initWithSpaceID:(NSString *)spaceID
spaceParam:(NSString *)spaceParam
lifeTime:(uint64_t)lifeTime;
/**
请求加载激励视频广告
*/
- (void)loadRewardedVideoAd;
/**
激励视频展示,确保广告加载成功后调用
*/
- (void)showRewardedVideoAd;
7.4、主要方法说明
/**
广告加载成功
*/
- (void)oct_rewardedVideoAdSuccess:(OctAdRewardedVideo *)rewardedVideoAd;
/**
此回调方法中可定位具体的失败原因对应的错误码,打印error即可。
*/
- (void)oct_rewardedVideoAd:(OctAdRewardedVideo *)rewardedVideoAd didFailWithError:(NSError *_Nullable)error;
/**
广告已出现
*/
- (void)oct_rewardedVideoAdDidVisible:(OctAdRewardedVideo *)rewardedVideoAd;
/**
广告已关闭
*/
- (void)oct_rewardedVideoAdDidClose:(OctAdRewardedVideo *)rewardedVideoAd;
/**
点击广告
*/
- (void)oct_rewardedVideoAdDidClick:(OctAdRewardedVideo *)rewardedVideoAd;
/**
点击跳过按钮
*/
- (void)oct_rewardedVideoAdDidClickSkip:(OctAdRewardedVideo *)rewardedVideoAd;
/**
视频播放完毕
*/
- (void)oct_rewardedVideoAdDidPlayFinish:(OctAdRewardedVideo *)rewardedVideoAd didFailWithError:(NSError *_Nullable)error;
/**
视频广告无效
*/
- (void)oct_rewardedVideoAdLoseEffectiveness;
/**
视频广告播放达到激励条件
*/
- (void)oct_rewardVideoAdDidRewardEffective:(BOOL)hasReward;
八、横幅广告接入代码
8.1、包含头文件
#import <OctopusAdSDK/OctopusAdSDK.h>
8.2、 创建和初始化
在需要导入广告的 ViewController 头文件中导入头文件并声明实例以及声明代理
#import <OctopusAdSDK/OctopusAdSDK.h>
@interface OctBannerViewController () <OctAdBannerViewDelegate>
@property (nonatomic, strong) OctAdBannerView *banner;
@end
创建和初始化广告
CGFloat width = [UIScreen mainScreen].bounds.size.width;
UIView *v = [[UIView alloc] initWithFrame:CGRectMake(0, 100, width, width * 3.0/7.0)];
v.backgroundColor = [UIColor yellowColor];
[self.view addSubview:v];
self.banner = [[OctAdBannerView alloc] initWithFrame:v.bounds spaceID:@"id" spaceParam:@"" lifeTime:5000];
self.banner.controller = self;
self.banner.delegate = self;
self.banner.containerView = v;
[self.banner loadAndShowBannerAd];
8.3、主要属性说明
/**
用来接收 Banner 广告读取和展示状态变化通知的 delegate
*/
@property (nonatomic, weak) id<OctAdBannerViewDelegate> delegate;
/**
controller 展示view的控制器或者弹出落地页的需要的控制器,此参数不能为空
*/
@property (nonatomic, weak) UIViewController *controller;
@property (nonatomic, strong) UIView *containerView;
/**
初始化方法
@param frame 广告展示的位置和大小,banner默认比例6.4:1;只需要设置宽度,高度自适应,默认宽度屏幕宽度
@param spaceID 广告位 ID
@param spaceParam 广告位参数 可填写任意字符串
@return Banner 广告对象
*/
- (instancetype)initWithFrame:(CGRect)frame
spaceID:(NSString *)spaceID
spaceParam:(NSString *)spaceParam
lifeTime:(uint64_t)lifeTime;
/**
Banner 加载
*/
- (void)loadAndShowBannerAd;
8.4、主要方法说明
/**
广告加载成功
*/
- (void)oct_bannerAdViewDidLoad:(OctAdBannerView *)bannerAd;
/**
广告加载失败
*/
- (void)oct_bannerAdViewDidLoadFail:(OctAdBannerView *)bannerAd error:(NSError *_Nullable)error;
/**
Banner已展示
*/
- (void)oct_bannerAdViewDidVisible:(OctAdBannerView *)bannerAd;
/**
渲染成功
*/
- (void)oct_bannerAdViewRenderSuccess:(OctAdBannerView *)bannerAd;
/**
渲染失败
*/
- (void)oct_bannerAdViewRenderFail:(OctAdBannerView *)bannerAd error:(NSError *_Nullable)error;
/**
Banner被点击
*/
- (void)oct_bannerAdViewDidClick:(OctAdBannerView *)bannerAd;
/**
Banner被关闭
*/
- (void)oct_bannerAdViewDidClose:(OctAdBannerView *)bannerAd;
历史版本
-
版本号 发布日期 备注 3.2.11.8 2023-05-26 1、【优化】上报内容优化
2、【新增】支持 618 预算
3、【优化】SDK 稳定性优化3.2.11.7 2023-05-10 1、【新增】增加权重,丰富比价维度
2、【优化】上报内容优化
3、【优化】SDK 稳定性优化3.2.11.6 2023-04-28 1、【更新】更新广点通、快手、穿山甲、百度广告 SDK
2、【新增】新增瀑布流比价逻辑
3、【优化】SDK 稳定性优化