本文为您介绍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时,会用到密钥参数信息,请先在图形认证方案管理控制台,新增图形认证方案,获取密钥参数(包括appId
、appKey
)信息。
配置接口
初始化
SDK初始化配置信息,可放在onCreate
或onCreateView
方法进行初始化。
public static AlicomCaptchaClient getClient(Context context);
public AlicomCaptchaClient init(String captchaId);
public AlicomCaptchaClient init(String captchaId, AlicomCaptchaConfig config)
参数 | 类型 | 说明 |
context | context | 上下文对象,必须为Activity实例。 |
appId | String | 验证ID,请传入在控制台创建认证方案后生成的 |
config | AlicomCaptchaConfig | 参数配置对象,非必填参数。 |
init()
方法启动预加载,若在onCreate
或onCreateView
方法进行初始化,则会提前加载验证流程,可更快唤起验证。若在需要唤起验证时机再 init() ,则加载速度比预加载慢,建议在onCreate
或onCreateView
方法进行初始化。
启动验证
开始验证流程。
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 | 构建 |
可通过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() }