OpenSet IOS SDK接入文档
OpenSet IOS SDK接入文档
注意
- SDK最低支持iOS 11.0
导入
可 pod 'OSETCoreSDK'
OSET.framework和第三方依赖SDK 到工程下.
将下列SDK拖入到工程中,同时对应.bundle资源文件也添加到工程(SDK demo中提供)
Frameworks:
- OSETSDK.xcframework
- OSETSDK.bundle
- AdSetQDDAdMotion.xcframework
- AdSetQDDAdSDK.bundle
- AdSetQDDAdSDK.xcframework
- AdSetQDDAdvertisingID.xcframework
- AdSetQDB_sdk.bundle
- AdSetQDB.framework
- AdSetQDCAdSDK.bundle
- AdSetQDCAdSDK.xcframework
- AdSetQDCCore.bundle
- AdSetQDCCore.xcframework
- AdSetQDAAdSDK.bundle
- AdSetQDAAdSDK.framework
添加依赖
添加必要系统依赖库以及工程配置
Link Binary With Libraries
在工程 Target Setting -> Build Phases -> Link Binary With Libraries 中进行添加
- UIKit
- CoreLocation
- SystemConfiguration
- CoreGraphics
- CoreMotion
- CoreTelephony
- AdSupport
- QuartzCore
- WebKit
- MessageUI
- SafariServices
- AVFoundation
- EventKit
- CoreMedia
- StoreKit
- AppTrackingTransparency
- Security
- MediaPlayer
- MobileCoreServices
- DeviceCheck
- CoreServices
- CoreFoundation
- CoreImage
- Foundation
- ImageIO
- JavaScriptCore
- libz
- libresolv
- libxml2
- libc++
- libc++abi
- libsqlite3
- libbz2
- libiconv
(支持混编)Objective-C 集成
新建Swift File,创建完成后提示是否创建桥接文件,选择Create Bridging Header(支持混编)Swift 集成
新建桥接文件头文件并配置 Build Settings -> Bridging Header修改配置及Info.plist
1. Build Settings中Other Linker Flags 增加参数-ObjC。
- 如需SDK在Swift开发语言中使用,导入OSETSDK-Bridge-Header.h文件。并且设置桥接路径,Build Settings -> object-c Bridging header,把Header路径拖进去即可.
不支持bitcode。
2. 设置允许Http连接,在工程的 Info.plist 文件中,设置 App Transport Security Settings
选项下 Allow Arbitrary Loads 值为 YES,对应 plist 内容为:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>3.1 (可选配置,添加可增加收益)在您的应用的Info.plist文件中,添加一个数组LSApplicationQueriesSchemes键,如
<key>LSApplicationQueriesSchemes</key> <array>
<string>tbopen</string> <string>openapp.jdmobile</string> <string>alipays</string> <string>imeituan</string> <string>pddopen</string> <string>sinaweibo</string> <string>snssdk1128</string> <string>kwai</string> <string>ksnebula</string> <string>ctrip</string> <string>vipshop</string> <string>OneTravel</string> <string>taobaoliveshare</string> <string>taobaolite</string> <string>iqiyi</string> <string>eleme</string> <string>openjdlite</string> <string>xhsdiscover</string> <string>tmall</string> <string>dianping</string> <string>youku</string> <string>fleamarket</string> <string>bilibili</string> <string>freereader</string> <string>tantanapp</string> <string>suning</string> <string>qunariphone</string> <string>lianjia</string> <string>zhihu</string> <string>weixin</string> <string>travelguide</string> <string>wbmain</string> <string>taobaotravel</string> <string>cainiao</string> <string>kaola</string> <string>bitauto.yicheapp</string> <string>lianjiabeike</string> <string>taoumaimai</string> <string>amapuri</string> <string>openanjuke</string>
<string>bosszp</string> <string>txvideo</string> <string>mttbrowser</string> <string>momochat</string> <string>baiduboxlite</string> <string>com.360buy.jdpingou</string> <string>vmall</string> <string>tuhu</string> <string>comjia</string> <string>yymobile</string> <string>shuqireader</string>
</array>4. 支持苹果 ATT:从 iOS 14 开始,若开发者设置 App Tracking Transparency 向用户申请跟踪授权,在用户授权之前IDFA 将不可用。
如果用户拒绝此请求,应用获取到的 IDFA 将自动清零,可能会导致您的广告收入的降低
要获取 App Tracking Transparency 权限,请更新您的 Info.plist,添加 NSUserTrackingUsageDescription 字段和自定义文案描述。
代码示例:
<key>NSUserTrackingUsageDescription</key>
<string>该标识符将用于向您投放个性化广告</string>
}5. 展示授权弹窗需要调用requestTrackingAuthorizationWithCompletionHandler:方法。
我们建议流量等待方法回调完成后处理广告相关逻辑,这样如果用户授权使用IDFA信息, SDK可以使用IDFA进行广告请求。
代码如下
注 :********** 获取广告追踪,展示授权弹窗,否则审核可能被拒 ********
// 适配ios15
// ios15获取广告追踪权限要写在 AppDelegate 里的 applicationDidBecomeActive 否则ios15 不弹框可能会被拒
Objective-C 代码示例
#import <AppTrackingTransparency/AppTrackingTransparency.h>
#import <AdSupport/AdSupport.h>
- (void)requestIDFA {
[ATTrackingManager requestTrackingAuthorizationWithCompletionHandler:^(ATTrackingManagerAuthorizationStatus status) {
// Tracking authorization completed. Start loading ads here.
}];
}
Swift 代码示例
import AppTrackingTransparency
import AdSupport
func requestIDFA() {
ATTrackingManager.requestTrackingAuthorization(completionHandler: { status in
// Tracking authorization completed. Start loading ads here.
})
}7. SDK测试id
| ios测试_appkey | 31DC084BB6B04838 |
|---|---|
| ios测试_广告类型 | ios测试_广告位ID |
| ios测试_原生 | 921DE1BF1B3F06838AE04233A42B01F1 |
| ios测试_原生自渲染 | 921DE1BF1B3F06838AE04233A42B01F1 |
| ios测试_激励 | E80DABEF5FD288492D4A9D05BF84E417 |
| ios测试_插屏 | 351C1A89F8AE79DF62C1B1165A5EAFCC |
| ios测试_开屏 | 18666EAA65EC1969E90E982DCA2CB2DD |
测试id不验证Bundle identifier
其他广告类型详细请参考DemoSDK初始化
+ (instancetype)shareInstance;
/**
SDK初始化
@param publicId 媒体Id(appkey)
*/
+ (void)configure:(NSString *)publicId;
/// 获取聚合SDK版本号
+ (NSString *)version;
/// 打开本地日志模式
+ (void)openDebugLog;
/**
SDK配置日志 用户唯一标识符 推荐设置
@param uid 用户唯一标识符 。userid,手机号,加密字符串等。 此ID仅用于log日志追踪
*/
+ (void)configureLogsWithUid:(NSString *)uid;- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
[OSETManager configure:@"媒体ID"];
[OSETManager openDebugLog]; //打开日志模式(默认关闭)
return YES;
}接入广告
插屏广告
@interface InsertViewController ()<OSETInterstitialAdDelegate>
@property (nonatomic,strong) OSETInterstitialAd *interstitialAd;
@end
@implementation InsertViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.interstitialAd = [[OSETInterstitialAd alloc] initWithSlotId:self.slotId];
self.interstitialAd.delegate = self;
// userId可传空字符串 调用loadInterstitialAdData 广告加载完成会走DidReceiveSuccess 但是不会展示
[self.interstitialAd loadInterstitialAdData];
}
- (void)interstitialDidReceiveSuccess:(nonnull id)interstitialAd slotId:(nonnull NSString *)slotId {
NSLog(@"oset加载成功");
//加载成功后展示广告
[self.interstitialAd showInterstitialFromRootViewController:self.navigationController];
}开屏广告
@interface SplashViewController ()<OSETSplashAdDelegate>
@property (nonatomic,strong) OSETSplashAd *splashAd;
@end
@implementation SplashViewController
- (void)viewDidLoad {
[super viewDidLoad];
UIWindow *window = [UIApplication sharedApplication].keyWindow;
self.splashAd = [[OSETSplashAd alloc] initWithSlotId:self.slotId window:window bottomView:[UIView new]];
self.splashAd.delegate = self;
[self.splashAd loadSplashAd];
}
- (void)splashDidReceiveSuccess:(nonnull id)splashAd slotId:(nonnull NSString *)slotId {
NSLog(@"osetsplashDidReceiveSuccess加载成功");
[self.splashAd showSplashAd];
}
- (void)splashDidReceiveSuccess:(id)splashAd slotId:(NSString *)slotId{
NSLog(@"OSETSDK load success");
[self.splashAd showSplashAd];
}
- (void)splashAdExposured:(id)splashAd{
NSLog(@"OSETSDK splashAdExposured");
}
- (void)splashLoadToFailed:(id)splashAd error:(NSError *)error{
NSLog(@"OSETSDK load failed %@",error);
self.splashAd.delegate = nil;
self.splashAd = nil;
}
- (void)splashDidClick:(id)splashAd{
NSLog(@"OSETSDK click");
}
- (void)splashDidClose:(id)splashAd{
NSLog(@"OSETSDK close");
self.splashAd.delegate = nil;
self.splashAd = nil;
}
- (void)splashWillClose:(id)splashAd{
NSLog(@"OSETSDK splashWillClose");
}激励视频广告
@interface RewardVideoViewController ()<OSETRewardVideoAdDelegate>
@property (nonatomic,strong) OSETRewardVideoAd *rewardVideoAd;
@end
@implementation RewardVideoViewController
- (void)viewDidLoad {
[super viewDidLoad]
//激励视频初始化
self.rewardVideoAd = [[OSETRewardVideoAd alloc] initWithSlotId:self.slotId withUserId:@"123"];
self.rewardVideoAd.delegate = self;
// userId可传空字符串 调用loadAdData 广告加载完成会走rewardVideoDidReceiveSuccess 但是不会展示
//[self.rewardVideoAd loadRewardAdData];
// 具体回调参考demo
}
- (void)rewardVideoDidReceiveSuccess:(nonnull id)rewardVideoAd slotId:(nonnull NSString *)slotId {
NSLog(@"oset-osetrewardVideoDidReceiveSuccess加载成功");
[self.rewardVideoAd loadRewardAdData];
}原生广告
@interface NativeViewController ()<OSETNativeAdDelegate>
@property (nonatomic,strong) OSETNativeAd *nativeAd;
@end
@implementation NativeViewController
- (void)viewDidLoad {
[super viewDidLoad];
//size高度传入0会自适应高度,并在回调中返回广告View,直接添加到需要展示的位置即可(详细使用参考Demo)
self.nativeAd = [[OSETNativeAd alloc] initWithSlotId:@"广告位ID" size:CGSizeMake([UIScreen mainScreen].bounds.size.width, 0)];
self.nativeAd.delegate = self;
[self.nativeAd loadAdData:3];
}原生自渲染广告
创建OSETNativeAdRenderer的对象用以绑定展示和绑定点击试图,返回的数据都在OSETNativeDataAdObject内
具体写法参考Demo内OSETDemoNativeView 和 DemoNativeViewCell
@interface NativeViewController ()<OSETNativeDataAdDelegate,OSETNativeAdRendererDelegate>
@property (nonatomic, strong) OSETNativeDataAd *expressDataAd;
@property (nonatomic, strong) OSETNativeAdRenderer *expressDataAdRender;
@end
@implementation NativeViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.nativeDataAd = [[OSETNativeDataAd alloc]initWithSlotId:@"921DE1BF1B3F06838AE04233A42B01F1" size:CGSizeMake([UIScreen mainScreen].bounds.size.width -100, 300) rootViewController: self];
self.nativeDataAd.delegate = self;
[self.nativeDataAd loadAdData];
}
- (void)nativeDataAdLoadSuccessWithNative:(id)nativeDataAd nativeDataObjects:(NSArray<OSETNativeDataAdObject *> * _Nullable)nativeDataObjects{
OSETNativeDataAdObject * adData = nativeDataObjects.firstObject;
OSETNativeAdRenderer * expressDataAdRenderer = [[OSETNativeAdRenderer alloc]init];
expressDataAdRenderer.dataObject = adData;
expressDataAdRenderer.delegate = self;
expressDataAdRenderer.viewController = self;
[expressDataAdRender registerContainerView:@"绑定容器视图" withDataObject:expressDataAdRender.dataObject];
[expressDataAdRender registerClickableViews:@"绑定点击视图"];
[expressDataAdRender registerCloseView:@"绑定关闭按钮"];
}代理方法说明
所有广告位至少有四个代理方法,广告加载成功、广告加载失败、广告点击、广告关闭,
视频类广告需要在加载成功后手动调起广告,详细使用参考demo隐私政策
SDK用到的隐私信息 包括精确位置(位置)、设备 ID(标识符)、广告数据(使用数据)、其他数据 类型.
用于第三方广告,与用户身份关联,用于追踪目的。(App Store 5.1.2&&3.3.9 被拒)SDK 错误码
| code | 描述 |
|---|---|
| 1 | 无有效广告(无填充) |
| 70000 | 广告未初始化或者初始化appkey为空 |
| 71001 | 请求广告失败,数据异常 |
| 71002 | 素材地址为空,无法播放 |
| 71003 | 播放失败,视频加载超时 |
| 71004 | ua还未获取到(首次安装请求可能会出现。无需处理) |
| 71005 | 传入VC为空 |
| 71009 | 广告素材地址错误 |
TopOn(Taku)配置说明
pod 'OSETCoreToTakuAdapter'
1、打开taku官网后台
2、点击广告平台
3、点击自定义广告平台
4、广告平台名称填写奇点
5、在应用及广告源参数栏中的应用中点击添加参数,参数名称填写应用ID,Key填写app_id,属性必填
6、在应用及广告源参数栏中的广告源中点击添加参数,参数名称填写广告位ID,Key填写unit_id,属性必填
7、在Adapter类名iOS中填入以下内容
| 广告类型 | 适配器类 |
|---|---|
| 激励视频 | OSETCustomerToRewardAdapter |
| 插屏 | OSETCustomerToInterstitialAdapter |
| 横幅 | OSETCustomerToBannerAdapter |
| 原生 | OSETCustomerToNativeAdapter |
| 开屏 | OSETCustomerToSplashAdapter |

8、打开聚合管理->选择添加广告源->添加单个广告源
9、选择奇点、应用ID填入神蓍后台申请的AppKey,广告源名称自己定义,广告位ID填写对应广告类型的广告位ID,头部竞价选择是(奇点只有竞价广告)。点确定保存,半小时后生效

10、至此,奇点广告在taku的自定义广告平台配置已完成,每次修改都要半小时后才能生效。
GroMore配置说明
pod 'OSETCoreToGMAdapter'
1、打开GroMore官网后台
2、创建应用,如果已创建则打开应用,点击添加自定义广告网络
3、广告网络名称填奇点,账户名称填shenshi_qidian,币种人民币,iOS Adapter类名如下:
| 广告类型 | 适配器类 |
|---|---|
| 初始化类名 | OSETCustomerGmInitAdapter |
| 开屏 | OSETCustomerGmSplashAdapter |
| 插屏 | OSETCustomerGmInterstitialAdapter |
| 激励视频 | OSETCustomerGmRewardAdapter |
| 信息流 | OSETCustomerGmNativeAdapter |
| 横幅 | 目前奇点广告暂不支持横幅广告 |
4、添加代码位,广告网络选择奇点广告,应用ID填入神蓍后台申请的AppKey,代码位ID填入神蓍后台申请的广告位ID
GroMore添加自定义广告网络官方文档,点击此处
ToBid配置说明
pod 'OSETCoreToBidAdapter'
1、打开ToBid流量变现平台
2、创建应用,如果已创建则打开ToBid聚合工具
3、打开广告网络,管理自定义网络,添加自定义广告网络,广告网络名称填写奇点,广告网络appId填写奇点后台申请的appId,适配器类信息按如下填写
| 广告类型 | 适配器类 |
|---|---|
| 初始化类名 | OSETCustomToBidInitAdapter |
| 开屏 | OSETCustomToBidSplashAdapter |
| 插屏 | OSETCustomToBidInterstitialAdapter |
| 激励视频 | OSETCustomToBidRewardAdapter |
| 信息流 | OSETCustomToBidNativeAdapter |
| 横幅 | OSETCustomToBidBannerAdapter |
4、打开流量管理,在应用管理中创建聚合广告位,如已创建请忽略
5、点击聚合广告位,管理聚合广告源,添加广告源,广告网络选择奇点,代码位ID填写奇点后台申请的对应广告位ID
6、使用ToBid聚合广告位加载广告即可
重点注意
若使用原生信息流广告,需在ToBid原生聚合广告位内配置奇点广告源中添加自定义配置参数
{"isExpressAd":true}
isExpressAd=true为模版渲染,false则需要开发者做自渲染处理,如不填则默认为false需要开发者自行渲染
具体配置如下
ToBid添加自定义广告网络官方文档,点击此处
