本文档介绍了阿里云设备指纹Android SDK接入流程。

前提条件

  • Android系统版本要求:

    Android系统版本为4.0.3及以上,minSdk版本为15。

  • APP端集成阿里云设备风险SDK所需要的Android系统权限要求:
    • 必须拥有Android系统的android.permission.INTERNET权限,否则会导致SDK功能不可用。
    • 强烈建议获取android.permission.READ_PHONE_STATE权限,否则可能会降低风险识别的效果。
    • 强烈建议获取android.permission.ACCESS_NETWORK_STATE权限,否则可能会降低风险识别的效果。
  • 已完成以下依赖配置:
    下载Android SDK(SDK为Android标准aar包)并在AndroidStudio 中引用已下载的Android SDK包。例如下载完aar包之后,放入您App工程的libs目录下,并在App的build.gradle中添加以下依赖关系:
    #在此添加阿里云设备指纹SDK依赖包
    implementation files('libs/aliyundevice-sdk-xxx.aar')
    implementation 'com.squareup.okhttp3:okhttp:3.11.0'
    implementation 'com.squareup.okio:okio:1.14.0

接口定义

public class SecurityDevice {
    /**
     * 初始化SDK
     * @param ctx - Application Context, 或者Activity都可以
     * @param userAppKey - 设备指纹userAppKey, 从官方申请获得
     * @param securityInitListener - 初始化结果回调
     * @return 初始化结果
     */
    public void init(Context ctx, String userAppKey, SecurityInitListener securityInitListener);

    /**
     * 从SDK获取Session
     * @return
     */
    public SecuritySession getSession();

    /**
     * 用户自定义数据上报
     * @param type - 用户自定义类型,上报类型需要向官方申请
     * @param msg - 自定义上报内容
     */
    public void reportUserData(int type, String msg);
}
public class SecurityCode {
    /**
     * 设备指纹的错误码范围 10000 ~ 20000
     */
    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;
}
/**
 * SDK返回给用户的Session
 */
public class SecuritySession {
    /**
     * 结果Code, 含义参照SecurityCode
     */
    public int code;

    /**
     * SDK返回的deviceToken
     */
    public String session;
}
/**
 * 设备指纹初始化回调
 */
public interface SecurityInitListener {
    /**
     * 回调结果 code = 错误码,参考SecurityCode
     * @param code
     */
    void onInitFinish(int code);
}
            

接入流程

  1. 初始化调用。
    为了保证设备风险识别的效果,建议在设备指纹需要的基础权限获得之后,再开始调用初始化。以下是调用代码示例:
    //初始化设备指纹
    SecurityDevice.getInstance().init(this, "xxxxxxx", new SecurityInitListener() {
                @Override
                public void onInitFinish(int code) {
                    if (SecurityCode.SC_SUCCESS != code) {
                        Log.e("SecurityDevice", "初始化失败,继续调用getSession获取的结果是无效的");
                        }
                        else {
                            Log.i("SecurityDevice", "初始化成功");
                        }
                    }
                });
  2. 获取Session。
    从设备指纹SDK获取Session,通过此Session可以从阿里云服务端查询当前设 备的风险识别结果。以下是调用代码示例:
    //获取设备指纹Session, 请注意此接口应该在收到初始化接口回调成功之后调用,一般init接口会在3秒内完成
    SecuritySession securitySession = SecurityDevice.getInstance().getSession();
    if (SecurityCode.SC_SUCCESS != securitySession.code) {
        Log.e("SecurityDevice", "getSession获取的结果是无效的");
        }
    else {
            Log.i("SecurityDevice", "getSession获取的结果有效,可以使用securitySession.session进行风险识别结果查询");
         }
说明 为了避免不必要的接口混淆带来的问题,打release包时请参考以下代码保留类名:
-verbose
-keep class net.security.device.api.** {*;}

调用风险识别API接口

将deviceToken与其他参数,根据如下相应的风险识别服务事件参数文档说明,请求风险识别API接口进行识别:注册风险识别-增强版事件参数营销风险识别-增强版事件参数登录风险识别-增强版事件参数设备风险识别事件参数接入和使用时序图如下,其中第1和2步骤仅首次加载需要调用,第3、4、5、6、7、8、9步骤可以根据业务情况循环发起。

调用风险识别API流程