本文介绍Android SDK API调用的详情。
安全组件实例化函数
import com.alibaba.wireless.security.jaq.SecurityInit
public static int Initialize(Context context) throws JAQException
初始化负责完成整个聚安全安全组件的全局初始化。初始化是线程安全的,初始化调用只需要进行一次,无需重复调用。
入参
context:任意Activity、Service等Coxtext类非空实例
返回
0:初始化成功
1:初始化失败
异常错误诊断
出现异常时,会抛出JAQException异常。可以根据JAQException实例的getErrorCode()方法获取错误码。
错误码
值
含义
SEC_ERROR_INIT_CONTEXT_ISNULL
101
参数不正确,请检查输入的参数。
SEC_ERROR_INIT_SO_CHECK_ERROR
102
libsecurityguard***.so文件和安全组件的.jar包不匹配。请检验是否存在libsecurityguard***.so文件被破坏或修改的情况。
SEC_ERROR_INIT_LOADSO_FAIL
103
libsecurityguard***.so文件装载问题,通常不会发生。如果发生此问题,可以先卸载APK,再重新安装。
SEC_ERROR_INIT_NO_RSA_FILE_ERROR
104
APK中没有正常的RSA签名文件。请检验签名过程。
SEC_ERROR_INIT_PUBLICKKEY_FIND_ERROR
105
RSA文件不正常,无法正常解析出公钥。
SEC_ERROR_INIT_SO_NOT_EXIST
106
在APK中找不到对应aebi的libsecurityguard***.so文件,请检查是否正常打包了安全组件SDK提供的.so文件。
说明 不同版本的.so文件不通用,请不要拿其他版本的替换。
SEC_ERROR_INIT_UNKNOWN_ERROR
199
未知错误,请重试。
获取数据风控wtoken
public String doJAQVerfificationSync (HashMap info,
int timeout) throw JAQException
在需要使用数据风控的场景,如注册、登录、活动页面,可以在用户单击注册、登录等业务按钮时、业务逻辑处理前获得该token,服务端通过该token查询风险结果。
入参
Info: HashMap扩展码数,以key-v形式存在于info,可以传空。
timeout:接口超时时间,单位秒。只能传入1~22的之间整型(包括1和22),传入其他值,将使用默认超时时间(22秒)。
返回
wtoken:调用方得到此wtoken后,需要将此token传递到自己的server端,再由自己的server端将此token透传到聚安全server端,获得最后的风控校验结果。
wtoken在后端风险识别使用请参见
错误诊断
接口不抛异常。当调用出错的时候,会在命令行中打印相应的错误日志,错误日志以SG ERROR开头。
错误码
值
含义
SEC_ERROR_SECURITYBODY_INVALID_THREAD
1401
参数不正确,请检查输入的参数。
SEC_ERROR_SECURITYBODY_INVALID_THREAD
1402
接口调用线程错误。请在非UI线程内调用此接口(因为本接口有耗时操作)。
SEC_ERROR_SECURITYBODY_NET_ERROR
1403
网络超时或网络断开。
SEC_ERROR_SECURITYBODY_SERVER_ERROR
1404
数据风控服务端器错误,请确认应用是否有权限访问此接口。
SEC_ERROR_SECURITYBODY_APPKEY_ERROR
1405
加密文件yw_1222_0335.jpg格式或其内数据有问题。常见原因为用错图片(iOS与Android图片不通用)或者图片内没有存放对应的Top Appkey。
SEC_ERROR_SECURITYBODY_SIGNATURE_ERROR
1406
加密文件yw_1222_0335.jpg格式或其内数据有问题。常见原因为用错图片(iOS与Android图片不通用)或者图片内没有存放对应的Top Appkey。
SEC_ERROR_SECURITYBODY_ENCRYPTION_ERROR
1407
数据加密错误。
SEC_ERROR_SECURITYBODY_TOP_ERROR
1408
TOP协议错误,请检查手机时间设置是否正常,加密图片yw_1222_0335.jpg使用是否正确。
SEC_ERROR_SECURITYBODY_CONCURRENT
1409
接口被并发调用错误,本接口不支持多线程同时调用。
SEC_ERROR_SECURITYBODY_UNSUPPORTED
1498
接口在这个版本的SDK中不支持。
SEC_ERROR_SECURITYBODY_UNKNOWN_ERR
1499
未知错误,请重试。
验证类型定义
/**
* 当前支持的验证类型:目前支持的类型有滑动验证,即将会有更多验证方式加入
*/
import com.alibaba.verificationsdk.ui.VerifyType;
public enum VerifyType {
NOCAPTCHA(3);
private int value;
private VerifyType(int value) {
this.value = value;
}
public int getValue() {
return value;
}
}
启动验证(依赖业务风险防控结果启动)
/**
* 唤起验证UI
*
* @param ctx 传入调用Activity的上下文
* @param parameters 传入参数
* @param verifyType 目前支持,语音,滑动验证,短信
* @param IActivityCallback 验证界面回调接口,
* 由应用自己实现
*/
public static void startVerifyUI(Context ctx, //
Map parameters,
VerifyType verifyType,
IActivityCallback callback)
parameters 参数设置:
key
value
VerifyActivity.APP_DATA
应用服务器返回给应用的app数据
VerifyActivity.APP_DATA和VerifyType为服务端调用业务风险防控服务API返回的结果。 具体请参见
启动验证(不依赖业务风险防控结果,直接启动验证)
import com.alibaba.verificationsdk.ui.VerifyActivity;
/**
* 唤起验证UI
*
* @param ctx 传入调用Activity的上下文
* @param verifyType 目前滑动验证
* @param IActivityCallback 验证界面回调接口,
* 由应用自己实现
*/
public static void startSimpleVerifyUI(Context ctx, //
VerifyType verifyType,
IActivityCallback callback)
启动验证两个接口:startVerifyUI和startSimpleVerifyUI区别
startSimpleVerifyUI是直接启动验证码接口,功能为纯粹的验证。目前支持的验证类型为滑动。
startVerifyUI会将之前步骤中调用的业务风险防控结果(jsonData和type)带入到验证中,在该结果中会建议使用的验证类型(即将支持语音、短信验证)。
验证界面取消回调
在用户取消验证情况下调用。
public interface IActivityCallback {
onNotifyBackPressed()
}
风险验证结果回调
验证过程中终止或者验证结束时触发。
import com.alibaba.verificationsdk.ui.VerifyActivity;
/**
* 风险验证结果回调
*
* @param retInt 验证返回状态码
* @param detail 返回详细信息,包含错误信息,二次验证用sessionid
*/
public interface IActivityCallback {
void onResult(int retInt, Map code);
}
retInt验证返回状态码
值
含义
VERIFY_SUCC
验证成功。
VERIFY_FAILED
验证失败。
detail返回值详情
值
含义
errorMsg
失败时查详细的错误或失败信息。
sessionID
验证成功或失败返回sessionID做二次验证,如果异常会返回null。
errorCode
失败类型。
关于detail中errorCode详细定义:
值
含义
ERROR_FROM_SERVER
表示服务端出错。
ERROR_FROM_CLIENT
表示网络等问题,返回数据出错。
ERROR_FROM_BUSSINESS
表示具体业务出错。
关闭验证UI的接口
VerifyActivity.finishVerifyUI();
业务风险防控与验证示例代码
Step 0: 初始化安全组件
private SecurityVerification securityVerification = null;
Context context = this.getApplicationContext();
try {
SecurityInit.Initialize(context);
securityVerification = new SecurityVerification(context);
} catch (JAQException e) {
e.printStackTrace();
}
Step 1: 获得风险采集信息:请不要在主线程调用
int timeout = 12;
String wtoken = null;
try {
wtoken = securityVerification.doJAQVerfificationSync(null, timeout);
if (null != wtoken) {
Log.e(LOG_TAG, String.format("spamRegisterImp Result: %s", wtoken));
onCollectionDone(token);
}
} catch (JAQException e) {
Log.d(LOG_TAG, String.format("spamRegisterImp Errorcode: %d", e.getErrorCode()));
}
如果wtoken返回为nil表示风险采集失败,如果风险采集失败建议认为验证失败,用户阻止其后操作。 返回的wtoken,需要到服务器端进行风险判断.具体调用参看
Step 2: 风险验证
Map params = new HashMap<>();
params.put(VerifyActivity.APP_DATA,app_data);
VerifyActivity.startVerifyUI(LoginActivity.this, params, VerifyActivity.VerifyType.SMS, new VerifyActivity.IActivityCallback() {
@Override
public void onNotifyBackPressed() {
}
@Override
public void onResult(int retInt, Map code) {
switch ( retInt ) {
case VerifyActivity.VERIFY_SUCC:
Log.e(LOG_TAG,code.get("sessionID"));
break;
case VerifyActivity.VERIFY_FAILED:
Log.e(LOG_TAG,code.get("errorCode"));
Log.e(LOG_TAG,code.get("errorMsg"));
break;
default:
break;
}
}
});
Step 3: sessionid 验证
不依赖业务风险防控,直接使用验证码示例代码
Step 0: 初始化安全组件
private SecurityVerification securityVerification = null;
Context context = this.getApplicationContext();
try {
SecurityInit.Initialize(context);
securityVerification = new SecurityVerification(context);
} catch (JAQException e) {
e.printStackTrace();
}
Step 1: 风险验证
VerifyActivity. startSimpleVerifyUI(LoginActivity.this,
VerifyActivity.VerifyType. NOCAPTCHA, new VerifyActivity.IActivityCallback() {
@Override
public void onNotifyBackPressed() {
}
@Override
public void onResult(int retInt, Map code) {
switch ( retInt ) {
case VerifyActivity.VERIFY_SUCC:
Log.e(LOG_TAG,code.get("sessionID"));
break;
case VerifyActivity.VERIFY_FAILED:
Log.e(LOG_TAG,code.get("errorCode"));
Log.e(LOG_TAG,code.get("errorMsg"));
break;
default:
break;
}
}
});
Step 2: sessionid验证