search
开发文档
开发文档/应用开发/服务能力/安全开放服务/设备涉诈检测开发指南
设备涉诈检测开发指南更新时间:2026-04-15 20:32:01

一、基础版SDK方式

1.1 集成SDK

1.1.1 添加AAR

添加小米安全开放服务SDK到项目Module(app)的libs路径中

SDK文件

名称:sdk-xsof-20251027-v3.0.0-basic-release.aar

地址:https://kpan.mioffice.cn/webfolder/ext/DoRhkFel%231v%24uVm31GQvyw%40%40

密码:SC8D

1.1.2 配置Gradle

在Module所属的Gradle文件(app/build.gradle)中增加编译依赖

// 只添加libs/sdk-xsof-20251027-v3.0.0-basic-release.aar一个aar
implementation files('libs/sdk-xsof-20251027-v3.0.0-basic-release.aar')

// 添加libs文件夹下的所有aar
implementation fileTree(dir: "libs", includes: "*.aar")

注意:上述步骤中的文件路径和Gradle配置仅供参考,
可根据项目实际情况灵活调整,只要保证aar参与到项目编译即可。

1.1.3 配置appId、appKey

在项目中添加应用的appId、appKey等信息
应用在小米开放平台注册后,会分配对应的appId和appKey。
appId和appKey在SDK初始化时会用到,需要调用方提供。
appId和appKey可以在代码中写常量,也可以在工程中增加配置文件,然后在SDK初始化时读取。

注意:正式接入时,会提供配置后台给三方开发者来开启服务&上传SHA256证书指纹。

SHA256证书指纹查询方法:
1. 通过终端keytool命令查询

keytool -list -v -keystore <keystore-file-path>

2. 通过Android Studio Gradle的signingReport task查询

1.2 API使用说明

完成步骤1后,即可使用小米安全开放框架SDK提供的API。

1.2.1 API简要说明

public class MiSafetyDetectClient {

/**
* 初始化SDK
* @param appId 应用的AppId
* @param appKey 应用的AppKey
*/
public void init(String appId, String appKey);

/**
* 获取设备可信检测信息
* @param challenge 随机数
* @param onCompleteListener 接收检测结果的回调
*/
public void getTrustDeviceStatus(String challenge,
OnCompleteListener<TrustDeviceStatusResponse> onCompleteListener);

/**
* 获取恶意应用检测信息
* @param onCompleteListener 接收检测结果的回调
*/
public void getRiskApps(
OnCompleteListener<RiskAppResponse> onCompleteListener);

/**
* 获取模拟点击检测信息
* @param timeInterval 需要检测的时间范围
* @param onCompleteListener 接收检测结果的回调
*/
public void getSimulatedTouchDetectResult(long timeInterval,
OnCompleteListener<SimulatedTouchResponse> onCompleteListener);

/**
* 获取欺诈风险评分
* @param challenge 随机数
* @param callback 接收检测结果的回调
*/
public void getFraudRiskScore(String challenge, OnCompleteListener<FraudScoreResponse> onCompleteListener);

}

1.2.2 使用示例

1. SDK初始化

import com.xiaomi.security.xsof.MiSafetyDetect;
import com.xiaomi.security.xsof.safetydetect.MiSafetyDetectClient;

ClassName {
private static final String APP_ID = "***"; // replace with your appId
private static final String APP_KEY = "***"; // replace with your appKey

// 通过MiSafetyDetect#getMiSafetyDetectClient获取MiSafetyDetectClient实例
MiSafetyDetectClient miSafetyDetectClient =
MiSafetyDetect.getMiSafetyDetectClient(getContext());
// 如果是null,说明当前系统版本不支持安全开发框架相关服务
if (miSafetyDetectClient != null) {
miSafetyDetectClient.init(APP_ID, APP_KEY);
}
}

初始化后即可使用小米安全开放框架提供的各项服务。

目前小米安全开放框架已支持三项检测:

  1. 设备可信检测
  2. 恶意应用检测
  3. 模拟点击检测

详细信息请参考开发者文档

2. 判断当前设备是否支持涉诈行为检测

/**
* 判断是否支持欺诈检测
* @return boolean
*/
private fun isSupportFraudDetection(): Boolean {
return miSafetyDetectClient != null && getSafetyDetectServerVersion(this) >= 3
}

/**
* 获取安全开放服务版本。安全开放服务在3及以上版本才支持欺诈检测
* @param context Context
* @return int
*/
private fun getSafetyDetectServerVersion(context: Context): Int {
try {
val packageManager = context.packageManager
val packageInfo = packageManager
.getPackageInfo(
"com.miui.securitycenter",
PackageManager.GET_META_DATA
)
val metaData = packageInfo.applicationInfo?.metaData
if (metaData?.containsKey("com.xiaomi.security.xsof.service.version") == true) {
return metaData.getInt("com.xiaomi.security.xsof.service.version")
}
} catch (e: Exception) {
// empty
}
return 0
}

3. 获取诈骗风险评分

/**
* 获取诈骗风险评分
*/
private fun getFraudScoreDetectionResult() {
if (!isSupportFraudDetection()) {
return
}
val challenge: String = SdkUtils.Companion.getChallengeFromServer(packageName)
miSafetyDetectClient?.getFraudRiskScore(challenge, OnCompleteListener { response: MiSafetyDetectApi.FraudScoreResponse? ->
if (response?.isSuccess == true) {
Log.i(TAG, "fraud score detection result : " + response.detectionResult)
val resp = response.detectionResult
try {
val jsonObject = JSONObject(resp)
val data: String? = jsonObject.get("data").toString()
val authenticity = jsonObject.get("authenticity") as JSONObject
val checkResult = "check hash: " + HashUtils.checkHashSHA256(data, authenticity)
Log.i(TAG, checkResult)
} catch (e: JSONException) {
Log.e(TAG, "onComplete: ", e)
}
} else {
val statusCode = response?.statusCode
Log.e(TAG, "Get fraud score detection result error, code = $statusCode")
}
})

二、进阶版SDK方式

服务是免费的,但此服务只提供给愿意与小米深度合作的伙伴。
请使用企业邮箱联系developer@xiaomi.com,与我们建立联系后,获取进阶版SDK与AIDL接入方式。

集成方式同基础版SDK,区别是额外提供了3个涉诈元数据检测api。

  • 获取当前欺诈风险结果
  • 获取前序欺诈风险结果
  • 获取涉诈行为持续时长

三、开放服务错误码

错误代码说明处理说明支持版本
SDK_INTERNAL_ERROR1000SDK内部错误,建议重试。1
SERVICE_INTERNAL_ERROR1001安全服务内部错误,建议重试。1
ERROR_MAIN_THREAD_CALL1002在主线程调用方法不要在主线程调用方法1
ERROR_CALL_REPEATEDLY1003同一应用在调用某一接口未返回时,再次调用该接口1
ERROR_REQUEST_TIMEOUT1004调用请求超时,建议稍后重试。1
NETWORK_ERROR1005未找到可用网络。提醒用户检查网络连接。1
SDK_INVALID_ARGUMENT1006参数格式错误。检查是否调用了初始化方法;
检查是否传了challenge;
调用方包名和注册的包名是否一致
1
ERROR_TOO_MANY_REQUESTS1007发起调用的应用向该 API 发出的请求太多,被限制调用。
1s同一API调用次数不能超过1次
按照失败后的重试策略尝试重新调用。1
CLIENT_APP_NOT_INSTALLED1008发起调用的应用未安装。1
CLIENT_APP_UID_MISMATCH1009发起调用的应用的 UID 异常。1
CLIENT_APP_AUTHORITY_SUCCESS1010发起调用的应用鉴权成功。1
CLIENT_APP_AUTHORITY_FAILED10111. 手管未联网(需要打开手机管家,点击同意隐私协议)
2. 发起调用的应用鉴权失败,请检查传入的AppId和AppKey与开发者后台配置的是否一致。
3. 需要确保使用的签名和申请时的签名一致
4. 检查手机时间是否正确,不要自己设置时间
3.0版本之前,为1011;
3.0版本后,拆分成了具体的错误码;
1
AUTHORITY_STATE_VERIFYING1012发起调用的应用正在进行鉴权。1
ERROR_TRUST_SERVICE_NOT_AVAILABLE1013可信服务不可用设备可信服务在hyperOS1.0及以上才支持1
ERROR_BIND_TRUST_SERVICE_FAILED1014可信服务bind失败。1
CHALLENGE_FORMAT_ILLEGAL1015challenge 格式错误,请检查challenge的长度和内容是否符合要求。1
ERROR_STATE_BUSY1016不同应用短时间内多次调用SDK,为限制调用频率,返回BUSY1min所有应用调用开放框架api次数需总共不超过10次1
ERROR_PERMISSION_DENIED1017没有权限,通过aidl接入报此问题1
CLIENT_APP_AUTHORITY_FAILED_BY_NET_ERROR1021鉴权失败:手管无法联网鉴权需要同意手机管家联网权限3
CLIENT_APP_AUTHORITY_FAILED_BY_APP_KEY_ERROR1022鉴权失败:appId/appkey 不匹配检查下配置的appId/appkey是否正确3
CLIENT_APP_AUTHORITY_FAILED_BY_SIGNATURE_ERROR1023鉴权失败:signature错误检查下apk签名是否正确3
CLIENT_APP_AUTHORITY_FAILED_BY_DATE_ERROR1024鉴权失败:手机时间错误需要手机设置正确的时间3
CLIENT_APP_AUTHORITY_FAILED_BY_QUOTA_EXCEEDED_ERROR1025鉴权失败:超出配额申请配额3
CLIENT_APP_AUTHORITY_FAILED_BY_SERVER_ERROR1026鉴权失败:鉴权服务错误重试3
CLIENT_APP_AUTHORITY_FAILED_BY_QPS_LIMIT_ERROR1027鉴权失败:QPS超过配置申请配额3
CLIENT_APP_AUTHORITY_FAILED_BY_OTHER_ERROR1028鉴权失败:其他错误重试3
ERROR_NOT_SUPPORT_XSOF2001当前设备不支持安全检测服务1
ERROR_NOT_SUPPORT_XSOF_API2002当前SDK版本不支持此API3
ERROR_SERVER_NOT_SUPPORT_API2003当前系统服务不支持此API3
MI_TRUST_ERROR>=3000设备可信服务底层异常1
3001key未写入1
3002设备底层暂不支持3.0上底层修复了此问题,修改成了2048字节大小1
3018challenge值不符合 challenge 长度不够。challenge值为服务端下发的String类型的随机数. 要求: 1.长度为16至256个字符 ; 2.不要包含换行等特殊字符 1

上一篇:设备涉诈检测业务介绍
下一篇:业务介绍
文档内容是否有帮助?
有帮助
无帮助