Android

运行环境

SDK兼容系统版本 Android 4.0+

SDK集成

获取SDK

原生SDK 下载: 从github上下载验证码sdk的aar包点我下载sdk

React Native Demo下载: React Native Demo

手动导入SDK

将获取的sdk的aar文件放到工程中的libs文件夹下,然后在app的build.gradle文件中增加如下代码

repositories {
    flatDir {
        dirs 'libs'
    }
}

在dependencies依赖中增加对aar包的引用

compile(name:'captcha-release', ext: 'aar')//aar名称和版本号以下载下来的最新版为准

SDK接口

验证码属性配置类:CaptchaConfiguration

final CaptchaConfiguration configuration = new CaptchaConfiguration.Builder()
   .captchaId(noSenseCaptchaId)// 验证码业务id
   .url(captchaUrl) // 接入者无需设置,该接口为调试接口
   // 验证码类型,默认为普通验证码(滑块拼图、图中点选、短信上行),如果要使用无感知请设置以下类型,否则请不要设置
   .mode(CaptchaConfiguration.ModeType.MODE_INTELLIGENT_NO_SENSE)
   .listener(captchaListener) // 验证码回调监听器
   .timeout(1000 * 10) // 超时时间,一般无需设置
   .languageType(langType) // 验证码语言类型,一般无需设置,可设置值请参看下面验证码语言枚举类介绍
   .debug(true) // 是否启用debug模式,一般无需设置
   // 设置验证码框的位置和宽度,一般无需设置,不推荐设置宽高,后面将逐步废弃该接口
   .position(-1, -1, 0, 0)
   // 自定义验证码滑动条滑块的不同状态图片
   .controlBarImageUrl(controlBarStartUrl, controlBarMovingUrl, controlBarErrorUrl)
   .backgroundDimAmount(dimAmount) // 验证码框遮罩层透明度,一般无需设置
   .touchOutsideDisappear(isTouchOutsideDisappear)  // 点击验证码框外部是否消失,默认为系统默认配置(消失),设置false不消失
   .useDefaultFallback(true) // 是否使用默认降级方案,默认开启
   .failedMaxRetryCount(failedMaxRetryCount) // 当出现服务不可用时,尝试加载的最大次数,超过此次数仍然失败将触发降级,默认3次
   .hideCloseButton(false)//是否隐藏右上角关闭按钮,默认不隐藏
   .build(context); // Context,请使用Activity实例的Context

验证码语言枚举类

在上述构建验证码属性配置类CaptchaConfiguration的languageType属性时,其值为CaptchaConfiguration.LangType类型,可使用如下值

 public static enum LangType {
        LANG_ZH_CN, // 中文简体
        LANG_ZH_TW, // 中文繁体
        LANG_EN,    // 英文
        LANG_JA,    // 日文
        LANG_KO,    // 韩文
        LANG_TH,    // 泰语
        LANG_VI,    // 越南语
        LANG_FR,    // 法语
        LANG_AR,    // 阿拉伯语
        LANG_RU;    // 俄语 
        LANG_DE,    // 德语
        LANG_IT,    // 意大利语
        LANG_HE,    // 希伯来语
        LANG_HI,    // 印地语
        LANG_ID,    // 印尼语
        LANG_MY,    // 缅甸语
        LANG_LO,    // 老挝语
        LANG_MS,    // 马来语
        LANG_PL,    // 波兰语
        LANG_PT,    // 葡萄牙语
        LANG_ES,    // 西班牙语
        LANG_TR,    // 土耳其语

        private LangType() {
        }
    }

验证码功能提供类:Captcha

Captcha captcha = Captcha.getInstance().init(configuration);
captcha.validate();

集成说明

初始化

 // 创建验证码回调监听器
 captchaListener = new CaptchaListener() {
            @Override
            public void onReady() {

            }

            @Override
            public void onValidate(String result, String validate, String msg) {
                if (!TextUtils.isEmpty(validate)) {
                    Toast.makeText(getApplicationContext(), "验证成功:" + validate, Toast.LENGTH_LONG).show();
                } else {
                    Toast.makeText(getApplicationContext(), "验证失败", Toast.LENGTH_LONG).show();
                }
            }
            
            //建议直接打印错误码,便于排查问题
            @Override
            public void onError(int code, String msg) {
                Log.e("Captcha", "验证出错,错误码:" + code + " 错误信息:" + msg);
                Toast.makeText(getApplicationContext(), "验证出错,错误码:" + code + " 错误信息:" + msg, Toast.LENGTH_LONG).show();
            }

            @Override
            public void onCancel() {

            }

            @Override
            public void onClose() {
                Toast.makeText(getApplicationContext(), "用户关闭验证码", Toast.LENGTH_LONG).show();
            }
        };
	
// 创建构建验证码的配置类,可配置详细选项请参看上面SDK接口 验证码属性配置类:CaptchaConfiguration
final CaptchaConfiguration configuration = new CaptchaConfiguration.Builder()
            .captchaId(noSenseCaptchaId)// 验证码业务id
            // 验证码类型,默认为常规验证码(滑块拼图、图中点选、短信上行),如果要使用智能无感知请设置该类型,否则无需设置
            .mode(CaptchaConfiguration.ModeType.MODE_INTELLIGENT_NO_SENSE)  
            .listener(captchaListener) //设置验证码回调监听器
            .build(context); // Context,请使用Activity实例的Context
// 初始化验证码
final Captcha captcha = Captcha.getInstance().init(configuration);
NOTE:【重要】如果您在易盾官网申请的业务id为智能无感知类型,请务必设置mode参数,否则请不要设置

弹出验证码

captcha.validate();

Destroy验证码资源

@Override
protected void onDestroy() {  // 在初始化验证码的Activity的onDestroy方法中调用,避免内存泄漏
    super.onDestroy();
    Captcha.getInstance().destroy();
}

混淆配置

proguard混淆配置文件增加:

-keepattributes *Annotation*
-keep public class com.netease.nis.captcha.**{*;}

-keep public class android.webkit.**

-keepattributes SetJavaScriptEnabled
-keepattributes JavascriptInterface

-keepclassmembers class * {
    @android.webkit.JavascriptInterface <methods>;
}

常见问题

js错误找不到onValidate

"Uncaught TypeError: JSInterface.onValidate is not a function", source:xxxx

原因:JSInterface被混淆导致,请参考[混淆配置]keep验证码相关的类。

验证码加载不出来

原因1:如果生成出的url地址在电脑上可以访问并正常显示,在手机浏览器上不能访问,而且浏览器显示“您的时钟慢了”,说明手机系统时间与证书时间不匹配。主要出现场景在测试时拿到的手机可能会有问题。

验证码加载不出来,log输出:"Uncaught TypeError: Object [object Object] has no method

"Uncaught TypeError: Object [object Object] has no method 'onReady'", source:xxxx

原因:Android4.2之后使用JS接口时必须添加注解 @JavascriptInterface,但是有时会被混淆掉,混淆配置添加:

-keepattributes *Annotation*

请参考[混淆配置]一节。

效果演示

拖动

自定义语言类型

点选

短信上行

Online Chat Tel:95163223