> >

概述

DeepKnow iOS SDK提供给集成iOS原生客户端开发的开发者使用, SDK不依赖任何第三方库。

DeepKonw 为极验业务安全服务的基础感知构件,主要用于采集客户端的相关安全信息,为后续服务提供数据,是其他极验服务的基础。

环境需求

条目 描述
开发目标 iOS8+
开发环境 Xcode 10.0
测试环境 真机
sdk三方依赖

获取 SDK

请联系负责对接的极验工作人员

导入 SDK 到项目工程并配置开发环境

  1. 如果您是手动添加 SDK, 将下载获取的DeepKnowSDK.framework及系统的AdSupport.framework库添加到工程中。确保Copy items if needed已被勾选, 且确保在PROJECT -> Build Phases -> linked Frameworks and Libraries路径下。

    import

  1. 针对静态库中的Category, 需要在对应target的Build Settings->Other Linker Flags添加-all_load编译选项。建议先添加-ObjC,如果依然有问题,再添加-all_load

    linkerflags

配置接口

集成用户需要使用 iOS SDK 完成提供的以下接口:

  1. 初始化管理
  2. 启动管理器

集成代码参考下方的代码示例

编译并运行你的工程

若使用 Xcode 14.3 运行项目时报链接不到 ARC 库的错, 原因是 Xcode 14.3 移除了 ARC 相关的库,iOS 9.0 及以上系统内置了ARC 库,所以有两种解决方案:

a:可以选择将项目目标最低版本设置为9.0或以上

b:将在 14.3 以下的 Xcode 版本中的 ARC 库拷贝到 Xcode 14.3 版本对应路径上

编译你的工程, 体验畅快体验您的DeepKnow

build

代码示例

初始化

在工程中的AppDelegate.m文件头部引入动态库<DeepKnowSDK/DeepKnowSDK.h>

#import <DeepKnowSDK/DeepKnowSDK.h>

AppDelegate.m中的UIApplicationDelegate的代理方法里初始化和启动DeepKnow

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

NSLog(@"DeepKnow Version: %@", [DeepKnow sdkVersion]);

if ([DeepKnow registerWithAppID:@"00505b6********1795"]) {
DeepKnow *deepknow = [DeepKnow sharedInstance];
[deepknow start];

NSLog(@"DeepKnow Did Start. %@", deepknow);
}

// Override point for customization after application launch.
return YES;
}

至此, DeepKnow已在您的应用中启动。

事件发生

给关键场景的视图控制页设置标签

在相应控制页的文件中#import <DeepKnowSDK/DeepKnowSDK.h>, 然后在UIViewController的生命周期中设置DeepKnow场景事件别名

一般用于标记核心控制页面, 比如活动等。 手动设置后, DeepKnowSDK会自动添加的控制页面标签到相应的数据里。

#import <DeepKnowSDK/DeepKnowSDK.h>

...

- (void)viewDidLoad {
[super viewDidLoad];

self.dpEventAlias = @"this is a KEY Event";

...
}

该操作需在viewDidLoad里进行

在相应场景获取 SessionID


#import <DeepKnowSDK/DeepKnow.h>

...

- (void)viewDidLoad {
[super viewDidLoad];

self.dpEventAlias = @"login";
[self createDeepKnowDataButton];
...
}

- (void)createDeepKnowDataButton {
UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(20, 96, 72, 44)];
button.backgroundColor = [UIColor blackColor];
button.layer.cornerRadius = 3;

button.titleLabel.text = @"登录";

[button addTarget:self action:@selector(fetchSessionID) forControlEvents:UIControlEventTouchUpInside];

[self.view addSubview:button];
}

- (void)fetchSessionID {
// 登录逻辑
...

/**
* @abstract 获取当前的会话ID
*/
[[DeepKnow sharedInstance] fetchSessionWithCompletion:^(DPSessionStatus * _Nullable status, NSError * _Nullable error) {
if (!error) {
// 成功获取 SessionID
NSLog(@"Fetch sessionID: %@, expired at %@", status.sessionID, status.expiredDate);
}
else {
// 获取失败
NSLog(@"Fetch error: %@", error.localizedDescription);
}
}];
}

提交自定义数据

以登录场景, 提交场景标识、用户 ID 、会员状态为例

- (void)login {
NSDictionary *userInfo = @{@"scene" : @"login",
@"user_id" : @"1234567",
@"member" : @"1"};
[[DeepKnow sharedInstance] fetchSessionWithAttribute:userInfo completion:^(DPSessionStatus * _Nullable status, NSError * _Nullable error) {
if (!error) {
NSLog(@"Fetch sessionID: %@, expired at %@", status.sessionID, status.expiredDate);
}
else {
NSLog(@"Fetch error: %@", error.localizedDescription);
}
}];
}

通过 SessionID 获取设备指纹 ID

根据业务实际需要, 将 SessionID 提交到服务器

更详细的使用方法, 请参考提供的Demo中的示例代码