Android客户端接入

本文为您介绍Android客户端图形认证的集成方法及接口的功能示例。

接入步骤

下载SDK

登录号码认证产品控制台,在概览页面右侧API&SDK区域,单击立即下载,进入API&SDK页面,根据页面提示下载并解压对应SDK。

导入SDK

将SDK包中的.aar文件(包括alicom_captcha_android_vx.y.z_date.aar )拖拽到工程中的libs文件夹下,检查.aar文件是否被添加到Library ,并在项目的build.gradle下添加如下代码:

repositories {
        flatDir {
            dirs 'libs'
        }
  }

.aar包添加依赖(AAR默认不传递第三方依赖,需要您手动添加):

implementation(name: 'alicom_captcha_android_vx.y.z_date', ext: 'aar')

非Kotlin工程配置

在根目录build.gradle配置:

ext.kotlin_version = "1.4.10"
dependencies {
    classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}

在引入模块build.gradle配置:

apply plugin: 'kotlin-android'
dependencies {
      implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
}
说明

若Kotlin版本存在冲突,剔除Kotlin依赖exclude(group:'org.jetbrains.kotlin')即可。

添加权限

<!--必选-默认申请-->
<uses-permission android:name="android.permission.INTERNET" />
<!--必选-默认没有申请-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!--可选-6.0或以上需动态申请(存储日志方便分析报错,日志路径 /sdcard/Android/data/Your
PackageName/files/Alicom/captcha_log.txt)-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

混淆规则

验证SDK已做混淆处理,集成时请带上混淆规则,勿再次混淆SDK。

-dontwarn com.geetest.gtcaptcha4.alicom.**
-keep class com.geetest.gtcaptcha4.alicom.**{*;}

若使用资源混淆工具,请添加白名单配置:

"R.string.gt4_*",
"R.style.gt4_*",

创建认证方案

您使用SDK时,会用到密钥参数信息,请先在图形认证方案管理控制台,新增图形认证方案,获取密钥参数(包括appIdappKey)信息。

配置接口

初始化

SDK初始化配置信息,可放在onCreateonCreateView方法进行初始化。

public static AlicomCaptchaClient getClient(Context context);
public AlicomCaptchaClient init(String captchaId);
public AlicomCaptchaClient init(String captchaId, AlicomCaptchaConfig config)

参数

类型

说明

context

context

上下文对象,必须为Activity实例。

appId

String

验证ID,请传入在控制台创建认证方案后生成的appId。 必填参数。

config

AlicomCaptchaConfig

参数配置对象,非必填参数。

说明

init()方法启动预加载,若在onCreateonCreateView方法进行初始化,则会提前加载验证流程,可更快唤起验证。若在需要唤起验证时机再 init() ,则加载速度比预加载慢,建议在onCreateonCreateView方法进行初始化。

启动验证

开始验证流程。

public void verifyWithCaptcha();

取消验证

取消验证流程,关闭验证窗口。

public void cancel();

开启/关闭日志监控

设置开启或关闭日志打印监控。

public void setLogEnable(boolean enable);

获取验证回调

public AlicomCaptchaClient addOnSuccessListener(OnSuccessListener listener);
public AlicomCaptchaClient addOnFailureListener(OnFailureListener listener);

代码示例

AlicomCaptchaClient.addOnSuccessListener(new
AlicomCaptchaClient.OnSuccessListener() {
   @Override
   public void onSuccess(boolean status, String response) {
       if(status){
         // TODO 开启二次验证
       }else {
         // TODO 用户答案验证错误
       }
   }
}).addOnFailureListener(new AlicomCaptchaClient.OnFailureListener() {
   @Override
   public void onFailure(String error) {
   }
})

销毁资源

onDestroy生命周期销毁资源。

public void onDestroy(){
    super.onDestroy();
    if(AlicomCaptchaClient != null){
       AlicomCaptchaClient.destroy();
     }
}

横竖屏切换

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    if(AlicomCaptchaClient != null){
       AlicomCaptchaClient.configurationChanged(newConfig);
    }
}

预加载代码示例

@Override
public void onViewCreated(View view, Bundle savedInstanceState){
   super.onViewCreated(view, savedInstanceState);
   AlicomCaptchaConfig config = new AlicomCaptchaConfig.Builder()
            .setDebug(true) // TODO 线上务必关闭
            .setLanguage("zh")
            .setTimeOut(10000)
            .setCanceledOnTouchOutside(true)
            .build();
   AlicomCaptchaClient = AlicomCaptchaClient.getClient(activity)
            .init("your captcha_id", config);
}

private void click(){
    AlicomCaptchaClient.addOnSuccessListener(new
AlicomCaptchaClient.OnSuccessListener {
             @Override
             public void onSuccess(boolean status, String response) {
                 if(status){
                     // TODO 开启二次验证
                 }else {
                    // TODO 用户答案验证错误
                 }
             }
   })
   .addOnFailureListener(new AlicomCaptchaClient.OnFailureListener {
       @Override
       public void onFailure(String error) {
       }
   })
   .verifyWithCaptcha();
}

正常加载代码示例

private void click(){
    AlicomCaptchaConfig config = new AlicomCaptchaConfig.Builder()
             .setDebug(true) // TODO 线上务必关闭
             .setLanguage("zh")
             .setTimeOut(10000)
             .setCanceledOnTouchOutside(true)
             .build();
   AlicomCaptchaClient = AlicomCaptchaClient.getClient(activity)
             .init("your captcha_id", config)
             .addOnSuccessListener(new AlicomCaptchaClient.OnSuccessListener {
                 @Override
                 public void onSuccess(boolean status, String response) {
                    if(status){
                        // TODO 开启二次验证
                    }else {
                        // TODO 用户答案验证错误
                    }
              }
   })
   .addOnFailureListener(new AlicomCaptchaClient.OnFailureListener {
                 @Override
                 public void onFailure(String error) {
                 }
   })
   .verifyWithCaptcha();
}

参数配置

通过AlicomCaptchaConfig.Builder类配置参数。

定义

说明

setParams

额外的参数,会被传递到前端js中使用

setDebug

是否debug模式,默认false

setLanguage

指定语言,默认跟随应用语言

setCanceledOnTouchOutside

点击区域外是否消失,默认true

setTimeOut

设置超时,单位:ms ,默认10000ms

setResourcePath

设置中间地址,默认加载本地html文件

setBackgroundColor

设置背景颜色,默认透明

setDialogStyle

设置对话框的主题样式,默认值gt4_captcha_dialog_style

setDialogShowListener

设置验证窗口显示的监听回调

build

构建AlicomCaptchaConfig对象

说明
  • 可通过setParams接口配置参数,该接口仅接收基本数据类型、字符串、JSONArray类型的数据。

  • 验证过程中可能发生一些预料之外的错误,您可以实现addOnFailureListener后,在下面的回调方法中进行处理,错误回调包括用户主动取消验证,可单独过滤掉。

  • 建议向用户展示验证错误原因时,同时展示错误码,方便后续排查线上问题。其他错误详情也可参见错误码

    AlicomCaptchaClient.addOnFailureListener(new
    AlicomCaptchaClient.OnFailureListener() {
       @Override
       public void onFailure(String error){
           // 返回error内容示例
           // {"code":"-14460","msg":"验证会话已取消","desc":{"description":"User
    cancelled 'Captcha'"}}
           // 可对error做json解析,自行替换错误描述,保留错误码
           Toast.makeText(context, "验证错误: $error", Toast.LENGTH_SHORT).show()
    }