全部產品
Search
文件中心

Fraud Detection:裝置風險SDK Android接入

更新時間:Mar 20, 2025

本文檔介紹了裝置風險SDK(Android系統)的接入流程。

前提條件

  • 裝置風險SDK需在Android 4.0.3+(minSdkVersion版本15+)以上版本的系統運行。

  • 為協助落實針對您產品整合第三方SDK情況所應履行的隱私合規義務,降低隱私違規風險,進而實現您產品合規營運的營運目標,請您務必確保選用阿里雲文檔中心官網發布的最新版本產品。在使用裝置風險識別前,請您務必仔細瞭解個人資訊處理規定及《風險識別SDK隱私權政策》進行接入。

許可權說明

為增強風險識別效果,當前SDK需要以下許可權:

許可權內容

是否必選

備忘

android.permission.INTERNET

用於擷取網路存取權限。

沒有該許可權將導致SDK功能不可用。

android.permission.ACCESS_NETWORK_STATE

否(推薦賦予)

用於擷取裝置網路狀態資訊。

android.permission.READ_PHONE_STATE

否(推薦賦予)

該部分許可權在Android 6.0以上系統中需要動態擷取。

如果您要啟用相關許可權,那麼在接入裝置風險SDK並調用資訊採集介面之前,確保您的App已經被授予了相關許可權。

android.permission.WRITE_EXTERNAL_STORAGE

否(推薦賦予)

android.permission.READ_EXTERNAL_STORAGE

否(推薦賦予)

下載和配置SDK

  1. 下載Android SDK,並完成解壓。SDK為Android標準的.aar包。

  2. 拷貝SDK的aar檔案到工程的libs目錄下,並在App的build.gradle中添加以下依賴關係:

    // 裝置風險識別SDK
    implementation files('libs/Android-AliyunDevice-版本號碼.aar')
    
    // 三方網路程式庫依賴
    implementation 'com.squareup.okhttp3:okhttp:3.11.0'
    implementation 'com.squareup.okio:okio:1.14.0'
    重要

    三方網路程式庫不能省略,否則會造成裝置風險識別SDK無法連網

資訊採集

完成資訊採集,在進行風險識別的時候,您需要在滿足合規要求的情況下儘可能早地調用該函數。

  • 函數原型

    public interface SecurityInitListener {
        // code表示介面調用狀態代碼
        void onInitFinish(int code);
    }
    public void initWithOptions(Context ctx, 
                     	String appKey, 
                    	Map<String, String> options,
                     	SecurityInitListener securityInitListener);
  • 參數

    ctx:當前Application Context,或Activity Context。

    appKey:用於標識使用者身份,可在阿里雲控制台的裝置App管理申請擷取。

    options:資訊採集可選項,預設可以為null。選擇性參數如下。

    欄位名

    說明

    樣本

    IPv6

    是否使用IPv6網域名稱上報裝置資訊。

    預設為“0”:使用IPv4網域名稱;

    “1”:使用IPv6網域名稱。

    "1"

    CustomUrl

    設定自有資料上報伺服器網域名稱

    "https://cloudauth-device.aliyuncs.com"

    CustomHost

    設定自有資料上報伺服器host

    "cloudauth-device.aliyuncs.com"

    DataType

    設定不採集敏感性資料的類型。

    預設為空白:採集所有資料;

    具體可配置資料如下表

    單選:

    ''NO_UNIQUE_DEVICE_DATA''

    多選:

    ''NO_UNIQUE_DEVICE_DATA|

    NO_IDENTIFY_DEVICE_DATA''

    敏感性資料的類型

    說明

    裝置資訊欄位詳情

    NO_UNIQUE_DEVICE_DATA

    可變更唯一裝置標識碼

    包括:OAID、Google廣告ID、Android ID。

    NO_IDENTIFY_DEVICE_DATA

    不可變更唯一裝置標識碼

    包括:IMEI、IMSI、SimSerial、BuildSerial(SN)、MAC地址。

    NO_BASIC_DEVICE_

    DATA

    基礎標識資訊

    包括:裝置名稱(Build.DEVICE)、Android版本號碼(Build.VERSION#RELEASE)、螢幕解析度。

    NO_EXTRA_DEVICE_

    DATA

    擴充敏感資訊

    包括:黑灰產App列表、區域網路IP、DNS IP、串連的WIFI資訊(SSID、BSSID)、附近WIFI列表、定位資訊。

    securityInitListener:裝置風險SDK資訊採集回調介面,可在回調中判斷資訊採集是否成功。其中,code欄位取值範圍可參考“狀態傳回值”。

  • 傳回值

    無。

擷取用戶端token

擷取用戶端token,並上報到商務服務器,後續通過伺服器端裝置風險識別事件及返回參數,從而擷取裝置風險資訊。

  • 函數原型

public class Securitytoken {
    // 介面調用狀態代碼
    public int code;
    
    // 用於伺服器端查詢結果的token字串。
    public String token;
}

public Securitytoken getDevicetoken();
  • 傳回值

    Securitytoken類型。

    code:返回介面調用狀態代碼,用於判斷介面調用是否成功。code欄位取值範圍可參考“狀態傳回值”。

    token:返回用戶端token字串資訊,商務就緒後續查詢阿里雲裝置風險識別介面。

    重要
    1. getDevicetoken介面的調用可能會較為耗時,請確保在App的非主線程中調用此介面,以避免因長時間阻塞主線程而導致App出現無響應(ANR)的情況,進而防止App崩潰。

    2. 因資料上報可能存在延遲,請確保SDK的資訊採集介面和getDevicetoken介面調用時間間隔2秒以上。

    3. token字串在網路環境良好的情境下,長度為600位元組左右;在網路環境較差的情境下,返回的長度在2.5K左右。

狀態傳回值

SecurityCode

Code

備忘

SC_SUCCESS

10000

SDK資訊採集成功。

SC_NOT_INIT

10001

SDK未資訊採集。

SC_NOT_PERMISSION

10002

SDK需要的Android基礎許可權未完全授權。

SC_UNKNOWN_ERROR

10003

系統未知錯誤。

SC_NETWORK_ERROR

10004

網路錯誤。

SC_NETWORK_ERROR_EMPTY

10005

網路錯誤,返回內容為空白串。

SC_NETWORK_ERROR_INVALID

10006

網路返回的格式非法。

SC_PARSE_SRV_CFG_ERROR

10007

服務端配置解析失敗。

SC_NETWORK_RET_CODE_ERROR

10008

網關返回失敗。

SC_APPKEY_EMPTY

10009

AppKey為空白。

SC_PARAMS_ERROR

10010

其他參數錯誤。

SC_FGKEY_ERROR

10011

密鑰計算錯誤。

SC_APPKEY_ERROR

10012

SDK版本和AppKey版本不匹配。

範例程式碼

裝置風險SDK資訊採集,資訊採集介面需要在滿足合規要求的情況下,儘可能早的時候調用。

其中,參數ALIYUN_APPKEY用於標識使用者身份,可在阿里雲控制台的裝置App管理申請擷取。

您可以通過參數options中DataType欄位,用於控制不採集的具體資料,滿足具體業務情境的隱私要求。

public class CustomApplication extends Application {
    private static String ALIYUN_APPKEY = "xxxx";

    @Override
    public void onCreate() {
        super.onCreate();

        //增加隱私資料擷取開關,不採集NO_IDENTIFY_DEVICE_DATA類型資料,多選使用|進行拼接。且"(NO_IDENTIFY_DEVICE_DATA))"處輸入資料不可為空白。
        Map<String, String> options = new HashMap<>();      
        options.put("DataType", String.valueOf(NO_IDENTIFY_DEVICE_DATA));
        
        // 通過裝置風險SDK採集資訊,資訊採集介面需要在風險情境中儘可能早地時候調用。
        SecurityDevice.getInstance().initWithOptions(this, ALIYUN_APPKEY, options, null);
    }
}

在業務需要風險識別的情境下(如註冊、活動推廣等)擷取用戶端token並上報到業務的伺服器端。確保資訊採集和getDeviceToken介面的調用間隔在2秒以上。

另外,getDevicetoken介面比較耗時,切勿在UI線程中調用。

new Thread() {
    @Override
    public void run() {
        Securitytoken st = SecurityDevice.getInstance().getDevicetoken();
        if(null != st){
            if(SecurityCode.SC_SUCCESS == st.code){
                Log.d("AliyunDevice", "token: " + st.token);

                // 發送token到業務自有伺服器並查詢阿里雲裝置風險識別介面。
                // sendToAPPServer(st.token);
            } else {
                Log.e("AliyunDevice", "getDevicetoken error, code: " + st.code);
            }
        } else {
            Log.e("AliyunDevice", "getDevicetoken is null.");
        }
    }
}.start();

介面混淆配置

-keep class net.security.device.api.** {*;}
-dontwarn net.security.device.api.**

調用風險識別API介面

devicetoken與其他參數,根據如下相應的風險識別服務事件參數文檔說明,請求風險識別API進行識別:

裝置風險識別事件及返回參數

常見問題答疑

  1. 裝置風險識別SDK支付哪些架構?

    目前支援arm、armv7和arm64三個架構。

  2. SDK的大小是多少?

    單架構的SO檔案在1.8M左右。

    裝置風險識別SDK為了保證自身的抗逆向性以及資料在網路傳輸過程中的安全性,SDK中有大量的插花、膨脹及加解密操作,所以SDK體積會相對較大。

  3. deviceToken有效期間為多少,能否多次調用服務端API使用同一個deviceToken?

    deviceToken有效期間是7天,可以多次調用。