Android安全SDK文档
概述
Android安全SDK又名——昊天SDK,是一个基于海量威胁情报数据的智能分析平台, 打通了移动、云、PC 的全链条安全数据,利用深度学习人工智能平台从海量的安全事件中进行关联分析,能感知出潜在的互联网威胁以及 APT 事件,并能对攻击阵营的基础设施和技术手段进行分析识别,告别被动防御局面, 为用户提供更加安全的互联网体验。
客户端集成步骤
请将本SDK提供的aar文件集成到应用程序中。
本SDK提供的aar文件中已经包含了AndroidManifest.xml,混淆配置。不需要进行额外配置,除非需要将本SDK配置到非主进程使用,配置方法见“多进程支持”一章。
aar包中包含了armeabi,armeabi-v7a,arm64-v8a,x86,x86_64的so包,如果集成的App自身兼容的abi种类少于本aar,应当在build.gradle文件中,加入ndk的abiFilter配置,选定本app支持的abi,以防止引入全部5种abi的so导致在某一特定abi上缺失其他so文件。
API 接口
设置用户同意隐私协议接口
通过调用此接口告知安全SDK用户是否同意了隐私协议。
在同意隐私协议前,所有对安全SDK的调用将不会生效,具有返回值的方法会获取到空的返回值,初始化过程会在delay结束后被中止,直到同意了隐私协议。
HTH.setAgreePolicy(Context context, boolean agree)
参数说明
boolean agree为用户是否同意了隐私协议,true为同意,false为不同意。
初始化接口
程序启动后在应用的Application类的onCreate中调用Haotian SDK初始化代码:
void HTH.init(Context context, String appkey, String seckey);
参数说明
String appkey,seckey: 用于服务器的访问校验,这两个 key 是和集成宿主的包名和签名唯一关联的。如果包名或者签名有变化需要重新分配。
开启安全服务接口
通过调用此接口,开启安全服务。
请确保在初始化后调用此接口。调用此接口时,请保证与init接口调用在同一个进程中。如果不满足这两个条件,则开启安全服务会失败,本接口将返回false。 此接口建议在初始化接口被调用后尽早调用。若有需避让应用启动时性能开销的场景,则请在需要的时机调用此接口。
如果在同意隐私协议前调用此接口,开启过程会被中止,并在调用同意隐私协议方法后自动继续。
boolean HTH.start()
返回值说明:
本接口返回值含义为:开启安全服务流程是否正确。
若未在同一进程调用初始化,或初始化传入了空的context,appkey,seckey,则本接口会返回false。否则本接口返回true。
获取当前Ztoken接口(立即返回)
通过调用此接口可以获取当前ztoken。该值为用于获取云端指纹和安全因子的的索引,且可变,不能应用于宿主业务。该接口在满足传入参数条件的情况下,会进行安全环境扫描。
请注意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)
返回值说明:
返回值为String型的ztoken。
参数说明
a) String account_id 为账号ID,可以为null。
b) int host_call_env:调用场景的eventId。请从附录列表中获取与使用场景对应的eventId。
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结果方法。
public interface GzfiCallback {
void onComplete(int resultCode, String ztoken, String errorMsg);
}
GzfiCallback回调的resultCode,ztoken及errorMessage的含义和对应关系见下表:
结果码 | 结果码含义 | ztoken | 错误信息 |
---|---|---|---|
1 | 云端指纹已生成成功 | 云端颁发的,可用于云端指纹查询的ztoken | 无 |
-1 | 未初始化 | 本地生成的默认ztoken,此时云端生成可能尚未完成,可能无法查询到指纹 | 无 |
-2 | 无网络 | 本地生成的默认ztoken,此时云端生成可能尚未完成,可能无法查询到指纹 | 无 |
-3 | 网络异常 | 本地生成的默认ztoken,此时云端生成可能尚未完成,可能无法查询到指纹 | 无 |
-4 | 获取超时 | 本地生成的默认ztoken,此时云端生成可能尚未完成,可能无法查询到指纹 | 无 |
-5 | sdk内部错误 | 本地生成的默认ztoken,此时云端生成可能尚未完成,可能无法查询到指纹 | 错误信息,用于排查 |
-6 | 云服务错误 | 本地生成的默认ztoken,此时云端生成可能尚未完成,可能无法查询到指纹 | 错误信息,用于排查 |
移除GzfiCallback接口
通多调用此方法移除已注册的GzfiCallback。如果业务已经退出,不再需要已注册的callback进行回调,则调用该方法将callback从列表中移除。
以在Activity界面中使用异步gzfi方法为例,若界面销毁时,传入的GzfiCallback尚未回调,且希望该GzfiCallback不再被回调,则需要调用remove方法从队列中移除。
不移除,可能造成以下后果: 1.内存泄漏:因为callback持有Activity对象,而SDK持有该callback的引用,导致Activity无法被释放,造成内存泄漏。 2.逻辑执行异常:若callback中的代码逻辑是基于该业务退出前编写的,在业务推出后发生回调可能会导致代码执行异常,例如某一参数因为已经被回收导致空指针异常。
void removeGzfiCallback(GzfiCallback callback)
参数说明:
GzfiCallback callback:需要从回调列表中移除的GzfiCallback对象。
正确使用流程
请按如下步骤使用本SDK:
第一步:在用户同意隐私协议后调用4.1同意隐私协议接口。
第二步:在Application的onCreate方法中调用4.2 的初始化方法。初始化方法与同意隐私协议接口不需要区分时间前后关系。
第三步:在调用初始化方法后,调用4.3 的开启安全服务方法,启动安全服务。若调用时尚未调用过同意隐私协议接口传入true,则安全服务会在同意隐私协议后再开启,此种情况不需要重新调用开启安全服务方法。
第四步:调用4.4或4.5的方法获取ztoken。两种方法区别如下:
方法 | 推荐使用场景 | 备注 |
---|---|---|
4.4:gzfi方法(立即返回) | 业务不强依赖指纹,或获取时需要实时获取结果。 | 此方法首次获取到的ztoken有更大几率是本地生成的,此时云端尚未生成指纹。 |
4.5:异步gzfi方法(延迟回调返回) | 业务强依赖指纹,在指纹未成功生成时,可以等待一段时间。 | 此方法在云端尚未生成指纹时调用,可能会有一定耗时,若云端已经生成指纹,此方法会在调用后立即回调。 |
第五步: 若使用了4.4的同步方法,则直接使用结果。若使用4.5的异步方法,则判断方法提供的结果码,若为1,说明云端指纹已经生成完成,可以使用获取到的ztoken查询云端指纹。若结果码不为1,可以在一定时间后尝试重新获取。
若调用了4.5异步的gzfi方法,且在回调前业务逻辑就已退出,不再希望GzfiCallback被回调,则需要调用4.6的移除方法,将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需要接入指纹或风控服务,请尽可能在APP主进程使用本SDK。