[TOC]
控制是否执行验证事件
Declaration
- (BOOL)captchaButtonShouldBeginCaptcha:(GT3CaptchaButton *)button;
Parameters
验证状态改变的通知回调
- (void)captchaButton:(GT3CaptchaButton *)button didChangeState:(GT3CaptchaState)state;
内部错误处理
- (void)gtCaptcha:(GT3CaptchaManager *)manager errorHandler:(GT3Error *)error;
通知已经收到二次验证结果, 并请在此处理最终验证结果
- (void)gtCaptcha:(GT3CaptchaManager *)manager didReceiveSecondaryCaptchaData:(NSData *)data response:(NSURLResponse *)response error:(GT3Error *)error decisionHandler:(void (^)(GT3SecondaryCaptchaPolicy captchaPolicy))decisionHandler;
将要向 API1 发送请求的时候调用此方法
- (BOOL)shouldUseDefaultRegisterAPI:(GT3CaptchaManager *)manager;
Return Value
返回是否使用默认的 API1 行为
API1
将要向 API1 发送请求的时候调用此方法, 通过此方法可以修改将要发送的请求
- (void)gtCaptcha:(GT3CaptchaManager *)manager willSendRequestAPI1:(NSURLRequest *)originalRequest withReplacedHandler:(void (^)(NSURLRequest * request))replacedHandler;
- (NSDictionary *)gtCaptcha:(GT3CaptchaManager *)manager didReceiveDataFromAPI1:(NSDictionary *)dictionary withError:(GT3Error *)error;
dictionary
{"challenge" : "12ae1159ffdfcbbc306897e8d9bf6d06","gt" : "ad872a4e1a51888967bdb7cb45589605","success" : 1}
返回自定解析后的 challenge , gt , success 数据, 结构参考上方样例
challenge
gt
success
通知接收到返回的验证交互结果
- (void)gtCaptcha:(GT3CaptchaManager *)manager didReceiveCaptchaCode:(NSString *)code result:(NSDictionary *)result message:(NSString *)message;
Discussion
此方法仅仅是前端返回的初步结果, 并非验证最终结果。获得 result 后还需进一步二次验证, 以校验数据是否伪造。
result
将要向 API2 发送请求的时候调用此方法。
- (BOOL)shouldUseDefaultSecondaryValidate:(GT3CaptchaManager *)manager;
默认返回 YES,表示 manager 使用二次验证默认逻辑。
- (void)gtCaptcha:(GT3CaptchaManager *)manager willSendSecondaryCaptchaRequest:(NSURLRequest *)originalRequest withReplacedRequest:(void (^)(NSMutableURLRequest * request))replacedRequest
请不要修改 requestHandler 执行所在的线程或队列, 否则可能导请求修改失败. 二次验证的请求方式应为 POST , 头部信息应为:
{"Content-Type":@"application/x-www-form-urlencoded;charset=UTF-8"}
用户主动关闭了验证码界面
- (void)gtCaptchaUserDidCloseGTView:(GT3CaptchaManager *)manager;
通知验证模式
- (void)gtCaptcha:(GT3CaptchaManager *)manager notifyCaptchaMode:(GT3CaptchaMode)mode;
通知图形界面将要显示
- (void)gtCaptchaWillShowGTView:(GT3CaptchaManager *)manager;
更新验证状态
更新验证视图
- (void)gtCaptcha:(GT3CaptchaManager *)manager updateCaptchaViewWithFactor:(CGFloat)fromValue to:(CGFloat)toValue timeInterval:(NSTimeInterval)timeInterval;
略, 请阅读头文件注视
用于自定义验证注册的任务
- (void)executeRegisterTaskWithCompletion:(void(^)(GT3RegisterParameter * _Nullable params, GT3Error * _Nullable error))completion;
Seealso
GT3RegisterParameter
用于自定义验证结果校验的任务
- (void)executeValidationTaskWithValidateParam:(GT3ValidationParam *)param completion:(void(^)(BOOL validationResult, GT3Error * _Nullable error))completion;
验证管理器
@property (nonatomic, readonly, strong) GT3CaptchaManager *captchaManager;
GT3CaptchaManager
验证按钮代理
@property (nonatomic, weak) id<GT3CaptchaButtonDelegate> delegate;
验证状态
@property (nonatomic, readonly, assign) GT3CaptchaState captchaState;
定义容器视图边距
@property (nonatomic, assign) UIEdgeInsets captchaEdgeInsets;
定义各种验证状态下按钮上的提示文案
@property (nonatomic, strong) NSDictionary<NSString *, NSAttributedString *> *tipsDict;
字典请使用以下键名, 与 GT3CaptchaState 一一对应
GT3CaptchaState
'inactive', 'active', 'initial', 'waiting', 'collecting', 'computing', 'success', 'fail', 'error'.
The background color of CAPTCHA widget.
@property (nonatomic, strong) UIColor *mainColor;
Define width for CAPTCHA widget border. Defaults to 1.0. Animatable.
@property (nonatomic, assign) CGFloat *borderWidth;
Define CAPTCHA widget corner radius. Defaults to 3.0. Animatable.
@property (nonatomic, assign) CGFloat *cornerRadius;
定义验证状态指示器的颜色
@property (nonatomic, strong) UIColor *indicatorColor;
Define color for CAPTCHA widget border. Defaults to 0xcccccc. Animatable.
@property (nonatomic, strong) UIColor *borderColor;
初始化并返回一个新的规定了尺寸的 GT3CaptchaButton 实例对象
GT3CaptchaButton
- (instancetype)initWithFrame:(CGRect)frame captchaManager:(GT3CaptchaManager *)captchaManager;
- (void)startCaptcha;
根据验证状态, 在 GTCaptchaManager 内部调用实例方法 startGTCaptchaWithAnimated: , requestGTCaptcha , showGTViewIfRegiested 。
GTCaptchaManager
startGTCaptchaWithAnimated:
requestGTCaptcha
showGTViewIfRegiested
终止验证
重置验证
- (void)stopCaptcha;
立即更新当前的验证提示标题
- (void)updateTitleLabel:(NSAttributedString *)title;
验证管理的代理方法
@property (nonatomic, weak) id<GT3CaptchaManagerDelegate> delegate;
验证视图代理
@property (nonatomic, weak) id<GT3CaptchaManagerViewDelegate> viewDelegate;
验证统计代理
@property (nonatomic, weak) id<GT3CaptchaManagerStatisticDelegate> statisticDelegate;
@property (nonatomic, readonly) GT3CaptchaState captchaState;
图形验证的展示状态
@property (nonatomic, readonly) BOOL isShowing;
获取启动验证参数的接口
@property (nonatomic, readonly) NSURL *API_1;
进行二次验证的接口
@property (nonatomic, readonly) NSURL *API_2;
本次验证会话的验证ID
@property (nonatomic, readonly, strong) NSString *gt_captcha_id;
本次验证的会话的流水号
@property (nonatomic, readonly, strong) NSString *gt_challenge;
当前验证的服务状态
@property (nonatomic, readonly, strong) NSNumber *gt_success_code;
1正常/0宕机
验证背景颜色
@property (nonatomic, strong) UIColor *maskColor;
SDK版本号
+ (NSString *)sdkVersion;
验证单例
+ (instancetype)sharedGTManager;
验证初始化方法
- (instancetype)initWithAPI1:(NSString *)api_1 API2:(NSString *)api_2 timeout:(NSTimeInterval)timeout NS_DESIGNATED_INITIALIZER;
当希望取消正在执行的 NSURLSessionDataTask 时,调用此方法
自定义配置验证方法
- (void)configureGTest:(NSString *)gt_public_key challenge:(NSString *)gt_challenge success:(NSNumber *)gt_success_code withAPI2:(NSString *)api_2;
该方法已抛弃。请使用 registerCaptchaWithCustomAsyncTask:completion: 来自定义 API1 和 API2 请求流程。
registerCaptchaWithCustomAsyncTask:completion:
同一个challenge只能使用在同一次验证会话中,如果使用该方法配置验证参数,需要开发者自己控制对 startGTCaptchaWithAnimated: 的调用,以避免在一次验证会话中多次访问该方法。
注册验证
- (void)registerCaptcha:(GT3CaptchaDefaultBlock)completionHandler;
GT3CaptchaDefaultBlock
注册验证,并且自定义 API1 及 API2 流程
- (void)registerCaptchaWithCustomAsyncTask:(id<GT3AsyncTaskProtocol>)customAsyncTask completion:(GT3CaptchaDefaultBlock)completionHandler;
开始验证
- (void)startGTCaptchaWithAnimated:(BOOL)animated;
- (void)resetGTCaptcha;
内部实现是先调用 stopGTCaptcha , 在主线程延迟0.3秒后, 执行 startCaptcha 方法, 且只有在 captchaState 为 GT3CaptchaStateFail , GT3CaptchaStateError , GT3CaptchaStateSuccess , GT3CaptchaStateCancel 才会有效。
stopGTCaptcha
startCaptcha
captchaState
GT3CaptchaStateFail
GT3CaptchaStateError
GT3CaptchaStateSuccess
GT3CaptchaStateCancel
执行完后, 状态为 GT3CaptchaStateInit 。
GT3CaptchaStateInit
若验证显示则关闭验证界面
- (void)closeGTViewIfIsOpen;
获取cookie value
- (NSString *)getCookieValue:(NSString *)cookieName;
配置 GTView 资源请求超时时长,以秒为单位
GTView
- (void)useGTViewWithTimeout:(NSTimeInterval)timeout;
设置图形验证的圆角大小
- (void)useGTViewWithCornerRadius:(CGFloat)cornerRadius;
验证标题
- (void)useGTViewWithParams:(NSDictionary *)params;
默认不开启. 字符长度不能超过28, 一个中文字符为两个2字符长度.
验证视图支持的方向
- (void)useGTViewWithInterfaceOrientation:(UIInterfaceOrientationMask)supportOrientation;
验证视图高度约束
- (void)useAnimatedAcitvityIndicator:(GT3IndicatorAnimationViewBlock)animationBlock withIndicatorType:(GT3ActivityIndicatorType)type
为了能方便的调试动画,真机调试模拟低速网络, Settings->Developer->Status->Enable->Edge(😂)
配置背景模糊
- (void)useVisualViewWithEffect:(UIBlurEffect *)blurEffect;
切换验证服务集群节点
- (void)useServiceNode:(GT3CaptchaServiceNode)node;
默认中国节点。使用其他节点需要使用相应的配置,否则无法正确访问验证服务。使用该方法前,请向极验技术支持充分了解极验的服务集群节点。
详细见 GT3CaptchaServiceNode
GT3CaptchaServiceNode
控制使用HTTPS协议请求验证
- (void)disableSecurityAuthentication:(BOOL)disable;
控制验证背景交互事件
- (void)disableBackgroundUserInteraction:(BOOL)disable;
控制内部的网络可达性检测
- (void)enableNetworkReachability:(BOOL)enable;
验证ID(gt)
@property (nonatomic, strong) NSString *gt;
验证流水号
@property (nonatomic, strong) NSString *challenge;
验证当机状态。@(1) 为正常, @(0) 为宕机。
@property (nonatomic, strong) NSNumber *success;
验证初步判定结果。@”1” 通过, @”0” 未通过。
@property (nonatomic, strong) NSString *code;
验证结果校验数据。使用该数据,通过 validate 接口进行结果校验,以获得最终验证结果。
@property (nullable, nonatomic, strong) NSDictionary *result;
附带的消息。
@property (nullable, nonatomic, strong) NSString *message;
极验封装的错误对象, 用于方便构造和返回特别信息
极验定义的错误类型
typedef NS_ENUM(NSUInteger, GT3ErrorType) { /** 用户中断验证导致 */ GT3ErrorTypeUser, /** 服务端返回错误 */ GT3ErrorTypeServer, /** 内部网络抛出错误类型 */ GT3ErrorTypeNetWorking, /** 内部浏览器抛出的错误类型 */ GT3ErrorTypeWebView, /** 从前端库抛出的错误类型 */ GT3ErrorTypeJavaScript, /** 内部解码错误类型 */ GT3ErrorTypeDecode, /** 未知错误类型 */ GT3ErrorTypeUnknown};
发生错误时接收到的元数据, 没有数据则为nil
@property (nonatomic, readonly, strong) NSData * _Nullable metaData;
极验的额外错误信息
@property (nonatomic, readonly, strong) NSString * gtDescription;
原始的error
@property (nonatomic, readonly, strong) NSError * _Nullable originalError;
通过提供的详细的参数初始化GT3Error
+ (instancetype)errorWithDomainType:(GT3ErrorType)type code:(NSInteger)code userInfo:(nullable NSDictionary *)dict withGTDesciption:(NSString *)description;
基于提供的NSError封装成GT3Error
+ (instancetype)errorWithDomainType:(GT3ErrorType)type originalError:(NSError *)originalError withGTDesciption:(NSString *)description;
极验验证状态的枚举量
typedef NS_ENUM(NSInteger, GT3CaptchaState) { /** 验证未激活 */ GT3CaptchaStateInactive, /** 验证激活 */ GT3CaptchaStateActive, /** 验证初始化中 */ GT3CaptchaStateInitial, /** 验证检测数据中 */ GT3CaptchaStateCollecting, /** 验证等待提交中 */ GT3CaptchaStateWaiting, /** 验证结果判定中*/ GT3CaptchaStateComputing, /** 验证通过*/ GT3CaptchaStateSuccess, /** 验证失败*/ GT3CaptchaStateFail, /** 验证发生错误*/ GT3CaptchaStateError};
验证集群节点
typedef NS_ENUM(NSInteger, GT3CaptchaServiceNode) { /** 中国服务集群 */ GT3CaptchaServiceNodeCN = 0, /** 中国服务集群(支持 IPv6)*/ GT3CaptchaServiceNodeCN_IPv6, /** 北美亚马逊云服务集群 */ GT3CaptchaServiceNodeNA, /** 北美谷歌云服务集群,该节点已停止使用 */ GT3CaptchaServiceNodeNG, /** 默认服务集群 */ GT3CaptchaServiceNodeDefault = GT3CaptchaServiceNodeCN};
验证模式枚举量
typedef NS_ENUM(NSInteger, GT3CaptchaMode) { /** 验证默认模式*/ GT3CaptchaModeDefault, /** 验证宕机模式*/ GT3CaptchaModeFailback};
视图上结果的更新策略
typedef NS_ENUM(NSInteger, GT3SecondaryCaptchaPolicy) { /** 二次验证通过 */ GT3SecondaryCaptchaPolicyAllow, /** 二次验证拒绝 */ GT3SecondaryCaptchaPolicyForbidden};
语言选项
typedef NS_ENUM(NSInteger, GT3LanguageType) { /** Simplified Chinese 简体中文 */ GT3LANGTYPE_ZH_CN = 0, /** Traditional Chinese 繁体中文 */ GT3LANGTYPE_ZH_TW, /** Traditional Chinese 繁体中文 */ GT3LANGTYPE_ZH_HK, /** Korean 韩语 */ GT3LANGTYPE_KO_KR, /** Japenese 日语 */ GT3LANGTYPE_JA_JP, /** English 英语 */ GT3LANGTYPE_EN, /** Indonesian 印度尼西亚语 */ GT3LANGTYPE_ID, /** Arabic 阿拉伯语 */ GT3LANGTYPE_AR, /** German 德语 */ GT3LANGTYPE_DE, /** Spanish 西班牙语 */ GT3LANGTYPE_ES, /** French 法语 */ GT3LANGTYPE_FR, /** Portuguese 葡萄牙语 */ GT3LANGTYPE_PT_PT, /** Russian 俄语 */ GT3LANGTYPE_RU, /** System language 跟随系统语言*/ GT3LANGTYPE_AUTO = 999};
活动指示器类型
typedef NS_ENUM(NSInteger, GT3ActivityIndicatorType) { /** System Indicator Type */ GT3IndicatorTypeSystem = 0, /** Geetest Defualt Indicator Type */ GT3IndicatorTypeDefault, /** Custom Indicator Type */ GT3IndicatorTypeCustom,};
typedef void(^GT3CaptchaDefaultBlock)(void);
自定义状态指示器的动画实现block
typedef void(^GT3IndicatorAnimationViewBlock)(CALayer *layer, CGSize size, UIColor *color);