跳到主要内容

章鱼聚合 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

  1. GADApplicationIdentifier 是从谷歌平台获取的 appid;
  2. 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.82023-05-261、【优化】上报内容优化
    2、【新增】支持 618 预算
    3、【优化】SDK 稳定性优化
    3.2.11.72023-05-101、【新增】增加权重,丰富比价维度
    2、【优化】上报内容优化
    3、【优化】SDK 稳定性优化
    3.2.11.62023-04-281、【更新】更新广点通、快手、穿山甲、百度广告 SDK
    2、【新增】新增瀑布流比价逻辑
    3、【优化】SDK 稳定性优化