gtapp-ios-oc
为了方便第三方开发者快速集成极验验证SDK,我们提供了以下联系方式,协助开发者进行集成。
QQ群:487868018 (iOS) 请注明验证信息
关于SDK的Bug反馈、用户体验、以及好的建议可以在GitHub或QQ群提交给我们,我们会讨论合理性后会尽快跟进。
目录
1 截图
2 概要
2.1 主要层次:
- 验证主要分为三个部分:
- 从网站主服务器获取所需的验证数据 (id,challenge,success)
- 核心验证过程
- 根据验证回调数据在网站主服务器进行二次验证
2.2 其中:
- iOS SDK 主要完成过程
- 提供默认的failback机制,获取所需的验证数据(网站主也可以根据自己的服务器配置以及需求完成此过程,但必须保持通讯流程完整)
- 完成核心验证过程
- 演示完成的部分
- 二次验证不是由SDK完成,而是网站主根据demo的逻辑以及自己的服务器配置来完成这一块的部署
3 要求
- ios 7.0 以上
- xcode 6.0 以上
- arc
- webkit.framework
4 版本
4.1 描述
- 需要配合极验服务端SDK一同使用。[require geetest server sdk]
- 请仔细阅读开发者文档,支持iOS7以上。[please read developer doc, and support iOS7+]
- 在gtapp-ios-oc项目下版本号为2.15.8.*之后的版本,目前正在持续更新和维护中。[The latest one has the failback feature (version 2.15.8.* +). We had stopped to develop the old version. So we recommend you to use the failback version.]
- failback版本在项目路径的‘gt-iOS-sdk-failback -demo’下。[the failback version in the file 'gt-iOS-sdk-failback -demo']
- 版本号2.16.3.10.1之后需要导入webkit.framework,添加了对wkwebview的支持。
- 详细开发文档请查看根目录下的开发者文档。[get more information in demo files]
- 常见问题请查看根目录下的q&a文件。
4.2 历史
- 版本号2.15.12.30.1 对svg支持,动态获取验证高度,适配新ui
- 版本号2.16.1.20.1 添加对https、localization支持,增加对状态指示器自定义
- 版本号2.16.3.10.1 优化图层结构,优化性能表现,iOS8以上基于wkwebview,表现更稳定
- 版本号2.16.6.8.1 完善功能,修复bug
4.3 单元测试
4.4 Failback
- 2.15. 5.x : 没有Failback版本
- 2.15. 8.x - 当前 : Failback版本
5 关于gtapp-ios-oc
- GTFramework是极验的iOS版本SDK,生成一个基于i386、x86_64、armv7、 armv7s、arm64的framework,支持iOS7.0+。开发使用的Xcode版本为Xcode 7.0。[基于i386、x86_64、armv7、 armv7s、arm64,并支持iOS7+]
- gt-iOS-sdk-demo 调用sdk的演示app程序。 [使用示例了解GTFramework]
- 演示项目提供了完整的一次验证,并将客户端验证结果向示例的客户服务器上发起二次验证的完整通讯过程。[在演示中,我们提供了完整的网络流程]
- 不依赖任何第三方库,demo里的代码可根据网站主项目需要自行修改。[您可以修改demo中的任何代码以满足网站主项目的需求]
- 如果使用failback版本的请下看项目路径下‘gt-iOS-sdk-failback -demo’ [failback版本在文件'gt-iOS-sdk-failback -demo'中]
6 如何使用GTFramework,先运行演示
假设用户自建项目名称为:TestGT
- 在极验官方主页www.geetest.com注册账号并申请相应的应用公钥,id:{{id}}。[从geetest.com获取geetest id/key]
- 将gt-iOS-sdk下的GTFramework项目生成的静态库 GTFramework.framework 和 webkit.framework 引入到项目中 [导入GTFramework到您的项目中]
- 将GTFramework.framework项目以Static Library的方式进行引用。将所需的GTFramework.framework拷贝到工程所在文件夹下。在 TARGETS->Build Phases-> Link Binary With Libaries中点击“+”按钮,在弹出的窗口中点击“Add Other”按钮,选择GTFramework.framework文件添加到工程中。[将GTframework添加到'Link Binary With Libaries']
- 在项目标有TODO注释的地方写入网站主自己处理代码。[在标记了'TODO'的位置添加您自己的处理方法]
7 将GTFramework集成到Swift项目中
目前只提供纯Objective-C的Framework
导入外部框架,无论框架是纯Objective-C、纯Swift还是混合语言,导入外部框架的流程都是一样的。当你要导入外部框架时,确保Build > Packaging > Defines Modele设置为是。
使用下面的语法将框架导入到相应的target的Swift文件中
import FrameworkName
使用下面的语法将框架导入到相应target的Objective-C .m文件中
@import FrameworkName;
更多信息请查阅官方文档 Using Swift with Cocoa and Objective-C (Swift 2)
8 iOS9的适配问题<tips>
关于iOS9适配的详细信息,请跳转到 iOS9适配tips
8.1 对网络传输安全协议https的支持
由于iOS 9采用了更安全的https协议,为了在iOS 9中正常使用http,请在"Info.plist"中进行如下配置,否则将影响网络使用。
临时解决方案
- 方案A
- 强制将NSAllowsArbitraryLoads属性设置为YES,并将其添加到应用的plist中
<key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> </dict>
- 方案B
- 建立白名单并将其添加到应用的plsit中
<key>NSAppTransportSecurity</key> <dict> <key>NSExceptionDomains</key> <dict> <key>geetest.com</key> <dict> <key>NSIncludesSubdomains</key> <true/> <key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key> <true/> <key>NSThirdPartyExceptionRequiresForwardSecrecy</key> <false/> </dict> </dict> </dict>
- 方案C
- 依赖TLS建立白名单的另一种配置方法
<key>NSAppTransportSecurity</key> <dict> <dict> <key>NSAllowsArbitraryLoads</key> <true/> </dict> <key>NSExceptionDomains</key> <dict> <key>geetest.com</key> <dict> <key>NSIncludesSubdomains</key> <true/> <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key> <true/> <key>NSTemporaryExceptionMinimumTLSVersion</key> <string>TLSv1.1</string> </dict> </dict> </dict>
8.2 bitcode
苹果在iOS 9的SDK中添加了对应用瘦身的支持,其中包括bitcode。你可以通过以下方法解决bitcode适配问题
我们目前也在编译生成了支持bitcode版本的SDK。该版本的SDK请参考failback demo目录,去掉文件"GTFramework_bitcode"的后缀,替换原GTFramework文件。
或者
通过设置编译标志ENABLE_BITCODE = NO,或者修改工程的构建设置(build settings)来关闭bitcode功能
9 Xcode7适配问题
9.1 使用第三方库导致的问题
在Build Settings中进行如下配置
Precompile Prefix (GCC_PRECOMPILE_PREFIX_HEADER) = NO Debug Information Format (DEBUG_INFORMATION_FORMAT) = DWARF with dSYM Enabled Modules (C and Objective-C) (CLANG_ENABLE_MODULES) = NO
如果不可行尝试(推荐下面的解决方案)
Enabled Clang Module Debugging = NO
10 IPv6适配
在网络层面使用NSURLConnection、高级API支持IPv6
11 回调Block及返回值
Block: ^(NSString *code, NSDictionary *result, NSString *message) {}
返回值:
- 1.code
- 成功或失败的值(1:成功/其他:失败)状态码,(1: 成功/2: 失败)
- 2.message
- 成功或失败的信息(成功/失败)关于你的结果的描述
- 3.result
- 详细的返回信息,用于向客户服务器提交之后的SDK二次验证信息如果你要完成二次验证,你应该将这些结果信息发送到你的服务器。
{ "geetest_challenge": "5a8c21e206f5f7ba4fa630acf269d0ec4z", "geetest_validate": "f0f541006215ac784859e29ec23d5b97", "geetest_seccode": "f0f541006215ac784859e29ec23d5b97|jordan" }