同盾安卓 Android应用 集成步骤:
- Android SDK 新版
- Android SDK 旧版
1、点击下载最新SDK(当前版本3.0.3),并解压fraudmetrix-xxx.zip
文件。解压后文件目录为:
- fm-core-xxx
- libs
- fm-sdk-xxx.jar
- armeabi
- 注:同盾Android SDK支持
Android 2.2
(API Level 8)及以上系统。 - 同盾Android SDK默认只提供
armeabi
架构的so,如果您的应用需要支持其他的cpu架构,
或者已经存在其他架构的第三方so,则需要将对应的架构也引入工程中,否则将可能引起设备指纹获取异常、crash等未知问题。
点击下载fraudmetrix-cpuabi-xxx.zip
,该文件包含:
- armeabi-v7a
- arm64-v8a
- x86
- x86_64
- mips
2、导入设备指纹SDK。
Eclipse环境下:
- 将
libs
目录中的fm-sdk-xxx.jar
拷贝到libs
目录下; - 将
armeabi
文件夹拷贝到libs
目录下(如果您需要支持其他cpu架构,请一并拷贝) - 将
fm-core-xxx
拷贝到本地工程assets
目录下 - 在Eclipse中右键工程根目录,选择
Properties
->Java Build Path
->Libraries
,然后点击Add JARs...
选择指向jar的路径,并且在Order and Export
中勾选fm-sdk-xxx.jar
,最后点击OK,即导入成功。(最新的ADT工具会自动导入libs目录下的jar包,故该步骤可以省略)
Android Studio/IDEA环境下:
方式1:默认jni目录
- 将
libs
目录中的fm-sdk-xxx.jar
拷贝到本地工程/app/libs
子目录下; - 将
armeabi
拷贝到/app/src/main/jniLibs/
目录下(如果您需要支持其他cpu架构,请一并拷贝) - 将
fm-core-xxx
拷贝到本地工程/app/src/main/assets/
目录下
方式2:定义jni目录
- 将
libs
目录中的fm-sdk-xxx.jar
拷贝到本地工程/app/libs
子目录下; - 将
armeabi
文件夹拷贝到/app/libs
目录下(如果您需要支持其他cpu架构,请一并拷贝) - 将目录中的
fm-core-xxx
拷贝到本地工程/app/src/main/assets/
目录下 - 修改
module
下的build.gradle
,添加以下部分代码:
apply plugin: 'com.android.application'
android {
//******* 其他配置 ********//
//配置SO文件
sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}
}
dependencies {
//导入sdk
compile fileTree(include: ['*.jar'], dir: 'libs')
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.2.0'
}
3、配置AndroidManifest.xml
文件
manifest
的配置主要包括添加权限,声明合作方标识(PARTNER_CODE
)两部分,代码示例如下:
<manifest>
<uses-sdk android:minSdkVersion="8"/>
<!-- 必选权限 -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.BATTERY_STATS" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.WRITE_SETTINGS"/>
<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_COARSE_LOCATION" />
<!-- 可选权限,不声明此部分权限将放弃部分设备信息的采集,对数据分析及设备指纹的精准度有一定影响 -->
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_UPDATES"/>
<application>
<!-- 您的合作方标识 -->
<meta-data android:name="PARTNER_CODE" android:value="xxx" />
<!-- !!!注意!!! 如果您从同盾SDK 1.x 版本升级到 2.x,请将 1.x 中的FMUDID_service声明删除 !!!注意!!! -->
<!-- !!!注意!!! 否则会在某些特殊情况下导致应用崩溃,如果没有该service声明,请忽略此注释 !!!注意!!! -->
</application>
</manifest>
- 将
<meta-data android:name="PARTNER_CODE" android:value="partner_code " />
中partner_code
替换为同盾运营所给的合作方标识。
4、初始化SDK
- 1. 在应用启动的时候(比如在启动应用的
activity
的onCreate
方法中,或者在自定义的application
的onCreate
方法中,越早调用越好)调用以下方法:
- 复制代码1
FMAgent.init(context, FMAgent.ENV_SANDBOX);
FMAgent.ENV_SANDBOX
表示测试环境,FMAgent.ENV_PRODUCTION
表示生产环境
- 2. 初始化成功会在
logcat
中打印以下log: - 1
TD_JAVA: tongdun sdk load success
2TD_JAVA: tongdun sdk init success
5、获取设备指纹黑盒数据,并提交到业务服务器
在业务关键请求,如客户登录请求的onClick
中,获取设备的信息,并发送到应用服务端。示例代码如下:
loginBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//调用接口获取blackBox字段,请确保在onCreate时已经进行init,切勿在onEvent的时候才init
String blackBox = FMAgent.onEvent(MainActivity.this);
//将blackBox的值随业务请求发送到你的服务端, 服务端在调用同盾风险决策服务时需要用到这个参数;
}
});
6、混淆打包
如果开发者需要使用proguard进行混淆打包,请在proguard配置文件添加如下代码:
#TONGDUN
-dontwarn android.os.**
-dontwarn com.android.internal.**
-keep class cn.tongdun.android.**{*;}
7、FAQ
- Q: 为什么事件中心显示SDK未成功初始化?
- A: 请在
FMAgent.init()
前调用FMAgent.openLog()
过滤TD_JAVA
。并排查是否有以下情况:- so文件导入失败:第一条显示
Couldn't load so:...
。1.混用上面两种方式导入so;2.没有导入对应架构的so。 fm-core-xxx
文件未导入assets文件夹:第一行显示get fm-core-xxx failed:...
。需要注意在Android Studio 项目中assets文件夹在/app/src/main/assets
路径。- 如果确认没有以上情况请联系运营同学。
- so文件导入失败:第一条显示
- Q: 为什么获取的
black_box
字段比较长? - A: 正常情况下
black_box
长度为200-250字节,但是由于网络情况较差或者函数FMAgent.init()
和FMAgent.onEvent()
调用间隔时间较短时,black_box
会附带一些设备信息长度将增大到1500-3000字节。
- Q: 为什么事件中心部分信息为空?
- A: 可能由于从SDK初始化到获取设备数据间隔时间过短,造成设备信息获取失败。切勿初始化之后立即获取设备信息。
- Q: 为什么调用
FMAgent.onEvent()
会有卡顿? - A: SDK初始化获取数据需要一定的时间,如果初始化后直接调用
FMAgent.onEvent()
会造成卡顿感。切勿初始化之后立即获取设备信息。
- Q: 为何部分事件的真实IP是空的?
- A: 当SDK上传设备信息失败(超时或者网络被屏蔽)时,将自动转为离线模式,此种情况下同盾无法获取真实IP。
- Tips: 1.so库要加全,不然碰巧使用的机器要崩溃 2.跟后台约定好使用的是什么环境,直接跳过测试环境也是可以的
同盾安卓 Android应用 集成步骤:的更多相关文章
- 极光推送android sdk集成步骤
推送,用极光,大家都说好,哈哈. 进入正题: 1.确认android studio的 Project 根目录的主 gradle 中配置了jcenter支持.(基本上现在都已经支持了,循例说一下) , ...
- IOS JPush 集成步骤(极光远程推送解决方案,支持android和iOS两个平台)
● 什么是JPush ● 一套远程推送解决方案,支持android和iOS两个平台 ● 它能够快捷地为iOS App增加推送功能,减少集成APNs需要的工作量.开发复杂 度 ● 更多的信息,可 ...
- Android App集成支付宝
原地址:http://blog.csdn.net/wenbingoon/article/details/7933078 手机的在线支付,被认为是2012年最看好的功能,我个人认为这也是移动互联网较传统 ...
- Android 系统移植与驱动开发--第二章搭建Android环境核心步骤及心得
第二章 搭建Android 开发环境 虽然在这一章中讲的是Android底层开发环境,但是相应伴随的还有Android NDK程序来测试Linux驱动,HAL程序库.底层开发不仅需要交叉编译环境,还要 ...
- Android中集成第三方库的方法和问题
Android中集成第三方库的方法和问题 声明: 1. 本文參考了网上同学们的现有成果,在此表示感谢,參考资料在文后有链接. 2. 本文的重点在第三部分,是在开发中遇到的问题及解决的方法.第一,第二部 ...
- Android持续集成之Jenkins 部署
Android持续集成之Jenkins 部署 [TOC] 0x00安装 准备工作如下: Tomcat8.5下载地址 Jenkins下载链接 1 将下载的jenkins.war包放至tomcat下的we ...
- Android Studio集成Genymotion
Android Studio集成Genymotion比在Eclipse中集成简单多了.主要以下几个步骤: 1.官网先下载Genymotion:http://www.genymotion.com/,下载 ...
- 【OpenCV for Android】Android Studio集成OpenCV
准备工作 1.下载安装Android Studio(过程略). 2.下载Android OpenCV:https://opencv.org/releases.html,找到Android pack点击 ...
- Python 开发安卓Android及IOS应用库Kivy安装尝试
Python 开发安卓Android及IOS应用库Kivy安装尝试: 先来看看这货可以用来制作什么应用: Create a package for Windows Create a package f ...
随机推荐
- Javascript实例技巧精选(8)—计算当月剩余天数
>>点击这里下载完整html源码<< 截图如下: 利用Javascript在网页上计算当前月份的剩余天数,相应代码如下: <script language="J ...
- Role Object(角色对象)
Role Object(角色对象) 索引 意图 结构 参与者 适用性 效果 相关模式 实现 实现方式(一):Role Object 的示例实现. 意图 通过明确地附加角色对象到目标对象中,以使对象可以 ...
- poj 2184(dp变形,进一步加深01背包)
点击打开链接 题意: 给你n个物品,每个物品都有两个属性,s和f,要求选择一些物品,使sum(s)+sum(f)最大,并且sum(s)>=0&&sum(f)>=0, 根据0 ...
- c# in deep 之Lambda表达式于LINQ表达式结合后令人惊叹的简洁(2)
当Lambda表达式和LINQ一起使用时,我们会发现原本冗长的代码会变得如此简单.比如我们要打印0-10之间的奇数,让其从高到低排列并求其平方根,现在只用一行代码即可完成其集合的生成,直接上代码: v ...
- 编写高质量equals方法
什么是equals方法 指示其他某个对象是否与此对象相等,equals方法存在Object类中,我们编写的类继承Object,可以覆盖Object的equals方法来实现我们的逻辑,去判断两个对象是否 ...
- Mac OS X安装之硬盘和光盘引导总结
继上一篇虚拟机环境下的安装,这篇文档主要描述硬盘和光盘引导安装Mac OS X,并可实现多操作系统. 硬盘安装: 首先介绍下硬盘安装需要用到的软件. Java虚拟机.作为HFSExplorer的运行前 ...
- IOS学习之路五(代码实现UITableView)
先展示一下运行结果: 代码实现: 1.先创建一个空项目: 2.创建一个Controller:(TableViewController) 在AppDelegate.h中声明属性: // AppDele ...
- 我的TDD实践---SVN架设篇
我的TDD实践---SVN架设篇 “我的TDD实践”系列之SVN架设 写在前面: 我的TDD实践这几篇文章主要是围绕测试驱动开发所展开的,其中涵盖了一小部分测试理论,更多的则是关注工具的使用及环境的搭 ...
- C#多线程解决界面卡死问题
C#多线程解决界面卡死问题的完美解决方案 文章下最方有源码下载 问题描述:当我们的界面需要在程序运行中不断更新数据时, 当一个textbox的数据需要变化时, 对于这个问题可以先参考下我的另外一个文章 ...
- head first--------------------template method pattern
head first---------模板方法模式 浅谈谈模板方法模式:在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以在不改变算法结构的情况下,重新定义 ...