营销反欺诈前端集成手册-Android
一、营销反欺诈SDK集成
1.1合规指南
1.2SDK导入
1.2.1Android Studio配置工程
1、添加文件
2、配置build.gradle文件
3、需要开启权限说明
1.3注意事项
1.3.1混淆配置
1.3.2Android6.0权限说明
1.3.3最低版本号支持
二、营销反欺诈参数采集接口
2.1业务功能
2.2生成设备指纹信息
2.2.1导入相关类
2.2.2获取SDK单例对象
2.2.3设置AppID和AppKey
2.2.4生成设备指纹
2.3WebView设备指纹集成
2.4应答状态码
2.5示例程序
三、威胁感知
3.1业务说明
3.2接口说明
3.2.1基本事件统计
一、营销反欺诈SDK集成
1.1合规指南
合规三步走:
1、您需要确保App有《隐私政策》,并且在用户首次启动App时就弹出《隐私政策》取得用户同意。
2、请在《隐私政策》中增加如下参考条款:
“我们的产品集成通付盾SDK,通付盾SDK需要收集您的设备Mac地址、唯一设备识别码(IMEI/android ID/SIM 卡 IMSI 信息)、应用安装列表和地理位置信息用于识别唯一用户,检测和防止欺诈活动,提供反作弊能力。”
3、您务必确保用户同意《隐私政策》之后,再调用generateDeviceId方法,在Applicaiton.onCreate函数中调init方法用不会采集设备信息。
1.2SDK导入
解压SDK文件PayEgis_DeviceId_Android_SDK-vx.x.x.zip,得到以下内容:
文件 | 说明 |
---|---|
payegis-did-v{x.x.x}-release.aar | aar形式开发包 |
1.2.1Android studio 配置工程
1、添加文件
将设备指纹 SDK 的 aar包复制到工程的 libs 目录下,如果有老版本 SDK的包在其中,请删除。如图所示:
2、配置build.gradle文件
在module下的build.gradle文件中添加文件仓库和aar依赖的配置,如下图所示:
添加aar依赖
· 如果app只需要支持特定的ABI,比如armeabi-v7a,可以在build.gradle添加如下配置:
注:使用aar方式集成无需在应用的AndroidMenifest.xml中申明权限。 app使用compileSdkVersion=28以上版本时,涉及到https权限问题,需要在集成方mainefest中的application标签中添加
<uses-library android:name="org.apache.http.legacy" android:required="false" />
完整的build.gradle配置文件可以参考设备指纹Android studio 的DEMO。
3、需要开启权限说明
<!-- 添加以下权限(必须权限) -->
//允许读取手机状态的权限
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
//允许访问网络权限
<uses-permission android:name="android.permission.INTERNET" />
//外部存储读权限
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
//外部存储写入权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
//允许程序访问有关GSM网络信息
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
//允许程序访问Wi-Fi网络状态信息
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!-- 可选权限 -->
<!—添加以下权限,可以得到更加全面的数据 -->
//允许一个程序访问CellID或WiFi热点来获取粗略的位置
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
//允许一个程序访问精准位置(如GPS)
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
//允许程序连接配对过的蓝牙设备
<uses-permission android:name="android.permission.BLUETOOTH" />
1.3 注意事项
1.3.1 混淆配置
如果您的APP进行了代码混淆,需要在混淆规则文件中进行如下配置:
-keep class com.payegis.caesar.sdk.** {*;}
如果报出 warning,在报出 warning 的包加入类似的语句:-dontwarn 包名。
1.3.2 Android6.0权限说明
Android6.0系统会有运行时权限动态检测,SDK需要进行运行检测的权限如下:
Manifest.permission.ACCESS_COARSE_LOCATION,
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.READ_PHONE_STATE
Android系统默认会为targetSdkVersion小于23的应用授予了所申请的所有权限。所以如果您APP设置的targetSdkVersion低于23,在运行时也不会崩溃。如果您APP设置的targetSdkVersion大于或等于23,需要在初始化之前对相关权限进行检查和申请。
1、 初始化之前需要对相关权限进行检查和申请,示例代码如下,也可参考DEMO中代码。
2、在请求权限后,系统会弹出相应的Dialog提示用户授予权限,如下图所示:
3、用户选择允许或拒绝后,会回调onRequestPermissionsResult方法, 该方法类似于onActivityResult方法。
1.3.3 最低版本号支持
Android SDK最低支持的API Level为14,对应的Android系统版本为4.0。
二、营销反欺诈参数采集接口
2.1 业务功能
商户在特定的App应用程序中集成通付盾安全sdk方法。此sdk包中的方法只负责采集设备信息并将设备信息发送至通付盾营销反欺诈服务后台生成用户设备指纹。
2.2 生成设备指纹信息
2.2.1 导入相关类
import com.payegis.caesar.sdk.PayegisDidSdk;
import com.payegis.caesar.sdk.PayegisDidCallback;
import com.payegis.caesar.sdk.PayegisDidMessage;
2.2.2 获取sdk单例对象
PayegisDidSdk sdk = PayegisDidSdk.getInstance();
2.2.3 设置appId和appKey
调用init方法设置appId、appKey和secretId,如下:
// 设置appid和appkey, 注意此处使用getApplicationContext()
sdk.init(getApplicationContext(), appId, appKey, serverUrl, secretId);
init方法参数说明:
参数名称 | 类型 | 是否必须 | 说明 |
---|---|---|---|
context | Context | Y | Application 上下文 |
appId | String | Y | did服务颁发的appId |
appKey | String | Y | did服务颁发的appKey |
serverUrl | String | Y | did服务地址(https://cloud-did.tongfudun.com/did) |
secretId | String | Y | did服务颁发的secretId |
2.2.4 生成设备指纹
调用PayegisDidSdk的generateDeviceId生成设备指纹,如下所示:
//这个sessionId是由客户系统产生的,客户系统后台可以根据这个sessionId去查询did
sessionId = "android" + System.currentTimeMillis();
sdk.generateDeviceId(sessionId, new PayegisDidCallback() {
@Override
public void actionFailed(PayegisDidMessage payegisDidMessage) {
// TODO Auto-generated method stub
}
@Override
public void actionSucceed(PayegisDidMessage payegisDidMessage) {
// TODO Auto-generated method stub
}
});
参数说明:
参数名称 | 类型 | 是否必须 | 说明 |
---|---|---|---|
sessionId | String | Y | 自定义标识,用于后台查询did |
payegisDidCallback | PayegisDidCallback | Y | 回调函数 |
PayegisDidMessage说明:
参数名称 | 类型 | 说明 |
---|---|---|
status | int | 状态码(详见本章2.4) |
message | String | 状态信息描述 |
data | String | 返回数据 |
初始化成功sdk会调用 actionSucceed方法,初始化失败则调用 actionFailed方法。
2.3 webview设备指纹集成
如需在APP内以Webview形式集成设备指纹,需在webview loadURL方法之前调用设备指纹SDK如下方法。示例代码如下:
PayegisDidSdk sdk = PayegisDidSdk.getInstance();
sdk.setWebview(webview);
webview.loadUrl("your html url");
注:1、webview所引入的页面需添加设备指纹JS (详情可参见《设备指纹前端集成手册-JS》)
2、该种集成方式使用webview内页面JS的sessionId查得设备指纹与Android SDK方式所得一致。
3、为提高安全性及数据时效性,建议每次webview loadURL前均进行调用。
2.4 应答状态码
状态码 | 含义 |
---|---|
0 | 初始化成功。 |
101 | SDK正在初始化。 |
103 | 参数非法,请设置正确的TAG值 |
104 | appId或者appKey格式错误 |
105 | 手机无法连接到网络 |
106 | 设备指纹服务器返回500或404 |
107 | 未知网络错误 |
108 | 返回数据解析错误 |
109 | 网络超时 |
110 | 采集或上传发生异常 |
111 | Http身份验证错误 |
201 | SDK加载失败 |
301 | 检测内容为空 |
302 | 字符检测失败 |
-1 | 签名校验不通过 |
-301 | appid非法 |
-303 | App_type非法 |
-305 | 参数无法解密 |
-306 | SessionId为空或长度大于128 |
-317 | 服务不可用 |
2.5 示例程序
以下是获取设备指纹的示例程序,更多内容请参考设备指纹DEMO。
// 初始化设备指纹sdk
PayegisDidSdk.getInstance().init(this, Constants.APPID, Constants.APPKEY, Constants.URL, Constants.SECRETID);
//这个sessionId是由客户系统产生的,客户系统后台可以根据这个sessionId去查询did
mSessionId = "android" + System.currentTimeMillis();
PayegisDidSdk.getInstance().generateDeviceId(mSessionId, new PayegisDidCallback() {
public void actionSucceed(PayegisDidMessage paramPGSMessage) {
Toast.makeText(getApplicationContext(), "init success", Toast.LENGTH_SHORT).show();
}
@Override
public void actionFailed(PayegisDidMessage paramPGSMessage) {
int status = paramPGSMessage.getStatus();
if(status == ErrorCode.STATU_FAILED_RUNNING) {
// sdk 正在初始化,请稍后再试
Toast.makeText(getApplicationContext(), "SDK正在初始化中,请稍后再试。", Toast.LENGTH_SHORT).show();
} else if(status == ErrorCode.STATU_NETWORK_TIMEOUT) {
// 网络请求超时。
Toast.makeText(getApplicationContext(), "网络请求超时。" + paramPGSMessage.getMessage(), Toast.LENGTH_SHORT).show();
} else if(status == ErrorCode.STATU_NETWORK_ERROR) {
// 网络请求发生错误。
Toast.makeText(getApplicationContext(), "网络请求发生错误。" + paramPGSMessage.getMessage(), Toast.LENGTH_SHORT).show();
} else if(status == ErrorCode.STATU_SERVER_ERROR) {
// 服务器错误。
Toast.makeText(getApplicationContext(), "服务器错误。" + paramPGSMessage.getMessage(), Toast.LENGTH_SHORT).show();
} else if(status == ErrorCode.STATU_AUTH_FAILURE) {
// Https校验错误。
Toast.makeText(getApplicationContext(), "Https校验错误。" + paramPGSMessage.getMessage(), Toast.LENGTH_SHORT).show();
} else if(status == ErrorCode.STATU_UNKNOW_ERROR) {
// 采集或上传过程异常。
Toast.makeText(getApplicationContext(), "采集或上传过程异常。" + paramPGSMessage.getMessage(), Toast.LENGTH_SHORT).show();
} else {
// 其他错误
Toast.makeText(getApplicationContext(), "init fail, code: " + paramPGSMessage.getStatus()
+ ",message:" + paramPGSMessage.getMessage(), Toast.LENGTH_SHORT).show();
}
}
});
三、威胁感知
3.1 业务说明
营销反欺诈提供对移动端应用事件上报、环境检测和攻击检测。当开通威胁感知服务后自动生效,可在分析平台中自行查看, 客户端无需多余集成步骤。其中需要上传自定义事件可通过下面方法集成。
3.2 接口说明
3.2.1 基本事件统计
基本事件统计接口:
/**
* 统计自定义事件次数
* @param eventId
* @param params
*/
public void trackCustomEvent(String eventId, Map<String, String> params);
参数说明
参数名称 | 类型 | 是否必须 | 说明 |
---|---|---|---|
eventId | String | Y | 事件名称 |
params | HashMap | Y | 事件参数 |