基于虚拟机保护、设备特征识别和操作行为识别的新一代智能验证码,具备智能评分、抗 Headless、模拟伪装、针对恶意设备自动提升验证难度等多项安全措施,帮助开发者减少恶意攻击导致的数字资产损失,强力护航业务安全。
你可以通过 XCode 13+ 打开本项目进行示例项目的预览和更改,具体文件请点击此处。
下载 YoTest-iOS-SDK 最新 Tag 代码,将 YoTest-iOS-SDK/Product 文件夹下的 YoTestSDK.xcframework 以及 WebRTC.framework 拖到您的工程目录里,并将动态库设置成 Embed&Sign,操作如下所示:
在 Podfile 中添加pod 'YoTestSDK', '1.0.3'
并执行 pod insall
进行安装。
若有自定义更改SDK的需求,你可将仓库克隆到本地,自行修改后执行编译脚本打包,操作如下:
> git clone https://gitee.com/yo-test-team/yo-test-i-os-sdk.git
> cd YoTest-iOS-SDK
> ./build.sh
编译好后,可以按照 安装 中的步骤,添加到工程项目中。
第一步,克隆最新 Tag 代码,下载好后按照 安装 中的步骤添加到工程项目中(若您使用的是 CocoaPods,在 Podfile 中添加 pod 'YoTestSDK', '1.0.3'
并执行 pod insall
进行安装):
> git clone -b 1.0.3 --depth=1 https://gitee.com/yo-test-team/yo-test-i-os-sdk.git
第二步,在 Appdelegate 中添加注册 SDK 的代码,如图所示:
YoTest.registSDK(auth: .init(
accessId: "填写项目的accessId,可在友验后台查看"
)) { success in
print("regist success: \(success)")
}
第三步,在给验证码页面添加 YoTestDelegate
并实现以下代理方法:
func onSuccess(args: [String : Any]) {
print("onSuccess args: \(args)")
}
func onReady(args: [String : Any]) {
print("onReady args: \(args)")
}
func onShow(args: [String : Any]) {
print("onShow args: \(args)")
}
func onClose(args: [String : Any]) {
print("onClose args: \(args)")
captcha?.close()
}
func onError(args: [String : Any]) {
print("onError args: \(args)")
}
第四步,在需要弹出验证的逻辑中加入声明属性 var captcha: YoTest?
代码:
if captcha == nil {
do {
captcha = try YoTest(with: self)
} catch {
print("error: \(error)")
}
}
captcha?.verify()
YoTest类:
YoTest.Auth结构体:
YoTest.YTError:
YoTest.YTError.Code枚举:
YoTestDelegate协议:
注册SDK,需要在使用SDK进行人机验证前调用。可以添加到AppDelegate中,启动 App 时注册
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
...
YoTest.logLevel = .verbose
YoTest.registSDK(auth: .init(accessId: "在这里填写你的accessId")) { success in
print("regist success: \(success)")
}
...
return true
}
销毁资源。不再使用SDK时,可以调用 YoTest.destroy() 方法来回收部分资源
/// 不再使用时
YoTest.destroy()
初始化 YoTest 实例对象。
do {
let captcha = try YoTest(with: nil)
} catch {
print("error: \(error)")
}
调起验证界面
do {
let captcha = try YoTest(with: nil)
captcha.verify()
} catch {
print("error: \(error)")
}
关闭验证界面。在 YoTestDelegate 的 onClose 方法回调时调用 close() 方法
class YourClass: NSObject, YoTestDelegate {
...
var captcha: YoTest?
...
func onClose(args: [String : Any]) {
captcha?.close()
}
...
}
取消验证。
class YourClass: NSObject, YoTestDelegate {
...
var captcha: YoTest?
...
func cancelVerify() {
captcha?.cancel()
}
...
代理对象的获取和设置
class YourClass: NSObject, YoTestDelegate {
...
var captcha: YoTest?
...
func setDelegate() {
captcha?.delegate = self
}
...
是否显示 SDK 提供的 loading,默认为true,可以设置为false来关闭
class YourClass: NSObject, YoTestDelegate {
...
var captcha: YoTest?
...
func dontShowLoading() {
captcha?. autoShowLoading = false
}
...
是否显示SDK提供的Toast,默认为true,可以设置为false来关闭
class YourClass: NSObject, YoTestDelegate {
...
var captcha: YoTest?
...
func dontShowToast() {
captcha?.autoShowToast = false
}
...
初始化 Auth 对象。
YoTest.Auth(accessId: "友验后台申请的 accessId")
错误码类型请参考如下表格:
错误码 | 描述 |
---|---|
case requesting | 正在请求授权 |
case unavailable | 服务不可用,请检查accessId是否正确或网络是否正常 |
验证已准备就绪的回调
class YourClass: NSObject, YoTestDelegate {
...
func onReady(args: [String: Any]) {
// 在这里实现自己的代码逻辑
}
...
验证成功时的回调
class YourClass: NSObject, YoTestDelegate {
...
func onReady(args: [String: Any]) {
// 在这里实现自己的代码逻辑
}
...
验证弹框即将显示的回调
class YourClass: NSObject, YoTestDelegate {
...
func onShow(args: [String: Any]) {
// 在这里实现自己的代码逻辑
}
...
验证错误回调
class YourClass: NSObject, YoTestDelegate {
...
func onError(args: [String: Any]) {
// 在这里实现自己的代码逻辑
}
...
验证关闭时回调
class YourClass: NSObject, YoTestDelegate {
...
var captcha: YoTest?
...
func onClose(args: [String: Any]) {
// 记得调用 captcha.close()
captcha?.close()
// 在这里实现自己的代码逻辑
}
...
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。