NTESVerifyCode 3.6.6

NTESVerifyCode 3.6.6

Maintained by luolihao123456, dev-jw, zhangbenliang.



  • By
  • luolihao123456

NTESVerifyCode# iOS

运行环境

SDK 兼容系统版本 iOS 8.0+

SDK集成

CocoaPods集成方式

1.更新Podfile文件

在工程的 Podfile 里对应的 Target 中添加以下代码

	pod 'NTESVerifyCode'

2.集成SDK

在工程的当前目录下, 运行 `pod install` 或者 `pod update`

3.工程设置

在工程target目录内,需将Build Settings —> other link flags设置为-ObjC。

__备注:__

(1). 命令行下执行`pod search NTESVerifyCode`,如显示的`NTESVerifyCode`版本不是最新的,则先执行`pod update`操作更新本地repo的内容

(2). 如果想使用最新版本的SDK,则执行`pod update`

(3). 如果你的工程设置的"Deplyment Target"低于 8.0,则在Podfile文件的前面加上以下语句

platform :ios, '8.0'

手动集成方式

1.下载VerifyCode SDK包

原生Demo下载: https://github.com/yidun/captcha-ios-demo

 **RN Demo下载:** [React Native Demo](https://nos.netease.com/cloud-website-bucket/6903d3dcb564b09f3971351bf039e848.rar)

2.导入 VerifyCode.framework 到XCode工程:

 拖拽`VerifyCode.framework`文件到Xcode工程内(请勾选Copy items if needed选项)

3.导入NTESVerifyCodeResources.bundle到工程中:

 进入`Build Phase`,在`Copy Bundle Resources`选项中,添加`NTESVerifyCodeResources.bundle`文件(请勾选Copy items if needed选项) 。

4.添加依赖库

`SystemConfiguration.framework` `JavaScriptCore.framework`、`WebKit.framework`

5.工程设置

在工程target目录内,需将Build Settings —> other link flags设置为-ObjC。

备注:
(1)如果已存在上述的系统framework,则忽略

(2)SDK 最低兼容系统版本 iOS 8.0

SDK 使用

Object-C 工程

1.在项目需要使用SDK的文件中引入VerifyCode SDK头文件,如下:

	#import <VerifyCode/NTESVerifyCodeManager.h>

2.在页面初始化的地方初始化 SDK,SDK同时支持无感知验证码和常规验证码,需在官网申请不同的captchaID,如下:

	- (void)viewDidLoad {
		[super viewDidLoad];  
			
		// sdk调用
		self.manager = [NTESVerifyCodeManager getInstance];
		self.manager.delegate = self;
		
		// 设置透明度
    	self.manager.alpha = 0.7;
    
    	// 设置frame
    	self.manager.frame = CGRectNull;

 		// captchaId从网易申请,比如@"a05f036b70ab447b87cc788af9a60974"
 		
		// 常规验证码(滑块拼图、图中点选、短信上行)
		// NSString *captchaid = @"deecf3951a614b71b4b1502c072be1c1";
		// self.manager.mode = NTESVerifyCodeNormal;
    
        // 智能无感知验证码
        NSString *captchaid = @"6a5cab86b0eb4c309ccb61073c4ab672";
        self.manager.mode = NTESVerifyCodeBind;
	}

3.在需要验证码验证的地方,调用SDK的openVerifyCodeView接口,如下:

	[self.manager openVerifyCodeView:nil];

4.如果需要处理VerifyCode SDK的回调信息,则实现NTESVerifyCodeManagerDelegate即可

(1) 初始化完成

	/**
	* 验证码组件初始化完成
	*/
	- (void)verifyCodeInitFinish{
		// App添加自己的处理逻辑 
	}

(2) 初始化出错

	/**
	* 验证码组件初始化出错
	* @param error 错误信息,建议直接打印错误码,便于排查问题
	*/
	- (void)verifyCodeInitFailed:(NSArray *)error{
		// App添加自己的处理逻辑
	}

(3) 验证结果回调

	/**
	* 完成验证之后的回调
	* @param result 验证结果 BOOL:YES/NO
	* @param validate 二次校验数据,如果验证结果为false,validate返回空
	* @param message 结果描述信息
	*/
	- (void)verifyCodeValidateFinish:(BOOL)result 
			validate:(NSString *)validate 
			message:(NSString *)message{
		// App添加自己的处理逻辑
	}

(4) 关闭验证码窗口的回调

	/**
	* 关闭验证码窗口后的回调
	*/
	- (void)verifyCodeCloseWindow:(NTESVerifyCodeClose)close{
		//App添加自己的处理逻辑
	}

Swift 工程

1.在项目对应的 bridging-header.h 中引入头文件,如下:

	#import <VerifyCode/NTESVerifyCodeManager.h>

备注: Swift 调用 Objective-C 需要一个名为 <工程名>-Bridging-Header.h 的桥接头文件。文件的作用为 Swift 调用 Objective-C 对象提供桥接。

2.其他调用同上

SDK 接口

1.枚举

	/**
	* @abstract    设置验证码语言类型
	*/
	typedef NS_ENUM(NSInteger, NTESVerifyCodeLang) {
        NTESVerifyCodeLangCN = 1, // 中文
        NTESVerifyCodeLangENUS,   // 美式英文
        NTESVerifyCodeLangENGB,   // 英式英文
        NTESVerifyCodeLangTW,     // 台湾繁体
        NTESVerifyCodeLangHK,     // 香港繁体
        NTESVerifyCodeLangJP,     // 日文
        NTESVerifyCodeLangKR,     // 韩文
        NTESVerifyCodeLangTL,     // 泰文
        NTESVerifyCodeLangVT,     // 越南语
        NTESVerifyCodeLangFRA,    // 法语
        NTESVerifyCodeLangRUS,    // 俄语
        NTESVerifyCodeLangKSA,    // 阿拉伯语
        NTESVerifyCodeLangDE,     // 德语
        NTESVerifyCodeLangIT,     // 意大利语
        NTESVerifyCodeLangHE,     // 希伯来语
        NTESVerifyCodeLangHI,     // 印地语
        NTESVerifyCodeLangID,     // 印尼语
        NTESVerifyCodeLangMY,     // 缅甸语
        NTESVerifyCodeLangLO,     // 老挝语
        NTESVerifyCodeLangMS,     // 马来语
        NTESVerifyCodeLangPL,     // 波兰语
        NTESVerifyCodeLangPT,     // 葡萄牙语
        NTESVerifyCodeLangES,     // 西班牙语
        NTESVerifyCodeLangTR,     // 土耳其语
        NTESVerifyCodeLangNL,     // 荷兰语
        NTESVerifyCodeLangUG,     // 维吾尔语
        NTESVerifyCodeLangMN,     // 蒙古语
        NTESVerifyCodeLangMAI,    // 迈蒂利语
        NTESVerifyCodeLangAS,     // 阿萨姆语
        NTESVerifyCodeLangPA,     // 旁遮普语
        NTESVerifyCodeLangOR,     // 欧里亚语
        NTESVerifyCodeLangML,     // 马来亚拉姆语
        NTESVerifyCodeLangKN,     // 卡纳达语
        NTESVerifyCodeLangGU,     // 古吉拉特语
        NTESVerifyCodeLangTA,     // 泰米尔语
        NTESVerifyCodeLangMR,     // 马拉地语
        NTESVerifyCodeLangTE,     // 泰卢固语
        NTESVerifyCodeLangAM,     // 阿姆哈拉语
        NTESVerifyCodeLangMI,     // 毛利语
        NTESVerifyCodeLangSW,     // 斯瓦西里语
        NTESVerifyCodeLangNE,     // 尼泊尔语
        NTESVerifyCodeLangJV,     // 爪哇语
        NTESVerifyCodeLangFIL,    // 菲律宾语
        NTESVerifyCodeLangBN,     // 孟加拉语
        NTESVerifyCodeLangKK,     // 哈萨克语(西里尔文)
        NTESVerifyCodeLangBE,     // 白俄罗斯语
        NTESVerifyCodeLangBO,     // 藏语
        NTESVerifyCodeLangUR,     // 乌尔都语
        NTESVerifyCodeLangSI,     // 僧伽罗语
        NTESVerifyCodeLangKM,     // 高棉语
        NTESVerifyCodeLangUZ,     // 乌兹别克语
        NTESVerifyCodeLangAZ,     // 阿塞拜疆语
        NTESVerifyCodeLangKA,     // 格鲁吉亚语
        NTESVerifyCodeLangEU,     // 巴斯克语
        NTESVerifyCodeLangGL,     // 加利西亚语
        NTESVerifyCodeLangCA,     // 加泰罗尼亚语
        NTESVerifyCodeLangFA,     // 波斯语
        NTESVerifyCodeLangUK,     // 乌克兰语
        NTESVerifyCodeLangHR,     // 克罗地亚语
        NTESVerifyCodeLangSL,     // 斯洛文尼亚语
        NTESVerifyCodeLangLT,     // 立陶宛语
        NTESVerifyCodeLangLV,     // 拉脱维亚语
        NTESVerifyCodeLangET,     // 爱沙尼亚语
        NTESVerifyCodeLangFI,     // 芬兰语
        NTESVerifyCodeLangBG,     // 保加利亚语
        NTESVerifyCodeLangMK,     // 马其顿语
        NTESVerifyCodeLangBS,     // 波斯尼亚语
        NTESVerifyCodeLangSR,     // 塞尔维亚语(拉丁文)
        NTESVerifyCodeLangEL,     // 希腊语
        NTESVerifyCodeLangRO,     // 罗马尼亚语
        NTESVerifyCodeLangSK,     // 斯洛伐克语
        NTESVerifyCodeLangHU,     // 匈牙利语
        NTESVerifyCodeLangCS,     // 捷克语
        NTESVerifyCodeLangDA,     // 丹麦语
        NTESVerifyCodeLangNN,     // 挪威语
        NTESVerifyCodeLangSV,     // 瑞典语
        NTESVerifyCodeLangPTBR,   // 巴西葡语
        NTESVerifyCodeLangESLA,   // 拉美西语
	};

    /**
     * @abstract    验证码适老
     */
    typedef NS_ENUM(NSInteger, NTESVerifyCodeFontSize) {
        // 小号字体
        NTESVerifyCodeFontSizeSmall = 1,
        // 中号字体
        NTESVerifyCodeFontSizeMedium,
        // 大号字体
        NTESVerifyCodeFontSizeLarge,
        // 超大号字体
        NTESVerifyCodeFontSizeXlarge
    };      
	
	/**
	* @abstract    设置验证码类型
	*/
	typedef NS_ENUM(NSInteger, NTESVerifyCodeMode) {
	    // 普通验证码
	    NTESVerifyCodeNormal = 1,
	    // 无感知验证码
	    NTESVerifyCodeBind,
	};
    
    /**
    * @abstract    验证码关闭的类型
    */
    typedef NS_ENUM(NSInteger, NTESVerifyCodeClose) {
        // 手动关闭
        NTESVerifyCodeCloseManual = 1,
        // 验证完毕后自动关闭
        NTESVerifyCodeCloseAuto,
    };

2.属性

	/**
	* @abstract    验证码图片显示的frame
	* @说明         验证码控件显示的位置,可以不传递。
	*              (1)如果不传递或者传递为CGRectNull(CGRectZero),则使用默认值:topView的居中显示,宽度为屏幕宽度的4/5,高度:view宽度/2.0 + 65
	*              (2)如果传递,则frame的宽度至少为270;高度至少为:宽度/2.0 + 65.
	*/
	@property(nonatomic) CGRect            frame;
	/**
 	* @abstract    验证码图片背景的透明度
	* @说明         范围:0~1,0表示全透明,1表示不透明。默认值:0.8
	*/
	@property(nonatomic) CGFloat           alpha;
	/**
	 * @abstract    验证码图片背景的颜色
	 * @说明         默认值:黑色
	 */
	@property(nonatomic) UIColor           *color;
  •   /**
       * @abstract    验证码适老化
       *
       * @说明          验证码适老化枚举类型NTESVerifyCodeFontSize,可选范围见枚举定义。
       *               不传默认中号字体。
       */
      @property(nonatomic) NTESVerifyCodeFontSize fontSize;		
      
      /**
       * @abstract    验证码语言选项
       * @说明         验证码枚举类型NTESVerifyCodeLang,NTESVerifyCodeLangCN表示中文,NTESVerifyCodeLangEN表示英文
       *              不传默认中文。
       */
       @property(nonatomic) NTESVerifyCodeLang    lang;
    
  •  /**
      * @abstract    验证码滑块icon url,不传则使用易盾默认滑块显示。
      */
      @property(nonatomic) NSString *slideIconURL;
    
    /**
	 * @abstract    验证码验证成功的滑块icon url,不传则使用易盾默认滑块显示。
	 */
	@property(nonatomic) NSString *slideIconSuccessURL;		
	/**
	 * @abstract    验证码验证失败的滑块icon url,不传则使用易盾默认滑块显示。
	 */
	@property(nonatomic) NSString *slideIconErrorURL;
    /**
	 * @abstract    设置验证码类型
	 * @说明         验证码枚举类型NTESVerifyCodeMode,可选类型见枚举定义
	 *              不传默认常规验证码(滑块拼图、图中点选、短信上行)。
	 */
	@property(nonatomic) NTESVerifyCodeMode mode;		
    /**
	 * @abstract    设置极端情况下,当验证码服务不可用时,是否开启降级方案。
	 *              默认开启,当触发降级开关时,将直接通过验证,进入下一步。
	 */
	@property(nonatomic) BOOL openFallBack;
		/**
		 * @abstract    设置发生第fallBackCount次错误时,将触发降级。取值范围 >=1
		 *              默认设置为3次,第三次服务器发生错误时,触发降级,直接通过验证。
	 	 */
		@property(nonatomic) NSUInteger fallBackCount;	
	/**
	* @abstract    是否隐藏关闭按钮
	*              默认不隐藏,设置为YES隐藏,NO不隐藏
	*/
	@property(nonatomic) BOOL closeButtonHidden;
  •   /**
      * @abstract   验证码ipv6配置。
      *             默认为 no,传 yes 表示支持ipv6网络。
      */
      @property(nonatomic) BOOL ipv6;
    
    /**
	 * @abstract    点击背景是否可以关闭验证码视图
 	*              默认可以关闭,设置为YES可以关闭,NO不可以关闭
 	*/
   @property(nonatomic) BOOL shouldCloseByTouchBackground;	

3.初始化

	/**
	* @abstract 	初始化方法
	* @return 		返回NTESVerifyCodeManager对象
	*/
	+ (NTESVerifyCodeManager *)getInstance;

4.配置参数

	/**
	 *  @abstract   配置参数
	 *  @param      captcha_id      验证码id
	 *  @param      timeoutInterval 加载验证码的超时时间,最长12s。这个时间尽量设置长一些,比如7秒以上(7-12s)
	 */
	- (void)configureVerifyCode:(NSString *)captcha_id
                timeout:(NSTimeInterval)timeoutInterval;

5.弹出验证码

	/**
	*  @abstract 展示验证码视图
	*  @说明      展示位置:[[[UIApplication sharedApplication] delegate] window];全屏居中显示,宽度为屏幕宽度的4/5,高度:view宽度/2.0 + 65.
	*/
	- (void)openVerifyCodeView;
	/**
	*  @abstract   在指定的视图上展示验证码视图
	*  @param      topView         加载验证码控件的父视图,可以为nil。
	*                              (1)如果传递值为nil,则使用默认值:[[[UIApplication sharedApplication] delegate] window]
	*                              (2)如果传递值不为nil,则注意topView的宽高值,宽度至少为270;高度至少为:宽度/2.0 + 65.
 	*/
	- (void)openVerifyCodeView:(UIView *)topView;

6.log打印

	/**
	*  @abstract	是否开启sdk日志打印
	*  @param 		enabled 		YES:开启;NO:不开启
	*  @说明 		   默认为NO,只打印workflow;设为YES后,Release下只会打印workflow和BGRLogLevelError
	*/
	- (void)enableLog:(BOOL)enabled;

7.获取验证码SDK版本号

	/**
	* @abstract    验证码SDK版本号
	*/
	- (NSString *)getSDKVersion;

8.自定义loading文案

/**
 *  @abstract   自定义loading文案
 *
 *  @param      loadingText  加载中的文案
 *
 */
- (void)configLoadingText:(NSString * _Nullable)loadingText;

9.自定义loading图片, 支持gif、 png 、 jpg等格式。

/**
 *  @abstract  自定义loading图片, 支持gif、 png 、 jpg等格式。
 *
 *  @说明      自定义 loading图片的参数配置。
 *            (1) 图片格式为 gif 只需要传gifData 即可, animationImage传空。
 *            (2) 图片格式为 png、 jpg时,需要配置animationImage ,gitData传空。
 *
 *  @param      animationImage  单张图片 ,
 *  @param      gifData 图片格式为gif的二进制数据
 */
- (void)configLoadingImage:(UIImage *_Nullable)animationImage
               gifData:(NSData *_Nullable)gifData;

错误码定义

SDK会在回调方法verifyCodeInitFailed:verifyCodeNetError:中抛出错误码,错误码说明如下:

错误码 说明
501 get请求失败
502 js资源加载超时
503 图片加载超时
1004 初始化失败
-1005 无网络连接

效果演示

1.初始化

2.滑块验证

3.点选验证

4.短信验证