Android接入
法规说明
根据我国《网络安全法》等相关法律法规及国家标准的要求,个人信息的收集和使用,应当遵循合法、正当、必要的原则,公开收集、使用规则,明示收集、使用信息的目的、方式和范围,并经被收集者同意。故我们强烈建议您在拟接入易盾SDK前,检查和完善拟接入软件的《隐私政策》中有关采集个人信息部分的说明,确保已涵盖拟接入SDK项下需要采集的个人信息(详见附表),并明确您有权将上述个人信息提供给第三方用于安全服务。
附表:
采集信息类型 | 备注 |
---|---|
设备型号 | 无 |
设备IP地址 | 无 |
设备MAC地址 | 无 |
设备软件版本信息 | 无 |
设备唯一标识码(IMEI) | 无 |
传感器数据 | 提供开关,默认打开,可根据业务需求随时设置关闭 |
APK安装列表 | 提供开关,默认打开,可根据业务需求随时设置关闭 |
接入步骤
Android SDK接入分为如下步骤:
- 嵌入SDK
- init:初始化SDK
- getToken:调用getToken接口获取token,每次调用返回不同的token值。一般由用户操作(提交等)来触发getToken,请注意:一个token只能使用一次,如果在同一个页面中,允许用户多次操作,请多次调用getToken接口以获取不同的token;
- 提交token:将token作为请求参数提交到业务方后端。
嵌入SDK
嵌入SDK有如下步骤:
- 导入SDK
- 导入需要的ABI
- 添加权限信息
- 添加ProGuard配置
导入SDK
将获取的sdk的aar文件放到工程中的libs文件夹下,然后在app的build.gradle文件中增加如下代码
repositories {
flatDir {
dirs 'libs'
}
}
在build.gradle配置文件的dependencies依赖中增加对aar包的引用(x.x.x表示版本号,请联系您的专属安全策略经理确认最新的版本号):
dependencies {
implementation(name:'netmobsecLib_x.x.x', ext: 'aar')
}
导入需所的ABI
SDK提供了armeabi、armeabi-v7a、x86、arm64-v8a四种ABI的支持(当前不支持x86_64),默认会包含这四种ABI。注意:
- 如果产品本身不支持这么多ABI,则需要对最终导出的ABI进行过滤,否则可能会导致崩溃
- 如果app只需要支持特定的ABI,比如armeabi,armeabi-v7a,x86三种,可以在build.gradle添加如下配置:
defaultConfig {
applicationId "com.XX.XXX"
minSdkVersion XX
targetSdkVersion XX
versionCode XX
versionName "X.X.X"
ndk {
abiFilters "armeabi", "armeabi-v7a", "x86"
}
}
添加权限信息
SDK不会申请任何权限,但是为了提升反作弊的效果,建议在 AndroidManifest.xml 文件中添加下列权限配置:
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
添加ProGuard配置
若使用ProGuard进行混淆,需要将SDK使用的类排除掉。若使用Android Studio开发,则在proguard-rules.pro文件里添加如下信息:
-keep class com.netease.mobsec.**{*;}
-keep class com.netease.htprotect.**{*;}
SDK接口
反作弊配置类:WatchManConf
使用之前,请先导入该类。
import com.netease.mobsec.WatchManConf;
该类用于对一些配置进行设置,有以下接口:
- 作用:是否允许采集本机已安装的软件,默认开启
public void setCollectApk(boolean flag)
- 作用:在init的时候,是否允许开始采集传感器实时数据,默认开启
tpublic void setCollectSensor(boolean flag)
- 作用:设置应用程序渠道名称
public void setChannel(String Channel)
- 作用:供用户上传自定义数据,可多次调用
public void setExtraData(String key, String value)
- 作用:设置私有化的 URL 地址,正常情况下不用设置
public void setUrl(String Url)
- 作用:供用户自行实现网络相关行为
public void setAbstractNetClient(AbstractNetClient netclient)
- 作用:供用户上传 trackId,不同用户应设置不同值用于区分
public void setCustomTrackId(String trackid)
- 作用:兼容 kotlin 协程模式,默认为 false。若当前使用 kotlin 的
runBlocking
方法,则设置为 true,否则init
和getToken
可能无法回调结果。
public void setOnCoroutines(boolean onCoroutines)
- 开始支持的版本:4.4.5.7
- 作用:支持在离线或网络异常状态下返回详细数据(离线token),默认关闭
public void setOfflineToken(boolean offlineToken)
- 开始支持的版本:4.4.7.8
- 作用:控制 init 时是否发送设备相关信息,默认关,如开启,需确保在隐私政策同意后进行调用
public void setInitDInfo(boolean flag)
- 开始支持的版本:4.4.11.4
反作弊类:WatchMan
init接口
使用之前,先导入类(为保证接入合规,请在用户同意隐私政策后调用init),注意从4.4.7.10版本开始该接口初始化成功后,再次调用初始化会提示错误码
import com.netease.mobsec.WatchMan;
import com.netease.mobsec.InitCallback;
在项目的Application类或者Activity类的onCreate或onStart()方法中调用init方法来初始化SDK,接口定义如下:
public static void init ( Context context,
String ProductNum,
WatchManConf conf,
InitCallback callback)
接口说明如下:
-
开始支持的版本:4.4.0
-
调用方式:WatchMan.init(context, productNumber,watchmanconf,callback)
-
接口描述:初始化SDK,采集数据并将数据提交到服务端,内部为异步实现,不会阻塞线程
参数说明:
参数名 | 类型 | 是否必须 | 作用 |
---|---|---|---|
context | Context | 是 | 用于获取设备基本信息 |
productNumber | String | 是 | 产品编号 |
watchmanconf | WatchManConf | 否 | 设置配置 |
callback | InitCallback | 否 | 结果描述 |
接入方可通过InitCallback获取初始化结果,InitCallback的定义如下:
public interface InitCallback {
void onResult(int code, String msg);
}
//code为200,表示成功;其他值均为失败,失败信息通过msg返回。
- 回调code说明
code | 说明 |
---|---|
200 | SDK初始化成功 |
1001 | 产品编号错误 |
1003 | SDK初始化参数非法 |
1004 | SDK初始化异常 |
1005 | SDK初始化成功后,且被再次调用初始化 |
getToken接口
使用之前,先导入类
import com.netease.mobsec.WatchMan;
import com.netease.mobsec.GetTokenCallback;
getToken接口通过回调返回唯一凭证token,业务方客户端需要将此token提交到业务后端,业务后端再使用此token来check接口获取检测结果。
接口的定义如下:
public static void getToken(GetTokenCallback callback)
public static void getToken(int timeout, GetTokenCallback callback)
- 开始支持的版本:4.4.0
- 调用方式:WatchMan.getToken(callback) 或 WatchMan.getToken( timeout,callback)
- 接口描述:获取唯一凭证token,为同步接口,建议不要在主线程使用,否则可能导致ANR或者崩溃
- 注意:开启离线token功能后,如设置getToken超时时间,网络异常状态下实际返回时间会在超时时间基础上最大增加150毫秒,返回数据长度在2000-8000字节之间,可当作正常token进行使用
- 强烈建议:初始化init到gettoken时间间隔2s以上,并且由用户触发。
参数名 | 类型 | 是否必须 | 作用 |
---|---|---|---|
timeout | int | 否 | 最长超时时间,单位秒。若没有指定,则默认3s;timeout可设置范围为1~10秒 |
callback | GetTokenCallback | 是 | 结果描述 |
接入方可通过GetTokenCallback获取结果,GetTokenCallback的定义如下:
public interface GetTokenCallback {
void onResult(int code, String msg, String token);
}
//code为200,表示成功,可获取token值;其他code值均为失败,失败信息通过msg返回。
- 回调code说明
code | 说明 |
---|---|
200 | 成功 |
1002 | SDK初始化失败 |
getTokenAsync接口
getToken接口的异步模式
接口的定义如下:
public static void getTokenAsync(int timeout, GetTokenCallback callback)
- 开始支持的版本:4.4.5.9
- 调用方式: WatchMan.getTokenAsync( timeout,callback)
- 接口描述:获取唯一凭证token,为getToken的异步接口,注意在回调中不要执行UI操作
- 该接口不支持离线token模式
getToken带返回值同步接口
接口的定义如下:
public static WatchManResult getToken(int timeout)
- 开始支持的版本:4.4.7.10
- 调用方式: WatchMan.getToken( timeout)
- 接口描述:获取唯一凭证token,同步接口,请勿在主线程中调用
- 该接口不支持离线token模式
WatchManResult定义如下:
参数名 | 类型 | 作用 |
---|---|---|
getCode | int | 获取返回状态码 |
getToken | String | 获取token |
getMsg | String | 获取提示信息 |
setSeniorCollectStatus 接口
该接口用于实时控制传感器数据的采集,可随时启用或关闭采集功能,但是必须在init之后方可调用该接口。
该接口与WatchManConf里的setCollectSensor接口的区别主要在于采集时机的不同,若WatchManConf里面设置为true,则在init的时候就开始采集传感器数据;若在WatchManConf里面设置为false,可根据业务需要,在指定页面中调用setSeniorCollectStatus开启采集功能,getToken之后再关闭采集。
接口的定义如下:
public static void setSeniorCollectStatus(boolean flag)
接口说明如下:
- 开始支持版本:4.3.2
- 调用方式:WatchMan.setSeniorCollectStatus(flag)
- 接口描述:用于控制是否采集传感器数据,可结合业务需要,随时开启或者关闭
参数名 | 类型 | 是否必须 | 作用 |
---|---|---|---|
flag | boolean | 是 | true:开启 false:关闭 |
setCustomTrackId接口
该接口用于将用户设置的trackid上传到易盾后端。
该接口与WatchManConf中的setCustomTrackId接口的作用是相同的,区别主要在于设置的时机不同。若在init之前客户已经获取到trackid,即可在WatchManConf设置一次即可。若在init之后才能拿到trackid或者trackid有更新,那么可以调用该接口进行设置。
接口的定义如下:
public static void setCustomTrackId(String trackId)
接口说明如下:
- 开始支持版本:4.4.2
- 调用方式:WatchMan.setCustomTrackId(trackid)
- 接口描述:用于将用户生成的trackid上传到易盾后端
参数名 | 类型 | 是否必须 | 作用 |
---|---|---|---|
trackid | string | 是 | 设置trackid |
接入示例
在项目Application类或者主Activity类的onCreate()方法中初始化SDK。
import com.netease.mobsec.WatchMan;
import com.netease.mobsec.WatchManConf;
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
// 设置配置类相关信息
WatchManConf myconf = new WatchManConf();
myconf.setCollectApk(TRUE); // 采集apk安装列表
myconf.setCollectSensor(FALSE); //init时候不采集传感器数据
//初始化SDK
WatchMan.init(mContext, "your productNumber", myconf, new InitCallback() {
@Override
public void onResult(int code, String msg) {
Log.e(TAG,"init OnResult , code = " + code + " msg = " + msg);
}
});
// 业务代码
}
}
在需要反作弊的接口中,首先获取反作弊Token,然后进行其他相应的操作,例如:
public void rise() {
WatchMan.setSeniorCollectStatus(true); // 开启传感器数据采集
// 获取反作弊查询token,使用默认延时3秒
WatchMan.getToken( new GetTokenCallback(){
@Override
public void onResult(int code, String msg,String Token) {
Log.e(TAG,"Register, code = " + code + " msg = " + msg+" Token:"+Token);
Map<String, String> params = new HashMap<String, String>();
// 携带反作弊查询token
params.put("token", token);
params.put("username", username);
params.put("password", password);
// 点赞操作需要反作弊检查
String riseResp = HttpClient4Utils.sendPost(httpClient, RISE_URL, params, Consts.UTF_8);
// 处理点赞的响应
}
});
WatchMan.setSeniorCollectStatus(false); //提交token后,关闭传感器数据采集
}