> >

资源与概述

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

环境与要求

条目 资源
开发目标 兼容 iOS9+
开发环境 Xcode 13+
系统依赖
SDK 第三方依赖

安装

获取 SDK

请联系您的对接人。

导入 SDK

  1. 如果您是手动添加SDK, 将下载获取的GeeGuardSDK.framework文件拖拽到工程中, 确保Copy items if needed已被勾选。
  2. 请使用Linked Frameworks and Libraries方式导入framework。在拖入GeeGuardSDK.framework到工程时后, 还要检查.framework是否被添加到PROJECT -> Build Phases -> Linked Frameworks and Libraries
    ios_导入framework

    此外,在 SDK/XCFramework 目录下也有 xcframwork 格式的 SDK

  3. 建议在项目工程中的 PROJECT -> Target -> Capabilities 中添加 Access WiFi Information

    添加成功后,Xcode 会自动创建 Entitlement

  4. 设备验 iOS SDK 使用了其中部分函数获取硬盘容量、环境检测信息用于风控目的,涉及 NSPrivacyAccessedAPICategoryDiskSpaceNSPrivacyAccessedAPICategoryFileTimestamp 两个类别,特此说明。

苹果在 WWDC23 上发布了应用程序(包括 SDK)的新隐私政策,并有 Get started with privacy manifests - WWDC23 - Videos - Apple Developer 的单独专题。7 月 27 日苹果发布了此则新闻,新闻称:2023 年秋季开始,如果新上传的应用程序中使用了没有提供隐私清单的相关 API,那么你将会收到一封邮件通知,而从 2024 年春季开始,隐私清单会变成一个强制要求。涉及到的 API 以及使用原因可参考:Describing use of required reason API | Apple Developer Documentation,如果使用原因未在列表中列出也可直接提交具体使用理由。
如何创建新隐私清单说明,可参考 Privacy manifest files | Apple Developer Documentation

调用逻辑

  1. 在后台注册获取 AppID

  2. 使用 AppID 获取 GeeID 或 GeeToken

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

编译并运行你的工程

编译你的工程, 体验 GeeGuard !

ios_编译运行

代码示例

接入适用于 2.3.0+ 版本

导入头文件

在工程中导入验证动态库GeeGuardSDK.framework的头文件

#import <GeeGuardSDK/GeeGuardSDK.h>

应用启动后立即注册 appID

// 请使用后台账户生成的 APPID
#define APPID @"abcdef123456********ef1234567890"

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.

// 注册你的 AppID
[GeeGuard registerWithAppID:APPID];

return YES;
}

获取 GeeToken

使用 GeeGuardSDK 对数据进行签名,并获取环境检测 GeeToken:

// 直接获取 GeeToken,需在服务端解析结果
- (void)getGeeToken {
// 唯一标记本次业务的流水号或凭证,用于防止 GeeToken 从业务场景剥离
// 如果无防止 GeeToken 从业务场景剥离的需求,data 可以传入 nil
NSData *data = [@"唯一标记本次业务的流水号或凭证" dataUsingEncoding:NSUTF8StringEncoding];
GeeGuardReceipt *receipt = [GeeGuard fetchReceiptWithSignData:data];
if (receipt) {
// 随业务数据一同提交,请在服务端获取最终的环境识别结果及指纹
// 接口参数请参考服务端文档
NSLog(@"GeeToken: %@", receipt.geeToken);
}
else {
NSLog(@"无法获取 GeeGuardReceipt,请检查是否已通过 [[GeeGuard sharedGuard] registerWithAppID:] 注册 AppID");
}
}

// 获取 respondedGeeToken,需在服务端解析结果
// 此方法回调为异步
// 获取 respondedGeeToken,需在服务端解析结果
// 此方法回调为异步
- (void)getRespondedGeeToken {
// 唯一标记本次业务的流水号或凭证,用于防止 GeeToken 从业务场景剥离
// 如果无防止 GeeToken 从业务场景剥离的需求,data 可以传入 nil
NSData *data = [@"唯一标记本次业务流水号数据或凭证,用于业务关联及校验" dataUsingEncoding:NSUTF8StringEncoding];

[GeeGuard submitReceiptWithSignData:data completion:^(GeeGuardReceipt * _Nullable receipt, NSError * _Nullable error) {
if (!error) {
// 随业务数据一同提交,请在服务端获取最终的环境识别结果及指纹
// 接口参数请参考服务端文档
NSLog(@"RespondedGeeToken: %@", receipt.respondedGeeToken);
}
else {
NSLog(@"error code: %ld", error.code);
NSLog(@"error: %@", error.userInfo.description);

if (error.code == -300 || error.code == -500 || error.code == -501) {

// TODO: 当因网络或服务响应失败无法获取 respondedGeeToken 时,可降级使用 geetoken
// 随业务数据一同提交,请在服务端获取最终的环境识别结果及指纹
// 接口参数请参考服务端文档
NSLog(@"geeToken: %@", receipt.geeToken);
}
}
}];
}

错误码清单

其中异步获取方法 submitReceiptWithSignData:completion: 中可能返回的错误码有:

错误码 描述
-200 未注册 AppID,请在启动后注册 AppID
-300 网络错误,详细见错误对象的 userInfo 中的信息
-500 服务响应格式异常,详细请查看 receipt.originalResponse
-501 服务响应失败,详细请查看 receipt.originalResponse

可以参考获取 GeeToken 中的代码进行错误处理。

查询 GeeToken 结果

将 respondedGeeToken 或 GeeToken 跟随业务数据一起提交到业务的服务端,服务端再向极验设备指纹服务查询结果。详细见服务端文档。

更新说明

版本号 更新内容 日期
2.6.0 1. 安全能力升级 2024-06-21
2.5.3 1. 增加 register 回调 2024-03-12
2.5.2 1. iOS 17 问题修复 2024-02-26
2.5.1 1. 升级安全能力 2024-01-29
2.5.0 1. 修复了 iOS 17 上部分环境风险检测的问题
2. 升级安全能力
3. 移除 bitcode,缩减 SDK 体积
4. 修复已知问题
2024-01-08
2.3.1 1. 新增获取 SDK 当前版本号的接口
2. 修复已知问题
2023-10-09
2.3.0 1. 调用接口调整 2023-08-30
2.2.2 1. 升级安全能力
2. 修复已知问题
2023-07-26
2.2.0 1. 升级安全能力 2023-04-19
2.1.1 1. 升级部分功能
2. 修复已知问题
2023-02-07
2.1.0 1. 功能升级及优化
2. 修复已知问题
2022-09-07
2.0.0 - 2022-07-25
1.5.0 - 2022-05-26