优优SDK接入文档
2025-08-08
版本说明
| 版本 | 更新内容 | 更新时间 |
|---|---|---|
| 1.5.2.0 | 【优化】广告样式优化 【修复】已知问题修复 | 2025.12.16 |
| 1.2.1.1 | 【优化】视频播放优化 【优化】初始化流程优化 【优化】交互方式优化 【修复】其他已知问题优化 | 2025.10.09 |
| 1.0.0.1 | 【新增】支持开屏广告 【新增】支持插屏广告 【新增】支持信息流模板渲染 | 2025.08.08 |
在您阅读此文档时,我们假定您已经具备了基础的 iOS 应用开发经验,并能够理解相关基础概念。
1 接入准备
1.1 添加SDK
1.1.1 pod方式【推荐】
- 在podfile文件中加入以下代码:
pod 'YoAdCore' # 建议指定版本- 项目根目录,执行
pod install
1.1.2 本地导入方式
将优优广告提供的SDK压缩包解压
将其中所有 framework 和 bundle 放入自己项目文件夹下
YoAdCore.xcframework
YoAdCoreResources.bundle1.1.3其他相关SDK说明
SDK支持架构:x86-64、arm64。1.1.4 适配说明
当前SDK版本已适配支持 iOS 13 及以上版本。
1.2 Info.plist 配置
网络权限配置【必须】
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>白名单配置【非必须】
<key>LSApplicationQueriesSchemes</key>
<array>
<string>weixin</string>
<string>wechat</string>
<string>weixinULAPI</string>
</array>增加获取 IDFA 权限,以便能够提供更精准的进行广告投放和收入优化。【非必须】
<key>NSUserTrackingUsageDescription</key>
<string>该标识符将用于向您投放个性化广告</string>1.3 Swift 接入方式
如果项目是 Swift 的工程,需要创建一个桥接文件,将所需要的头文件 import 进入。
#import <YoAdCore/YoAdCore.h>2 初始化SDK
为避免SDK在用户同意隐私协议与用户协议之前获取用户信息,YoYo广告SDK向开发者提供了初始化方法,开发者可根据App具体情况选择初始化时机,建议在允许网络之后初始化。
建议开发者在APP首次运行时,通过弹窗等明显方式提示用户阅读《隐私政策》,用户确认同意《隐私政策》后,再调用此接口初始化SDK进行用户信息的收集与处理。
1、初始化SDK:只进行SDK初始化,不会获取用户隐私信息,建议在允许网络后执行
//SDK初始化方法,不会获取设备及用户信息,建议在允许网络后执行
YoAdConfig *config = [[YoAdConfig alloc] init];
config.appId = adInitParams[@"adAppId"]; ///【必要】应用在优优广告平台生成的AppId
config.customIDFA = @"应用实际IDFA"; ///【建议】应用自行获取的IDFA
config.customIDFV = @"应用实际IDFV"; ///【建议】应用自行获取的IDFV
config.customUUID = @"应用实际UUID"; ///【建议】应用自行获取的UUID
config.wechatAppId = @"应用在微信开放平台的AppId"; ///【建议】应用在微信开放平台的AppId
config.isDebug = NO; ///【可选】默认关闭,正式版本建议关闭
config.isSupportPersonalRecommend = YES; ///【可选】是否允许个性化推荐,建议开启,否则会影响广告填充率
config.isSupportAdvancedInteraction = YES; ///【可选】是否支持高级互动,建议开启
config.isCanUseLocation = YES; ///【可选】是否允许获取位置信息,若不允许,则建议传入
config.customLatitude = @0.0; ///【可选】位置信息-纬度
config.customLongitude = @0.0; ///【可选】位置信息-经度
[YoMoreAd initWithConfiguration:config success:^{
NSLog(@"[yodemo] 初始化成功");
} failure:^(NSInteger code, NSString * _Nullable msg) {
NSLog(@"[yodemo] 初始化失败:code=%ld, msg=%@", (long)code, msg);
}];2、启动SDK:启动SDK,建议在初始化成功后、加载广告之前调用。
//若不关心回调,可传nil
[YoMoreAd startWithCompletionHandler:^{
NSLog(@"[yodemo] 启动SDK成功");
} failure:^(NSInteger code, NSString *msg) {
NSLog(@"[yodemo] 启动SDK成功");
}];3. 接入广告类型
每个广告对象仅允许加载、展示一次,且加载展示的顺序不能出错,如果使用出错不会有任何提示,请检查自己的使用是否有误。
3.1 开屏广告
开屏广告以App启动作为曝光时机,提供3~5s的可感知广告展示。用户可以点击广告跳转按钮跳转到目标页面;或者点击右上角的“跳过”按钮,跳转到app内容首页。
适用场景:开屏广告会在您的应用开启时加载,拥有固定展示时间(一般为3~5秒),展示完毕后自动关闭并进入您的应用主界面。
接入示例:
//广告加载
YoAdParam *adParam = [[YoAdParam alloc] init];
adParam.adId = "qq9c4r8rs7hj"; //【必要】广告位Id
adParam.adCount = 1; //【可选】期望数量
adParam.acceptedWidth = 900; //【可选】期望宽度
adParam.acceptedHeight = 1600; //【可选】期望高度
[YoMoreAd loadSpalsh:adParam splashDelegate:self];YoSplashDelegate示例:
//.h文件实现YoSplashDelegate协议
@interface YoDemoSplash : NSObject <YoSplashDelegate>
@end
//.m文件
@implementation YoDemoSplash
//【必要】广告加载成功
- (void)onSpalshLoadSuccess:(NSArray<id<YoSplashAd>> *)adList {
NSLog(@"[yodemo] onSpalshLoadSuccess");
if (adList && adList.count > 0) {
_yoSplashAd = adList[0];
//获取广告价格
NSInteger adPrice = [_yoSplashAd getPrice]; //单位:分
}
}
//【必要】广告点击
- (void)onSpalshClicked {
NSLog(@"[yodemo] onSpalshClicked");
}
//【必要】广告关闭
- (void)onSpalshClosed {
NSLog(@"[yodemo] onSpalshClosed");
}
//【可选】加载失败
- (void)onSpalshLoadFailure:(NSInteger)code msg:(NSString *)msg {
NSLog(@"[yodemo] onSpalshLoadFailure: code=%ld, msg=%@", (long)code, msg);
}
//【可选】展示成功
- (void)onSpalshShowSuccess {
NSLog(@"[yodemo] onSpalshShowSuccess");
}
//【可选】展示失败
- (void)onSpalshShowFailure:(NSInteger)code msg:(NSString *)msg {
NSLog(@"[yodemo] onSpalshShowFailure: code=%ld, msg=%@", (long)code, msg);
}
//【可选】倒计时结束
- (void)onSpalshTimeOver {
NSLog(@"[yodemo] onSpalshTimeOver");
}
//【可选】预加载成功
- (void)onSpalshPrepareSuccess:(id<YoSplashAd>)ad {
NSLog(@"[yodemo] onSpalshPrepareSuccess");
}
//【可选】预加载失败
- (void)onSpalshPrepareFailure:(id<YoSplashAd>)ad code:(NSInteger)code msg:(NSString *)msg {
NSLog(@"[yodemo] onSpalshPrepareFailure: 预加载失败code=%ld, msg=%@", (long)code, msg);
}
//【可选】视频播放开始
- (void)onSpalshVideoStart {
NSLog(@"[yodemo] onSpalshVideoStart");
}
//【可选】视频播放跳过
- (void)onSpalshVideoSkipped {
NSLog(@"[yodemo] onSpalshVideoSkipped");
}
//【可选】视频播放结束
- (void)onSpalshVideoComplete {
NSLog(@"[yodemo] onSpalshVideoComplete");
}
//【可选】视频播放错误
- (void)onSpalshVideoError:(NSInteger)code msg:(NSString *)msg {
NSLog(@"[yodemo] onSpalshVideoError: code=%ld, msg=%@", (long)code, msg);
}
@end3.2 插屏广告
插屏广告是移动广告的一种常见形式,广告素材类型比较丰富,包括视频类、图文类,广告呈现方式也比较灵活,可在管理后台配置,选择使用半屏或全屏呈现。
适用场景:应用的大部分流程。
接入示例:
//广告加载
YoAdParam *adParam = [[YoAdParam alloc] init];
adParam.adId = "qq9c4r8rs7hj"; //【必要】广告位Id
adParam.adCount = 1; //【可选】期望数量
[YoMoreAd loadInterstitial:adParam interstitialDelegate:self];YoInterstitialDelegate示例:
//.h文件实现YoInterstitialDelegate协议
@interface YoDemoInterstitial : NSObject <YoInterstitialDelegate>
@end
//.m文件
@implementation YoDemoInterstitial
//【必要】广告加载成功
- (void)onInterstitialLoadSuccess:(NSArray<id<YoInterstitialAd>> *)adList {
NSLog(@"[yodemo] onInterstitialLoadSuccess: 加载成功size=%ld", adList?adList.count:0);
if (adList && adList.count > 0){
_yoInterstitialAd = adList[0];
//获取广告价格
NSInteger adPrice = [_yoInterstitialAd getPrice]; //单位:分
}
}
//【必要】广告点击
- (void)onInterstitialClicked {
NSLog(@"[yodemo] onInterstitialClicked");
}
//【必要】广告关闭
- (void)onInterstitialClosed {
NSLog(@"[yodemo] onInterstitialClosed");
}
//【可选】加载失败
- (void)onInterstitialLoadFailure:(NSInteger)code msg:(NSString *)msg {
NSLog(@"[yodemo] onInterstitialLoadFailure: 加载失败code=%ld, msg=%@", (long)code, msg);
}
//【可选】展示成功
- (void)onInterstitialShowSuccess {
NSLog(@"[yodemo] onInterstitialShowSuccess: 展示成功");
}
//【可选】展示失败
- (void)onInterstitialShowFailure:(NSInteger)code msg:(NSString *)msg {
NSLog(@"[yodemo] onInterstitialShowFailure: 展示失败code=%ld, msg=%@", (long)code, msg);
}
//【可选】预加载成功
- (void)onInterstitialPrepareSuccess:(id<YoInterstitialAd>)ad {
NSLog(@"[yodemo] onInterstitialPrepareSuccess");
}
//【可选】预加载失败
- (void)onInterstitialPrepareFailure:(id<YoInterstitialAd>)ad code:(NSInteger)code msg:(NSString *)msg {
NSLog(@"[yodemo] onInterstitialPrepareFailure: code=%ld, msg=%@", (long)code, msg);
}
//【可选】视频播放开始
- (void)onInterstitialVideoStart {
NSLog(@"[yodemo] onInterstitialVideoStart");
}
//【可选】视频播放跳过
- (void)onInterstitialVideoSkipped {
NSLog(@"[yodemo] onInterstitialVideoSkipped");
}
//【可选】视频播放结束
- (void)onInterstitialVideoComplete {
NSLog(@"[yodemo] onInterstitialVideoComplete");
}
//【可选】视频播放错误
- (void)onInterstitialVideoError:(NSInteger)code msg:(NSString *)msg {
NSLog(@"[yodemo] onInterstitialVideoError: code=%ld, msg=%@", (long)code, msg);
}
@end3.3 信息流模板渲染广告
由广告联盟SDK提供渲染模板,开发者可在广告联盟管理后台配置渲染样式,包括上图下文、上文下图、大图等。
适用场景:适用于动态信息流等广告场景。
接入示例:
//广告加载
YoAdParam *adParam = [[YoAdParam alloc] init];
adParam.adId = "qq9c4r8rs7hj"; //【必要】广告位Id
adParam.adCount = 1; //【可选】期望数量
adParam.acceptedWidth = 900; //【可选】期望宽度
adParam.acceptedHeight = 600; //【可选】期望高度
[YoMoreAd loadFeed:adParam feedDelegate:self];YoFeedDelegate示例:
//.h文件实现YoFeedDelegate协议
@interface YoDemoFeed : NSObject <YoFeedDelegate>
@end
//.m文件
@implementation YoDemoFeed
//【必要】广告加载成功
- (void)onFeedLoadSuccess:(NSArray<id<YoFeedAd>> *)adList {
NSLog(@"[yodemo] onFeedLoadSuccess: size=%@", adList);
if (adList && adList.count > 0){
_yoFeedAd = adList[0];
//获取广告价格
NSInteger adPrice = [_yoFeedAd getPrice]; //单位:分
}
}
//【必要】广告点击
- (void)onFeedClicked {
NSLog(@"[yodemo] onFeedClicked");
}
//【必要】广告关闭
- (void)onFeedClosed {
NSLog(@"[yodemo] onFeedClosed");
//移除广告视图
if (_adContainerView) {
[_adContainerView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];
}
}
//【可选】加载失败
- (void)onFeedLoadFailure:(NSInteger)code msg:(NSString *)msg {
NSLog(@"[yodemo] onFeedLoadFailure: code=%ld, msg=%@", (long)code, msg);
}
//【可选】展示成功
- (void)onFeedShowSuccess {
NSLog(@"[yodemo] onFeedShowSuccess");
}
//【可选】展示失败
- (void)onFeedShowFailure:(NSInteger)code msg:(NSString *)msg {
NSLog(@"[yodemo] onFeedShowFailure: code=%ld, msg=%@", (long)code, msg);
}
//【可选】预加载成功
- (void)onFeedPrepareSuccess:(id<YoFeedAd>)ad {
NSLog(@"[yodemo] onFeedPrepareSuccess");
}
//【可选】预加载失败
- (void)onFeedPrepareFailure:(id<YoFeedAd>)ad code:(NSInteger)code msg:(NSString *)msg {
NSLog(@"[yodemo] onFeedPrepareFailure: code=%ld, msg=%@", (long)code, msg);
}
//【可选】视频播放开始
- (void)onFeedVideoStart {
NSLog(@"[yodemo] onFeedVideoStart");
}
//【可选】视频播放跳过
- (void)onFeedVideoSkipped {
NSLog(@"[yodemo] onFeedVideoSkipped");
}
//【可选】视频播放结束
- (void)onFeedVideoComplete {
NSLog(@"[yodemo] onFeedVideoComplete");
}
//【可选】视频播放错误
- (void)onFeedVideoError:(NSInteger)code msg:(NSString *)msg {
NSLog(@"[yodemo] onFeedVideoError: code=%ld, msg=%@", (long)code, msg);
}
@end4. 实时竞价
支持的广告类型:所有广告类型。
相关方法说明: 竞价回传
//竞价获胜:广告平台(枚举见下节),价格单位:分
[_yoAd bidWin:YO_PLATFORM_YoYo price:adPrice];
//竞价失败:竟败原因(枚举见下节),广告平台(枚举见下节),价格单位:分
[_yoAd bidLoss:YO_LOSS_CODE_LOW_PRICE platform:YO_PLATFORM_CSJ price:thirdAdPrice];广告平台枚举如下:
/**
* 优优
*/
static NSString *const YO_PLATFORM_YoYo = @"YoYo";
/**
* 穿山甲
*/
static NSString *const YO_PLATFORM_CSJ = @"csj";
/**
* 广点通 或 优量汇
*/
static NSString *const YO_PLATFORM_GDT = @"gdt";
/**
* 快手
*/
static NSString *const YO_PLATFORM_KuaiShou = @"KuaiShou";
/**
* 百度 或 百青藤
*/
static NSString *const YO_PLATFORM_BaiDu = @"Baidu";
/**
* VIVO
*/
static NSString *const YO_PLATFORM_VIVO = @"vivo";
/**
* OPPO
*/
static NSString *const YO_PLATFORM_OPPO = @"oppo";
/**
* 小米
*/
static NSString *const YO_PLATFORM_XiaoMi = @"XiaoMi";
/**
* 华为
*/
static NSString *const YO_PLATFORM_HuaWei = @"HuaWei";
/**
* 京东
*/
static NSString *const YO_PLATFORM_JingDong = @"JingDong";
/**
* SIGMOB
*/
static NSString *const YO_PLATFORM_SIGMOB = @"Sigmob";
/**
* 爱奇艺
*/
static NSString *const YO_PLATFORM_IQIYI = @"IQiYi";
/**
* 阿里妈妈
*/
static NSString *const YO_PLATFORM_ALIMAMA = @"AliMama";
/**
* Tanx
*/
static NSString *const YO_PLATFORM_Tanx = @"Tanx";
/**
* TopOn
*/
static NSString *const YO_PLATFORM_TopOn = @"TopOn";
/**
* PinDuoDuo
*/
static NSString *const YO_PLATFORM_PinDuoDuo = @"PinDuoDuo";
/**
* 其他
*/
static NSString *const YO_PLATFORM_OTHER = @"other";竟败原因枚举如下:
/**
* 竞争力不足,如不是本次竞价的最高出价方,可上报此竞败原因
*/
static const NSInteger YO_LOSS_CODE_LOW_PRICE = 1;
/**
* 无广告回包,如优在本次竞价中未返回广告,可上报此竞败原因
*/
static const NSInteger YO_LOSS_CODE_NO_AD = 2;
/**
* 有广告回包但是未参与竞价
*/
static const NSInteger YO_LOSS_CODE_NO_JOIN = 101;
/**
* 其他(有回包)
*/
static const NSInteger YO_LOSS_CODE_OTHER = 10001;5. 其他API
5.1 SDK版本
///获取SDK版本号
NSInteger sdkVersionCode = [YoMoreAd getSdkVersionCode];
///获取SDK版本名称
NSString* sdkVersionName = [YoMoreAd getSdkVersionName];6. 错误码
若出现的错误码在找不到,可联系我方。
| 错误码(code) | 错误说明(msg) |
|---|---|
| 10700 | 正在初始化,无需重复初始化 |
| 10701 | 初始化上下文Context不能为空 |
| 10702 | 初始化参数AppId不能为空 |
| 10704 | 初始化失败 |
| 10800 | 初始化SDK失败 |
| 10801 | 代码位不能为空 |
| 10802 | 初始化未成功,请检查先调用YoMoreAd.init进行初始化 |
| 10812 | 请求参数不完整 |
| 10821 | 广告配置参数错误 |
| 10823 | 广告配置不可用 |
| 10824 | 广告加载参数错误 |
| 10825 | 广告加载重复 |
| 10826 | 广告配置异常 |
| 10827 | 未加载到广告 |
| 10828 | 广告组重复加载 |
| 10829 | 广告配置异常 |
| 10830 | 广告重复加载 |
| 10831 | 广告配置异常 |
| 10832 | 广告源不存在或初始化异常 |
| 10833 | 广告加载超时 |
| 10834 | 很抱歉,暂不支持该广告类型 |
| 10835 | 未加载到广告 |
| 10836 | 广告组未加载到广告 |
| 10851 | 广告构建失败 |
| 10852 | 无可用广告 |
| 10861 | 广告重复展示 |
