全部产品
阿里云办公

Android SDK API

更新时间:2017-06-07 13:26:11

安全组件实例化函数

import com.alibaba.wireless.security.jaq.SecurityInit

  1. 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文件。(不同版本的不通用,请不要拿其他版本的替换)
SEC_ERROR_INIT_UNKNOWN_ERROR 199 未知错误,请重试

获取数据风控wtoken

  1. public String doJAQVerfificationSync (HashMap<String, String> info,
  2. int timeout) throw JAQException

在需要使用数据风控的场景,如注册、登陆、活动页面,可以在用户点击“注册”、“登陆”等业务按钮时、业务逻辑处理前获得该token,服务端通过该token查询风险结果。
入参

  • Info: HashMap 扩展码数,以key-v形式存在于info,可以传空;

  • timeout:接口超时时间,单位秒。只能传入1 <= timeout <= 22的整型,传入其他值,将使用默认超时时间(22秒);

返回

  • wtoken:调用方得到此wtoken后,需要将此token传递到自己的server端,再由自己的server端将此token透传到聚安全server端,获得最后的风控校验结果。
  • wtoken在后端风险识别使用 参考 API概览-业务风险防控API

错误诊断

接口不抛异常。当调用出错的时候,会在命令行中打印相应的错误日志,错误日志以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 未知错误,请重试

验证类型定义

  1. /**
  2. * 当前支持的验证类型:目前支持的类型有滑动验证,即将会有更多验证方式加入
  3. */
  4. import com.alibaba.verificationsdk.ui.VerifyType;
  5. public enum VerifyType {
  6. NOCAPTCHA(3);
  7. private int value;
  8. private VerifyType(int value) {
  9. this.value = value;
  10. }
  11. public int getValue() {
  12. return value;
  13. }
  14. }

启动验证(依赖业务风险防控结果启动)

  1. /**
  2. * 唤起验证UI
  3. *
  4. * @param ctx 传入调用Activity的上下文
  5. * @param parameters 传入参数
  6. * @param verifyType 目前支持,语音,滑动验证,短信
  7. * @param IActivityCallback 验证界面回调接口,
  8. * 由应用自己实现
  9. */
  10. public static void startVerifyUI(Context ctx, //
  11. Map<String,String> parameters,
  12. VerifyType verifyType,
  13. IActivityCallback callback)

parameters 参数设置:

key value
VerifyActivity.APP_DATA 应用服务器返回给应用的app数据

VerifyActivity.APP_DATA和VerifyType为服务端调用业务风险防控服务API返回的结果。 具体参考 API概览-业务风险防控API

启动验证(不依赖业务风险防控结果,直接启动验证)

  1. import com.alibaba.verificationsdk.ui.VerifyActivity;
  2. /**
  3. * 唤起验证UI
  4. *
  5. * @param ctx 传入调用Activity的上下文
  6. * @param verifyType 目前滑动验证
  7. * @param IActivityCallback 验证界面回调接口,
  8. * 由应用自己实现
  9. */
  10. public static void startSimpleVerifyUI(Context ctx, //
  11. VerifyType verifyType,
  12. IActivityCallback callback)

启动验证两个接口:startVerifyUI和startSimpleVerifyUI区别

startSimpleVerifyUI是直接启动验证码接口,功能为纯粹的验证。目前支持的验证类型为滑动。

startVerifyUI会将之前步骤中调用的业务风险防控结果(jsonData和type)带入到验证中,在该结果中会建议使用的验证类型(即将支持语音、短信验证)

验证界面取消回调

在用户取消验证情况下调用

  1. public interface IActivityCallback {
  2. onNotifyBackPressed()

风险验证结果回调

验证过程中终止或者验证结束时触发

  1. import com.alibaba.verificationsdk.ui.VerifyActivity;
  2. /**
  3. * 风险验证结果回调
  4. *
  5. * @param retInt 验证返回状态码
  6. * @param detail 返回详细信息,包含错误信息,二次验证用sessionid
  7. */
  8. public interface IActivityCallback {
  9. void onResult(int retInt, Map<String, String> code);
  10. }

retInt验证返回状态码:

含义
VERIFY_SUCC 验证成功
VERIFY_FAILED 验证失败

detail返回值详情:

含义
errorMsg 失败时查详细的错误/失败信息
sessionID 验证成功/失败返回sessionID做二次验证,如果异常会返回null
errorCode 失败类型

关于detail中errorCode详细定义:

含义
ERROR_FROM_SERVER 表示服务端出错
ERROR_FROM_CLIENT 表示网络等问题,返回数据出错
ERROR_FROM_BUSSINESS 表示具体业务出错

关闭验证UI的接口

  1. VerifyActivity.finishVerifyUI();

业务风险防控与验证示例代码

Step 0: 初始化安全组件

  1. private SecurityVerification securityVerification = null;
  2. Context context = this.getApplicationContext();
  3. try {
  4. SecurityInit.Initialize(context);
  5. securityVerification = new SecurityVerification(context);
  6. } catch (JAQException e) {
  7. e.printStackTrace();
  8. }

Step 1: 获得风险采集信息:请不要在主线程调用

  1. int timeout = 12;
  2. String wtoken = null;
  3. try {
  4. wtoken = securityVerification.doJAQVerfificationSync(null, timeout);
  5. if (null != wtoken) {
  6. Log.e(LOG_TAG, String.format("spamRegisterImp Result: %s", wtoken));
  7. onCollectionDone(token);
  8. }
  9. } catch (JAQException e) {
  10. Log.d(LOG_TAG, String.format("spamRegisterImp Errorcode: %d", e.getErrorCode()));
  11. }

如果wtoken返回为nil表示风险采集失败,如果风险采集失败建议认为验证失败,用户阻止其后操作。
返回的wtoken,需要到服务器端进行风险判断.具体调用参看 API概览-业务风险防控API

Step 2: 风险验证

  1. Map<String,String> params = new HashMap<>();
  2. params.put(VerifyActivity.APP_DATA,app_data);
  3. VerifyActivity.startVerifyUI(LoginActivity.this, params, VerifyActivity.VerifyType.SMS, new VerifyActivity.IActivityCallback() {
  4. @Override
  5. public void onNotifyBackPressed() {
  6. }
  7. @Override
  8. public void onResult(int retInt, Map<String, String> code) {
  9. switch ( retInt ) {
  10. case VerifyActivity.VERIFY_SUCC:
  11. Log.e(LOG_TAG,code.get("sessionID"));
  12. break;
  13. case VerifyActivity.VERIFY_FAILED:
  14. Log.e(LOG_TAG,code.get("errorCode"));
  15. Log.e(LOG_TAG,code.get("errorMsg"));
  16. break;
  17. default:
  18. break;
  19. }
  20. }
  21. });

Step 3: sessionid 验证
具体调用参看 API概览-验证码服务API

不依赖业务风险防控,直接使用验证码示例代码

Step 0: 初始化安全组件

  1. private SecurityVerification securityVerification = null;
  2. Context context = this.getApplicationContext();
  3. try {
  4. SecurityInit.Initialize(context);
  5. securityVerification = new SecurityVerification(context);
  6. } catch (JAQException e) {
  7. e.printStackTrace();
  8. }

Step 1: 风险验证

  1. VerifyActivity. startSimpleVerifyUI(LoginActivity.this,
  2. VerifyActivity.VerifyType. NOCAPTCHA, new VerifyActivity.IActivityCallback() {
  3. @Override
  4. public void onNotifyBackPressed() {
  5. }
  6. @Override
  7. public void onResult(int retInt, Map<String, String> code) {
  8. switch ( retInt ) {
  9. case VerifyActivity.VERIFY_SUCC:
  10. Log.e(LOG_TAG,code.get("sessionID"));
  11. break;
  12. case VerifyActivity.VERIFY_FAILED:
  13. Log.e(LOG_TAG,code.get("errorCode"));
  14. Log.e(LOG_TAG,code.get("errorMsg"));
  15. break;
  16. default:
  17. break;
  18. }
  19. }
  20. });

Step 3: sessionid 验证
具体调用参看 API概览-验证码服务API