文档简介:
概述
Android安全SDK又名——昊天SDK,是一个基于海量威胁情报数据的智能分析平台, 打通了移动、云、PC 的全链条安全数据,利用深度学习人工智能平台从海量的安全事件中进行关联分析,能感知出潜在的互联网威胁以及 APT 事件,并能对攻击阵营的基础设施和技术手段进行分析识别,告别被动防御局面, 为用户提供更加安全的互联网体验。
安装SDK工具包
安装步骤
-
创建一个新的Module,导入控制台下载的AAR文件,这里以hotian*.aar为例,module任意命名,以 “haotian”为例,如下图所示:
- 在自己项目的build.gradle中添加依赖,引入haotian依赖,然后sync。
dependencies {
...
compile project(': haotian)
...
}
- so包相关:aar包中包含了armeabi,armeabi-v7a,arm64-v8a,x86的so包,如果集成的App自身兼容的abi种类少于本aar,应当在build.gradle文件中,加入ndk的abiFilter配置,选定本app支持的abi,以防止引入全部4种abi的so导致在指定abi上缺失其他so文件。
defaultConfig {
...
ndk {
abiFilter "armeabi"
}
...
}
注意事项
以前使用jar包方式集成的如果要转换为aar集成,请一定将集成的jar包,so包和配置文件删除。
API 接口
设置用户同意隐私协议接口
通过调用此接口告知安全SDK用户是否同意了隐私协议。
在同意隐私协议前,所有对安全SDK的调用将不会生效,具有返回值的方法会获取到空的返回值,初始化过程会在delay结束后被中止,直到同意了隐私协议。
HTH.setAgreePolicy(Context context, boolean agree)
参数说明
boolean agree为用户是否同意了隐私协议,true为同意,false为不同意。
初始化接口
程序启动后在应用的Application类的onCreate中调用Haotian SDK初始化代码:
HTH.init(Context context, String haotian_appkey, String haotian_seckey, 1);
如果APP需要接入风控服务,需要在APP主进程初始化sdk,确保sdk正常运行。 如果在同意隐私协议前调用初始化接口,初始化过程会被中止,并在调用同意隐私协议方法后恢复。
参数说明
String haotian_appkey和String haotian_seckey用于服务器的访问校验,这是分配给渠道集成SDK的凭证。集成之前请通过控制台申请。这两个 key 是和集成宿主的包名和签名唯一关联的。如果包名或者签名有变化需要重新申请。
延迟初始化接口
Haotian SDK支持在程序启动后在应用的Application类的onCreate中调用延迟初始化代码,根据传入的参数使初始化行为延迟一段时间开始,注意该接口与前述初始化接口只能调用一个。
HTH.initDelay(Context context, int delaySeconds, String haotian_appKey,String haotian_seckey,1)
如果APP需要接入风控服务,需要在APP主进程初始化Haotian sdk。 如果在同意隐私协议前调用初始化接口,初始化过程会被中止,并在调用同意隐私协议方法后恢复。
参数说明
a) int delaySeconds 用于延迟初始化的时间,单位是秒,初始化行为将于delaySeconds秒后开始执行。
b) String haotian_appkey和String haotian_seckey用于服务器的访问校验,这是分配给渠道集成我们SDK的凭证。集成之前请向我们申请。这两个 key 是和集成宿主的包名和签名唯一关联的。如果包名或者签名有变化需要重新申请。
获取当前Ztoken接口(立即返回)
通过调用此接口可以获取当前zid。该值只用于获取云端安全因子的的索引,不能应用于宿主业务,且可变,同时该接口在满足传入参数条件的情况下,会进行安全环境扫描。
请注意ztoken的值是变化的,会定时更新,因此请不要保存ztoken多次使用。
请从以下两个方法中选取一个使用,其区别在于是否包含自定义参数。
String ztoken = HTH.gzfi(Context context,String account_id,int host_call_env)
String ztoken = HTH.gzfi(Context context,String account_id,int host_call_env,String parm)
参数说明
a) String account_id 为账号ID,可以为null。
b) int host_call_env 为eventId;这个值为安全环境扫描调用场景,等于0的时候不会调用安全环境扫描,若传入字符串3300~3400则会调用安全环境扫描,根据业务可自行选择传入。
c) Sring parm 是一个json字符串,可以将自定义的参数传给安全环境扫描,可以为null。
注意
禁止在宿主中保存Ztoken,Ztoken的值是可变的。
获取当前Ztoken接口(延迟回调返回)
通过调用此方法可以获取当前ztoken。该值为用于获取云端指纹和安全因子的 的索引,且可变,不能应用于宿主业务。请注意ztoken的值是变化的,会定时更新,因此请不要保存ztoken多次使用。
该方法为异步耗时方法,需传入超时时间。
void HTH.gzfi(Context context,String account_id,int host_call_env,String parm, int timeout, GzfiCallBack callback)
参数说明
a) String account_id 为账号ID,可以为null。
b) int host_call_env 为eventId;这个值为安全环境扫描调用场景,等于0的时候不会调用安全环境扫描,若传入字符串3300~3400则会调用安全环境扫描,根据业务可自行选择传入。
c) Sring parm 是一个json字符串,可以将自定义的参数传给安全环境扫描,可以为null。
d) int timeout 为超时时间。请设置大于0的值,单位为秒,若传入非法值(0或负值),则使用默认超时时间20秒。
e) GzfiCallback callback:回调接口,返回resultCode、ztoken结果方法。
GzfiCallback回调的resultCode,ztoken及errorMessage的含义和对应关系见下表:
结果码 | 结果码含义 | ztoken | 错误信息 |
---|---|---|---|
1 | 云端指纹已生成成功 | 云端颁发的,可用于云端指纹查询的ztoken | 无 |
-1 | 未初始化 | 本地生成的默认ztoken,此时云端生成可能尚未完成,可能无法查询到指纹 | 无 |
-2 | 无网络 | 本地生成的默认ztoken,此时云端生成可能尚未完成,可能无法查询到指纹 | 无 |
-3 | 网络异常 | 本地生成的默认ztoken,此时云端生成可能尚未完成,可能无法查询到指纹 | 无 |
-4 | 获取超时 | 本地生成的默认ztoken,此时云端生成可能尚未完成,可能无法查询到指纹 | 无 |
-5 | sdk内部错误 | 本地生成的默认ztoken,此时云端生成可能尚未完成,可能无法查询到指纹 | 错误信息,用于排查 |
-6 | 云服务错误 | 本地生成的默认ztoken,此时云端生成可能尚未完成,可能无法查询到指纹 | 错误信息,用于排查 |
注意
禁止在宿主中保存Ztoken,Ztoken的值是可变的。
移除GzfiCallback接口
通多调用此方法移除已注册的GzfiCallback。如果业务已经退出,不再需要已注册的callback进行回调,则调用该方法将callback从列表中移除。
以在Activity界面中使用异步gzfi方法为例,若界面销毁时,传入的GzfiCallback尚未回调,且希望该GzfiCallback不再被回调,则需要调用remove方法从队列中移除。
不移除,可能造成以下后果: 1.内存泄漏:因为callback持有Activity对象,而SDK持有该callback的引用,导致Activity无法被释放,造成内存泄漏。 2.逻辑执行异常:若callback中的代码逻辑是基于该业务退出前编写的,在业务推出后发生回调可能会导致代码执行异常,例如某一参数因为已经被回收导致空指针异常。
void removeGzfiCallback(GzfiCallback callback)
正确使用流程
请按如下步骤使用本SDK:
第一步:在用户同意隐私协议后调用同意隐私协议接口。
第二步:调用初始化方法或延迟初始化方法。
第三步:调用立即返回或延迟回调返回的获取ztoken方法。
第四步:若使用了立即返回的获取ztoken方法,则直接使用结果。若延迟回调返回的获取ztoken方法,则判断方法提供的结果码,若为1,说明云端指纹已经生成完成,可以使用获取到的ztoken查询云端指纹。若结果码不为1,可以在一定时间后尝试重新获取。
若调用了延迟回调返回的获取ztoken方法,且在回调前业务逻辑就已退出,不再希望GzfiCallback被回调,则需要调用移除方法,将GzfiCallback对象从回调列表中移除。
多进程支持
Haotian SDK支持同一宿主下多进程运行,默认是运行在主进程中。SDK 的初始化和组件配置必须在同一进程中,请注意以下几点:
a) 如果需要配置Haotian SDK运行在其它进程,请将如下所有组件都通过Android:process属性配置在同一个进程中。
<service
android:name="com.baidu.haotian.HaotianService"
android:exported="false"
android:process=":otherProcess(目标进程名)" >
<intent-filter>
<action android:name="com.baidu.action.Haotian.VIEW"/>
<category android:name="com.baidu.category.haotian"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</service>
<provider android:authorities="应用包名.haotian.ac.provider"
android:name="com.baidu.haotian.HaotianProvider"
android:exported="false"
android:process=":otherProcess(目标进程名)"
tools:replace="android:authorities"/>
b) 请不要为本SDK的provider配置android:multiprocess属性。
c) 请尽可能在APP主进程初始化本sdk,以确保sdk提供的风控相关功能的完整性。