本文档介绍了设备风险SDK(Android系统)的接入流程。
前提条件
设备风险SDK需在Android 4.0.3+(minSdkVersion版本15+)以上版本的系统运行。
权限说明
为增强风险识别效果,当前SDK需要以下权限:
权限内容 | 是否必选 | 备注 |
---|---|---|
android.permission.INTERNET | 是 | 没有该权限将导致SDK功能不可用。 |
android.permission.ACCESS_NETWORK_STATE | 否(推荐赋予) | 用于获取设备网络状态信息。 |
android.permission.READ_PHONE_STATE | 否(推荐赋予) | 该部分权限在Android 6.0以上系统中需要动态获取。 如果您要启用相关权限,那么在接入设备风险SDK并调用init初始化接口之前,确保您的App已经被授予了相关权限。 |
android.permission.WRITE_EXTERNAL_STORAGE | 否(推荐赋予) | |
android.permission.READ_EXTERNAL_STORAGE | 否(推荐赋予) |
下载和配置SDK
下载Android SDK,并完成解压。SDK为Android标准的.aar包。
拷贝SDK的aar文件到工程的libs目录下,并在APP的build.gradle中添加以下依赖关系:
implementation files('libs/Android-AliyunDevice-版本号.aar')
implementation 'com.squareup.okhttp3:okhttp:3.11.0'
implementation 'com.squareup.okio:okio:1.14.0
初始化SDK
完成SDK内部初始化,在App启动的时候,您需要尽可能早的调用该函数 。
函数原型
public interface SecurityInitListener {
// code表示接口调用状态码
void onInitFinish(int code);
}
public void init(Context ctx,
String userAppKey,
SecurityInitListener securityInitListener);
参数
ctx:当前Application Context,或Activity Context。
userAppKey:AppKey,用于标识一个用户,可在阿里云控制台的设备APP管理申请获取。
securityInitListener:设备风险SDK初始化回调接口,可在回调中判断初始化是否成功。其中,code字段取值范围可参考“状态返回值”。
返回值
无。
获取Session
获取客户端Session,并上报到业务服务器,后续通过服务器端查询阿里云设备风险识别接口,从而获取设备风险信息。
注意:getSession接口相对比较耗时,请务必在非主线程上调用,否则可能会引起ANR而导致APP crash。
函数原型
public class SecuritySession {
// 接口调用状态码
public int code;
// 用于服务器端查询结果的session字符串。
public String session;
}
public SecuritySession getSession();
返回值
SecuritySession类型。
code:返回接口调用状态码,可用于判断接口调用是否成功。code字段取值范围可参考“状态返回值”。
session:返回Session字符串信息,可用于业务后续查询阿里云设备风险识别接口
状态返回值
public class SecurityCode {
private static final int SC_CODE_BASE = 10000;
/**
* 成功,无错误发生
*/
public static final int SC_SUCCESS = SC_CODE_BASE;
/**
* SDK未调用初始化
*/
public static final int SC_NOT_INIT = SC_CODE_BASE + 1;
/**
* SDK需要的Android基础权限未完全授权
*/
public static final int SC_NOT_PERMISSION = SC_CODE_BASE + 2;
/**
* 未知错误
*/
public static final int SC_UNKNOWN_ERROR = SC_CODE_BASE + 3;
/**
* 网络错误
*/
public static final int SC_NETWORK_ERROR = SC_CODE_BASE + 4;
/**
* 网络错误,返回内容为空串
*/
public static final int SC_NETWORK_ERROR_EMPTY = SC_CODE_BASE + 5;
/**
* 网络返回的格式非法
*/
public static final int SC_NETWORK_ERROR_INVALID = SC_CODE_BASE + 6;
/**
* 服务端配置解析失败
*/
public static final int SC_PARSE_SRV_CFG_ERROR = SC_CODE_BASE + 7;
/**
* 网关返回失败
*/
public static final int SC_NETWORK_RET_CODE_ERROR = SC_CODE_BASE + 8;
/**
* 用户传进来的appkey是空的
*/
public static final int SC_APPKEY_EMPTY = SC_CODE_BASE + 9;
/**
* 参数错误
*/
public static final int SC_PARAMS_ERROR = SC_CODE_BASE + 10;
}
示例代码
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 初始化设备风险SDK,init接口需要在APP启动尽可能早的时候调用。
SecurityDevice.getInstance().init(this, "xxxxxxx", new SecurityInitListener() {
@Override
public void onInitFinish(int code) {
if (SecurityCode.SC_SUCCESS != code) {
Log.e("AliyunDevice", "初始化失败,继续调用getSession获取的结果是无效的.");
} else {
Log.i("AliyunDevice", "初始化成功.");
}
}
});
// 获取客户端Session,getSession接口比较耗时,切勿在UI线程中调用。
new Thread(){
@Override
public void run() {
SecuritySession securitySession = SecurityDevice.getInstance().getSession();
if(null != securitySession){
if(SecurityCode.SC_SUCCESS == securitySession.code){
Log.d("AliyunDevice", "session: " + securitySession.session);
// 发送session到业务自有服务器并查询阿里云设备风险识别接口。
// sendToAPPServer(securitySession.session);
} else {
Log.e("AliyunDevice", "getSession error, code: " + securitySession.code);
}
} else {
Log.e("AliyunDevice", "getSession is null.");
}
}
}.start();
}
}
接口混淆配置
-keep class net.security.device.api.** {*;}
-dontwarn net.security.device.api.**
调用风险识别API接口
将deviceToken与其他参数,根据如下相应的风险识别服务事件参数文档说明,请求风险识别API接口进行识别:
接入和使用时序图如下,其中第1和2步骤仅首次加载需要调用,第3、4、5、6、7、8、9步骤可以根据业务情况循环发起。

在文档使用中是否遇到以下问题
更多建议
匿名提交