Java 接入教程

2026.08.04 11:36:11

    1. 环境要求

    说明
    兼容版本 Android 5.0 及以上系统
    支持架构 armeabi-v7a, arm64-v8a, x86, x86_64

    2. 合规说明

    2.1 隐私合规指引

    集成本 SDK 时,请遵循易盾隐私合规要求:风控引擎隐私合规指引 - 网易易盾

    2.2 Google Play 数据安全要求

    对于上传到 Google Play 的应用,需填写数据安全表单。面向海外市场时可参考下表填写:

    Google Play 数据安全表单问题 回复
    您的应用是否收集或共享任何用户数据类型?
    收集什么类型的数据? 设备或其他标识符
    这些数据是被收集、共享,还是两者兼有? 收集
    这些数据是暂时处理的吗?
    为什么要收集这些用户数据? 欺诈预防、安全和合规

    3. 导入 SDK

    3.1 gradle 7.0 以下版本

    (1)将 aar 文件放到工程 libs 文件夹下,在 app 的 build.gradle 中增加:

    repositories {
        flatDir {
            dirs 'libs'
        }
    }
    

    (2)在 dependencies 中增加对 aar 包的引用(x.x.x 为版本号,请联系技术支持确认最新版本):

    dependencies {
        implementation(name: 'HTProtectLib-x.x.x', ext: 'aar')
    }
    

    3.2 gradle 7.0 及以上版本

    将 aar 文件放到工程 libs 文件夹后,在 build.gradle 中增加:

    dependencies {
        implementation files('libs/HTProtectLib-x.x.x.aar')
    }
    

    3.3 过滤需要的 ABI

    SDK 默认导出 armeabi-v7a, arm64-v8a, x86, x86_64 四种 ABI。

    注意

    • 如果应用本身不支持这么多 ABI,需对最终导出的 ABI 进行过滤;
    • 过滤时只能在上述四种范围内选择。示例(仅保留三种):
    defaultConfig {
        applicationId "com.XX.XXX"
        minSdkVersion XX
        targetSdkVersion XX
        versionCode XX
        versionName "X.X.X"
        ndk {
            abiFilters "armeabi-v7a", "arm64-v8a", "x86"
        }
    }
    

    3.4 权限说明

    使用 AAR 接入会自动声明如下权限,无需在 AndroidManifest.xml 中手动添加。SDK 自身不会主动向用户申请运行时权限,以下权限仅用于提升风控识别效果,宿主 App 可按需保留:

    <!--网络通信-->
    <uses-permission android:name="android.permission.INTERNET"/>
    <!--获取 MAC 地址-->
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
    <!--获取网络状态-->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <!--若 targetSdkVersion >= 30,需增加以下配置,否则会影响 SDK 功能-->
    <!--谷歌广告ID权限-->
    <uses-permission android:name="com.google.android.gms.permission.AD_ID" />
    <!--华硕oaid权限,不添加则无法获取-->
    <uses-permission android:name="com.asus.permission.READ_SDID_PROVIDER" />
    <uses-permission android:name="com.asus.msa.SupplementaryDID.ACCESS" />
    <uses-permission android:name="freemme.permission.msa" />
    <uses-permission android:name="freemme.permission.msa.SECURITY_ACCESS" />
    <uses-permission android:name="com.nemu.oaid.permission.read" />
    <queries>
        <intent>
            <action android:name="android.intent.action.MAIN"/>
        </intent>
    </queries>
    

    3.5 添加 ProGuard 配置

    若使用 ProGuard 混淆,需将 SDK 类排除:

    -keep class com.netease.htprotect.**{*;}
    -keep class com.netease.mobsec.**{*;}
    

    4. 初始化

    前置条件(必须满足)

    • 必须在用户同意隐私政策后再调用;
    • 必须在主进程调用,避免加载异常;
    • init() 必须先于其他接口调用。

    4.1 方法定义

    public static void init(Context context, String productId, HTPCallback callback, HTProtectConfig config);
    

    4.2 HTPCallback 回调 code 说明

    HTPCallback.onResult(int code, String msg) 的 code 取值如下:

    code 含义 建议处置
    200 初始化正常,SDK 一切正常 可继续调用其他接口
    199 初始化参数错误 检查 productIdconfig 等入参是否正确
    400 需走配置下发流程(见 4.3,非必须) msg 上报业务服务端,按 4.3 流程回填配置

    初始化响应内部包含 Token 缓存时长 cacheTime,默认 60 秒,具体值以服务端配置为准。SDK 根据该时长维护内存缓存;该配置不改变现有 HTPCallback 回调签名。

    4.3 code == 400 的处理流程(非必须)

    当 code 返回 400 时,可由业务服务端协助完成一次配置下发。此流程非必须:若不接入,SDK 将使用缓存或内置默认配置,不影响正常运行。流程如下:

    sequenceDiagram
        participant SDK as 易盾智能风控SDK
        participant App as App
        participant Biz as 业务服务端
        participant YD as 易盾服务端
    
        SDK-->>App: onResult(code=400, msg)
        App->>Biz: 上报 msg
        Biz->>YD: 通过配置下发(getConfig)接口转发 msg
        YD-->>Biz: 返回配置数据 configData
        Biz-->>App: 下发 configData
        App->>SDK: ioctl(Cmd_SetConfigData, configData)
    

    对应代码:

    // code == 400 时,msg 需经业务服务端转发给易盾服务端(配置下发接口),
    // 拿到易盾返回的 configData 后,通过通用查询接口回填给 SDK:
    HTProtect.ioctl(RequestCmdID.Cmd_SetConfigData, configData);
    

    4.4 初始化示例

    public class DemoApplication extends Application {
    
        @Override
        public void onCreate() {
            super.onCreate();
    
            // 仅在主进程初始化
            if (!isMainProcess(this)) {
                return;
            }
    
            // 仅在用户已同意隐私协议后初始化
            if (!hasAgreedPrivacyPolicy()) {
                return;
            }
    
            HTProtectConfig config = new HTProtectConfig();
            config.setServerType(1);                 // 1=中国大陆(默认)
            config.setExtraData("uid", "123456");    // 可选:业务字段
            config.setExtraData("bizId", "10001");
    
            HTProtect.init(
                    this,
                    "your_product_id",
                    new HTPCallback() {
                        @Override
                        public void onResult(int code, String msg) {
                            if (code == 200) {
                                // 初始化成功,可获取 Token
                            } else if (code == 199) {
                                // 参数错误,检查入参
                            } else if (code == 400) {
                                // 走 4.3 配置下发流程(非必须)
                            }
                        }
                    },
                    config
            );
        }
    }
    

    5. HTProtectConfig 配置说明

    HTProtectConfig 的所有配置项均为可选,按需设置。

    方法 说明 默认 / 备注
    setServerType(int server) 设置服务器地区类型(取值见 5.1) 默认 1(中国大陆)
    setHost(String host) 设置服务端地址,仅私有化部署需要 SaaS 服务无需配置
    setExtraData(String key, String value) 追加单个扩展字段(可多次调用) 可选

    5.1 setServerType 取值

    以下取值用于选择加速节点。若需使用海外数据中心,请联系技术支持。

    取值 地区 说明
    1 中国大陆地区 默认值,无须设置
    2 中国台湾地区
    3 海外地区

    5.2 扩展字段设置

    通过 setExtraData 逐字段追加扩展字段:

    HTProtectConfig config = new HTProtectConfig();
    config.setExtraData("uid", "12345");
    config.setExtraData("bizId", "1");
    

    6. 获取 Token

    前置条件:必须在 init() 后再调用。

    同步 / 异步如何选择

    • 同步 getToken():优先检查缓存 token 是否仍在初始化响应下发的缓存时长内;缓存有效时,对缓存 token 二次加密后立即返回,同时在后台异步刷新 token;无缓存或缓存已过期时,立即返回降级 token,同时触发后台异步刷新。适合追求快速拿到可用 token的场景。
    • 异步 getTokenAsync():每次调用都实时采集设备 / 风险数据并上报,完成后通过回调返回最新 token,属于耗时操作,适合需要实时风险状态的场景。

    注意事项

    • GetTokenCallback 不应传 null
    • SDK 未初始化时返回 code == 201(error not init)。

    初始化响应会下发 Token 缓存时长 cacheTime,默认 60 秒,具体值以服务端配置为准;缓存不会持久化到 App 本地存储。

    6.1 方法定义

    // 同步获取:优先返回有效缓存或降级 token,并在后台异步刷新
    public static AntiCheatResult getToken();
    // 异步获取:每次实时采集并上报,属于耗时操作
    public static void getTokenAsync(GetTokenCallback callback);
    

    6.2 异步获取

    HTProtect.getTokenAsync(new GetTokenCallback() {
        @Override
        public void onResult(AntiCheatResult result) {
            if (result.code == 200) {
                String token = result.token;
                // 上报 token 至业务服务端(注意兼容离线 token ~5KB)
            } else {
                // 失败,参照第 7 章结果码表(result.code / result.codeStr)
            }
        }
    });
    

    6.3 同步获取

    // 注意:同步接口在主线程调用会返回 code==202,请放到子线程
    AntiCheatResult result = HTProtect.getToken();
    if (result.code == 200) {
        String token = result.token;
    } else {
        // 处理错误,参照第 7 章
    }
    

    注意:同步接口可能触发耗时逻辑,请放到子线程执行,不要在主线程频繁调用。


    7. 获取 Token 的返回值(AntiCheatResult)

    getToken() / getTokenAsync() 均返回 AntiCheatResult 对象。

    7.1 AntiCheatResult 类结构

    package com.netease.htprotect.result;
    
    public class AntiCheatResult {
        public String token;       // token 内容
        public int    code;        // 结果码,200 为成功
        public String codeStr;     // 结果码对应的文字说明
    }
    

    7.2 字段说明

    字段 说明
    code 结果码,200 表示成功,其余均为失败(取值见 7.3)
    codeStr 结果码对应的文字说明(见 7.3)
    token code==200 时返回正常 token;网络不佳或超时时返回离线 token(见 7.4)

    7.3 结果码(code)说明

    code codeStr 含义 建议处置
    200 success 调用成功 正常使用 token
    201 error not init SDK 未初始化 确认 init() 已回调 code==200 后再取 token
    202 error. run on main thread 在主线程运行(同步接口) getToken() 放到子线程执行
    204 gen token error 其他原因导致生成 token 失败 重试;持续失败按 8.4 收集信息反馈

    7.4 token 长度与离线 token

    情况 token 类型 大致长度
    正常(网络可用) 在线 token 默认 40 字节
    网络异常 / 超时 / 降级 离线 token 5KB 左右

    重要

    • 业务侧不要对 token 长度做硬编码限制 / 截断,需同时兼容 40 字节的在线 token 与约 5KB 的离线 token;
    • 上报字段、数据库列、网络包大小限制等都应预留足够空间,避免离线 token 被截断导致服务端校验失败;
    • 离线 token 仍可正常上报,由易盾服务端识别处理,无需业务侧区分在线/离线。

    7.5 返回值判断示例

    HTProtect.getTokenAsync(new GetTokenCallback() {
        @Override
        public void onResult(AntiCheatResult result) {
            if (result.code == 200) {
                String token = result.token;   // 可能是在线(40B)或离线(~5KB) token
                uploadToken(token);            // 完整上报,勿截断
            } else {
                // 失败:参照 7.3 结果码表,result.codeStr 为文字说明
                handleTokenError(result.code, result.codeStr);
            }
        }
    });
    

    8. 接入指引

    8.1 调用时序总览

    sequenceDiagram
        participant App as App
        participant SDKAPI as 易盾风控SDK接口层
        participant SDKCore as 易盾风控SDK底层
        participant YD as 易盾服务端
    
        Note over App,SDKCore: 用户同意隐私协议后,主进程调用接口触发 SDK 加载
        App->>SDKAPI: init(productId, config)
        SDKAPI->>SDKCore: 触发 SDK 加载与初始化
        SDKCore->>YD: 初始化握手 / 拉取策略
        YD-->>SDKCore: 初始化响应(业务配置、Token 缓存时长,默认 60 秒)
        SDKCore->>SDKCore: 保存业务配置并记录 Token 缓存时长
        SDKCore-->>SDKAPI: SDK 加载完成
        Note over SDKAPI,SDKCore: 后续 Token 接口复用已加载组件
        SDKAPI-->>App: HTPCallback.onResult(code)
    
        Note over App,SDKCore: 业务接口调用触发 Token 获取
        App->>SDKAPI: getToken()(同步,放在子线程)
        SDKAPI->>SDKCore: 触发同步 Token 获取
        SDKCore->>SDKCore: 检查缓存 token 是否超过缓存时长
        alt 缓存有效
            SDKCore->>SDKCore: 对缓存 token 二次加密
            SDKCore-->>SDKAPI: AntiCheatResult(缓存 token)
            SDKAPI-->>App: 立即返回缓存 token
        else 无缓存或缓存已过期
            SDKCore->>SDKCore: 生成降级 token
            SDKCore-->>SDKAPI: AntiCheatResult(降级 token)
            SDKAPI-->>App: 立即返回降级 token
        end
    
        Note over SDKAPI,SDKCore: 同步 getToken() 返回后,底层同时执行后台异步刷新
        SDKCore->>SDKCore: 实时采集设备 / 风险数据
        SDKCore->>YD: 上报采集数据并请求新 token
        YD-->>SDKCore: 返回新 token
        SDKCore->>SDKCore: 按 Token 缓存时长更新内存缓存
    
        App->>SDKAPI: getTokenAsync(callback)(异步,耗时)
        SDKAPI->>SDKCore: 触发实时 Token 获取
        SDKCore->>SDKCore: 每次实时采集设备 / 风险数据
        SDKCore->>YD: 上报采集数据并请求最新 token
        YD-->>SDKCore: 返回最新 token
        SDKCore->>SDKCore: 按 Token 缓存时长更新内存缓存
        SDKCore-->>SDKAPI: AntiCheatResult(最新 token)
        SDKAPI-->>App: callback(最新 token)
    
    

    时序图中的 Token 缓存时长由初始化响应下发,默认 60 秒;仅当缓存 token 未超过该时长时,getToken() 才会走缓存二次加密分支。

    8.2 推荐接入流程

    // 1. 用户同意隐私协议后,Application 主进程初始化
    HTProtectConfig config = new HTProtectConfig();
    config.setServerType(1); // 中国大陆,默认值
    config.setExtraData("uid", "12345");
    
    HTProtect.init(context, "product_id", callback, config);
    
    // 2. init 回调 code==200 后,首次在业务节点用异步获取 token(每次实时采集并上报,耗时)
    HTProtect.getTokenAsync(new GetTokenCallback() {
        @Override
        public void onResult(AntiCheatResult result) {
            if (result.code == 200) {
                uploadToken(result.token);
            }
        }
    });
    
    // 3. 之后的业务埋点,使用同步 getToken() 获取并上报(须在子线程)
    //    有效缓存会二次加密后立即返回;无效缓存会返回降级 token,并同时触发后台刷新
    new Thread(() -> {
        AntiCheatResult result = HTProtect.getToken();
        if (result.code == 200) {
            uploadToken(result.token);
        }
    }).start();
    

    接入步骤:

    1. 向运营获取 productId(必传);
    2. 在隐私政策弹窗中加入易盾智能风控 SDK 采集授权说明;
    3. 用户同意隐私协议后,在 Application.onCreate 主进程中构建 HTProtectConfig 并调用 HTProtect.init()
    4. init 回调 code==200 后,首次在业务节点(注册、登录、营销结算、支付、关键操作等)通过 getTokenAsync() 获取 Token 并上报;
    5. 之后的业务埋点建议使用 getToken() 获取 Token 并上报(须在子线程);
    6. 客户端将 Token 随业务请求完整上报至业务服务端;服务端后续处理不属于客户端接入范围。

    8.3 接入建议

    • 必须在用户同意隐私政策后再调用 HTProtect.init()
    • HTProtect.init() 必须先于所有其他接口调用;
    • 按需选择 getTokenAsync() / getToken()(选择逻辑见第 6 章);
    • GetTokenCallback 不要传 null
    • HTProtectConfig 尽量在初始化前配置完整;
    • 多进程 App 须确认 SDK 运行在主进程中。
    • 客户端职责止于获取并上报 Token,不在客户端执行风控校验或决策。

    8.4 排查信息收集清单

    向技术支持反馈问题时,建议附带以下信息以加快定位:

    信息项 说明
    SDK 版本号 当前接入的 HTProtect 版本
    设备信息 机型、系统版本、CPU 架构(ABI)
    复现步骤 触发问题的接口调用顺序
    返回值 code / codeStr / msg
    日志 init 回调日志、异常堆栈(如 UnsatisfiedLinkError

    9. 如何验证接入成功

    按以下清单逐步自检,全部通过即视为接入成功。

    9.1 编译与打包验证

    检查项 通过标准
    aar 依赖 编译无报错,能引用到 HTProtect
    so 打包 解压 APK,lib/<abi>/ 下含 libNetHTProtect.so
    ABI 匹配 abiFilters 与目标设备架构一致,安装运行不报 UnsatisfiedLinkError
    ProGuard release 包混淆后 SDK 类未被裁剪(见 3.5 keep 规则)

    9.2 初始化验证

    • HTProtect.init()HTPCallback.onResult 回调返回 code == 200
    • 若返回 199:检查 productId / config 入参;
    • 若返回 400:可按 4.3 完成配置下发流程;若不接入该流程,将使用默认配置,不影响运行。
    new HTPCallback() {
        @Override
        public void onResult(int code, String msg) {
            Log.d("HTProtect", "init code=" + code + ", msg=" + msg);
            // 期望看到 code=200
        }
    };
    

    9.3 获取 Token 验证

    • 调用 getTokenAsync(),回调返回 result.code == 200result.token 非空;
    • 打印长度确认:正常网络下约 40 字节;断网/弱网下为 离线 token(~5KB),二者均属正常。
    HTProtect.getTokenAsync(result -> {
        Log.d("HTProtect", "code=" + result.code
                + ", len=" + (result.token == null ? 0 : result.token.length()));
        // 期望 code=200,token 非空
    });
    

    弱网验证技巧:开启飞行模式或限速后再取 token,应返回离线 token(~5KB)而非失败,借此验证业务侧对离线 token 的兼容性。

    9.4 Token 上报验证

    • 客户端能将 token 随业务请求完整上报至业务服务端;
    • 业务服务端能正常接收 token,且在线 / 离线 token 均未被截断;
    • 服务端后续风控处理不属于客户端接入范围。

    9.5 接入成功判定

    同时满足以下条件,即接入成功:

    1. ✅ init 回调 code == 200
    2. ✅ getToken 回调 code == 200 且 token 非空;
    3. ✅ 在线/离线 token 均能完整上报、不被截断;
    4. ✅ 业务服务端能完整接收客户端上报的 token。

    10. FAQ / 异常排查

    10.1 初始化相关

    Q:调用 HTProtect.init() 后没有任何回调 / 回调 code 非 200?

    排查顺序:

    • 确认 productId 等参数是否正确,host(如配置)是否可达;
    • 确认 HTPCallback 未传 null,否则无法接收初始化结果;
    • 确认是否在用户同意隐私协议之后调用,提前调用可能被业务逻辑拦截。

    Q:多进程 App 应该在哪个进程初始化?

    只在主进程初始化即可。建议在 Application.onCreate() 中先判断进程名,非主进程直接 return:

    @Override
    public void onCreate() {
        super.onCreate();
        if (!isMainProcess(this)) {
            return; // 非主进程不初始化
        }
        // 主进程初始化逻辑
    }
    

    Q:可以重复调用 init() 吗?

    不建议,请保证初始化只执行一次。若为切换海外数据中心,可根据切换频次调用 init()

    Q:HTPCallback code 为 400 时,是否必须接入业务服务端配置下发?

    非必须。拉取配置失败后会使用缓存或内置配置,不影响运行。

    10.2 获取 Token 相关

    Q:如何选择同步还是异步调用?

    • 同步 getToken():缓存 token 在缓存时长内时二次加密后立即返回;无缓存或缓存已过期时返回降级 token,并同时触发后台异步刷新;
    • 异步 getTokenAsync():每次实时采集数据并上报,完成后通过回调返回最新 token,属于耗时操作;
    • 若需要快速拿到一个可用 token,请使用同步;若需要实时的风险状态,请使用异步。

    Q:getTokenAsync() 回调返回 code == 201(error not init)?

    说明 SDK 尚未初始化或初始化未完成:

    • 确认 HTProtect.init() 已先于 getTokenAsync() 调用;
    • 初始化是异步过程,建议在 HTPCallback.onResult 成功(code==200或者code==400)后再触发首次取 Token;
    • 确认初始化进程与取 Token 进程一致(均为主进程)。

    Q:Token 一直获取失败 / code != 200

    • 检查服务端是否正常下发,确认 productId 在服务端已配置;
    • 打印 result.coderesult.codeStr,结合 7.3 结果码表定位;
    • 避免在初始化完成前的极早期高频调用。

    Q:同步 getToken() 阻塞主线程导致卡顿 / ANR?

    同步接口可能触发耗时逻辑,请放到子线程执行,不要在主线程频繁调用。

    Q:设备信息、设备 id、token 是否缓存到本地?

    不会持久化到 App 本地存储。SDK 按初始化响应中的 cacheTime 在内存中维护 token 缓存,默认有效期为 60 秒;无缓存或缓存已过期时,同步 getToken() 返回降级 token,并在后台异步刷新。

    10.3 Native 加载相关

    Q:出现 UnsatisfiedLinkError

    • 确认 APK 实际打包的 ABI 与目标设备匹配,abiFilters 未误删所需架构;
    • 确认 SDK 的 .so 未被资源压缩 / 混淆裁剪掉。

    Q:与其他加固 / 加壳工具冲突?

    • 部分加固方案会对 .so 加密或对类加载做改写,可能影响 native 初始化;
    • 建议确认 HTProtect 的 native 库在加固白名单中,或调整加固策略避免对其 .so 二次处理。

    10.4 接入复杂度相关

    Q:接入这个 SDK 工作量大吗?需要改动很多业务代码?

    接入很轻,核心只有两步:

    1. Application.onCreate(主进程、隐私同意后)调用一次 HTProtect.init()
    2. 在业务节点调用 getToken() / getTokenAsync() 拿到 token,随业务请求上报。

    不需要改动现有业务逻辑,token 作为一个附加字段透传给业务服务端即可。

    Q:config 里这么多参数都要配吗?

    不需要。除 initproductId 必传外,HTProtectConfig 所有配置项均为可选。

    10.5 误封 / 误判相关

    Q:会不会把正常用户误判为风险 / 直接封禁?

    SDK 侧不做封禁决策,最终是否拦截、如何处置,由业务服务端结合易盾返回的风险标签自行决定。建议:

    • 业务侧不要对单一校验结果直接做「封号」等强处置,应结合风险等级分级响应(如二次验证、限流、人工复核);
    • 中 / 低风险标签优先用于观察 / 加验证,再逐步收紧策略,避免上线即误伤。

    Q:token 校验失败(code != 200)是否等于用户有问题?

    不是。code != 200 多数是环境 / 网络 / 时序问题(如 init 未完成就取 token、网络不通),并非用户作弊。请先按 7.3 结果码表排查技术原因,不要直接对用户做处置。

    10.6 性能 / 稳定性影响相关

    Q:接入后会不会拖慢 App 启动 / 卡顿 / 增加崩溃?

    • 启动init() 内部为异步初始化,不阻塞 Application.onCreate 主流程;
    • 取 token:同步 getToken() 优先返回缓存或降级 token,并在后台异步刷新;
    • 异步 getTokenAsync() 每次实时采集并上报,属于耗时操作,回调在完成后触发;
    • 同步 getToken() 仍可能触发内部处理,严禁在主线程调用,必要时放子线程。

    Q:取 token 耗时多久?可以高频调用吗?

    token 获取涉及实时采集,存在一定耗时。建议:

    • 在关键业务节点按需获取,不要在循环 / 高频回调里反复取
    • 避免在 init 完成前的极早期高频调用(会返回 code == 201)。

    10.7 数据获取与处理相关

    Q:SDK 会采集哪些数据?

    SDK 用于欺诈预防与安全,采集的是设备及其他标识符类信息(用于风险识别),不采集与风控无关的隐私内容。具体采集范围与用途,请以隐私合规指引(见 2.1)及 Google Play 数据安全表(见 2.2)为准。

    Q:SDK 会主动申请权限吗?

    不会。SDK 自身不主动申请运行时权限(见 3.4)。AAR 声明的网络 / 设备状态等权限仅用于提升风控效果,缺失不会导致崩溃,但可能降低识别精度。

    Q:必须在用户同意隐私政策后才能初始化吗?

    是,这是强制要求。必须在用户同意隐私政策后再调用 HTProtect.init(),并在隐私政策弹窗中加入本 SDK 的采集授权说明,否则存在合规风险。

    Q:采集的数据存在哪、会不会泄露给第三方?

    数据用于欺诈预防、安全与合规目的(与 Google Play 表单一致),处理与传输遵循易盾隐私合规要求。涉及数据存储、共享、留存的具体条款,以易盾隐私合规指引(2.1)及双方协议为准。

    Q:海外 / GDPR 场景需要注意什么?

    可通过海外数据中心确保数据在合规区域处理,具体情况请联系技术支持沟通。


    11. AI 辅助接入 Prompt 约束

    你是「易盾智能风控 SDK-Android」接入助手。请严格依据本接入文档回答与生成代码,遵守以下约束:
    
    【API 白名单(仅可使用以下方法签名)】
    - HTProtect.init(Context, String productId, HTPCallback, HTProtectConfig)
    - HTProtect.getToken()                       // 返回 AntiCheatResult,同步,须在子线程
    - HTProtect.getTokenAsync(GetTokenCallback)  // 异步,回调返回 AntiCheatResult
    - HTProtect.ioctl(RequestCmdID.Cmd_SetConfigData, configData)  // 仅 code==400 配置下发时使用
    - HTProtectConfig.setServerType(int) / setHost(String)
      / setExtraData(String, String)
    - AntiCheatResult 字段:token / code / codeStr / businessId
    不得调用上述清单之外的任何 SDK 方法或字段;如涉及未列出的能力,
    请明确回复「文档未提供该 API」,禁止编造方法名、参数或返回值。
    
    【关键事实(不得偏离)】
    - 成功码统一为 code == 200;其余 code(201/202/203/204)均为失败,含义见结果码表。
    - 结果对象为 AntiCheatResult,判断成功用 result.code == 200,禁止使用 ret / ERROR_NOT_INIT 等旧写法。
    - 初始化响应包含 token 缓存时长:cacheTime 默认 60 秒,具体值以服务端配置为准;不会持久化到 App 本地存储。
    - 同步 getToken():缓存 token 在缓存时长内时二次加密后立即返回;无缓存或缓存已过期时返回降级 token,同时触发后台异步刷新;在主线程调用会返回 code==202,必须放子线程。
    - 异步 getTokenAsync():每次实时采集数据并上报,属于耗时操作,完成后回调返回最新 token。
    - init 必须满足:用户已同意隐私政策、主进程、先于其他接口调用;回调 code==200 后方可取 token。
    - token 长度:在线约 40 字节,离线(弱网/超时)约 5KB;禁止对 token 做长度限制或截断。
    - HTProtectConfig 除 init 的 productId 外全部可选;setHost 仅私有化部署需要,SaaS 无需配置。
    - code==400 的配置下发为非必须流程,不接入则使用缓存/内置配置,不影响运行。
    - SDK 不做封禁决策、不主动申请运行时权限、不在本地缓存设备信息/设备id/token。
    
    【输出要求】
    - 生成代码须与文档示例风格一致;同步取 token 的示例必须放在子线程。
    - 涉及合规/采集字段问题时,引导参考隐私合规指引(2.1)与 Google Play 数据安全表(2.2),不臆造采集字段。
    - 不确定或文档未覆盖时,明确说明并建议联系易盾技术支持,不做猜测性回答。
    
    在线咨询 电话咨询:95163223 免费试用