更新记录
1.2.6(2024-10-26) 下载此版本
1.iOS Mobrisk 更新为4.3.0.2 版本;
1.2.5(2024-08-12) 下载此版本
1.修复iOS 缺少uni中间插件的问题
1.2.3(2024-07-23) 下载此版本
1.iOS update TDMobrisk to 4.2.7.3; 1.Android update TDMobrisk to 4.3.5.1;
查看更多平台兼容性
Android | Android CPU类型 | iOS |
---|---|---|
适用版本区间:5.0 - 14.0 | armeabi-v7a:未测试,arm64-v8a:未测试,x86:未测试 | 适用版本区间:9 - 17 |
原生插件通用使用流程:
- 购买插件,选择该插件绑定的项目。
- 在HBuilderX里找到项目,在manifest的app原生插件配置中勾选模块,如需要填写参数则参考插件作者的文档添加。
- 根据插件作者的提供的文档开发代码,在代码中引用插件,调用插件功能。
- 打包自定义基座,选择插件,得到自定义基座,然后运行时选择自定义基座,进行log输出测试。
- 开发完毕后正式云打包
付费原生插件目前不支持离线打包。
Android 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/android
iOS 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/ios
注意事项:使用HBuilderX2.7.14以下版本,如果同一插件且同一appid下购买并绑定了多个包名,提交云打包界面提示包名绑定不一致时,需要在HBuilderX项目中manifest.json->“App原生插件配置”->”云端插件“列表中删除该插件重新选择
集成要求
合规说明
请注意,在贵司的App中集成同盾提供的SDK产品时:
1.1 根据《网络安全法》《电信条例》《电信和互联网用户个人信息保护规定》等相关法律法规要求及监管实践中的标准,在贵司的最终用户首次启动App并在贵司开始采集信息之前,贵司应以交互界面或设计(如隐私政策弹窗等)向最终用户完整告知收集、使用、与第三方共享最终用户个人信息的目的、方式和范围,并征得最终用户的明示同意。
1.2 为向贵司提供业务安全和风控服务,同盾SDK将采集、处理、使用用户的手机终端唯一标志信息(IMEI/IDFA)、Android ID、IMSI、MEID、MAC 地址、SIM 卡序列号、设备序列号、设备类型、设备型号、系统类型、地理位置、登录 IP 地址等设备信息。为确保贵司使用相关服务的合规性,前述隐私政策应涵盖对同盾SDK提供服务并采集、处理、使用相关信息的授权,以下条款内容供贵司参考,具体表述可由贵司根据贵司隐私协议的整体框架和内容自行确定:
同盾SDK:为了业务安全和风控,我司使用了同盾 SDK,该 SDK 需要获取您的手机终端唯一标志信息(IMEI/IDFA)、Android ID、IMSI、MEID、MAC 地址、SIM卡序列号、设备序列号、设备类型、设备型号、系统类型、地理位置、登录 IP 地址、应用程序列表、运行中进程信息、传感器(光传感器、重力传感器、磁场传感器、加速度传感器、陀螺仪传感器)相关设备信息,用于设备欺诈风险识别。 |
同盾隐私协议:https://www.tongdun.cn/other/privacy/id=1
注意事项
确保在用户同意隐私协议后,再进行插件配置初始化,避免出现用户未同意隐私协议就进行插件初始化采集,引发合规风险。
集成步骤
集成SDK
- 在 https://ext.dcloud.net.cn/plugin?id=16592 界面下载
TrustDeviceUniPlugin
插件 - 把
TrustDecision-TrustDeviceUniPlugin
文件夹放入your_project/nativeplugins
目录 - 在 HBuilderX 点击选中
manifest.json
,选择 App原生插件配置 - 点击本地插件
[选择本地插件]
,勾选 TrustDeviceUniPlugin
Android权限申请
在工程目录下的 manifest.json ⽂件中声明以下权限
"android" : {
"permissions" : [
<!--必选权限-->
"<uses-permission android:name=\"android.permission.INTERNET\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
<!--如果您的应用是面向海外市场,在google play 上发布,请添加此项-->
"<uses-permission android:name=\"com.google.android.gms.permission.AD_ID\",
<!--以下权限是可选权限,不声明此部分权限将放弃部分设备信息的采集,对风险识别有一定影响-->
"<uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\"/>",
"<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>",
<!-- Android11及以上获取安装包列表需要该权限,采集安装包列表涉及到⻛险合规,是否需要该权限业务⽅⾃⾏选
择 -->
"<uses-permission android:name=\"android.permission.QUERY_ALL_PACKAGES\"/>"
/>"
],
...
},
SDK初始化
示例代码
methods: {
initTrustDevice() {
const TrustDeviceUniPlugin = uni.requireNativePlugin("TrustDecision-TrustDeviceUniPlugin")
var options = {
"partner": "tongdun",
"appKey": "9b8bcadf9458119604336bb9ab0b8f8a",
"appName": "demo",
"country": "cn",
}
// !!! DEBUG模式下若不设置此参数,app运行会闪退
if (process.env.NODE_ENV === "development") {
options["debug"] = true
}
TrustDeviceUniPlugin.initWithOptions(options)
},
}
必传配置
配置 key | 定义 | 说明 | 平台 | 示例代码 |
---|---|---|---|---|
partner | 合作方编码 | 同盾的合作方编码,请联系同盾运营获取 | All | options["partner"] = "请输入您的合作方编码" |
appKey | 应用标识 | 同盾生成的应用标识,和app绑定,用于校验app的有效性,请联系同盾运营获取 appkey创建需要用户提供应用包名、小写的sha256 签名。 ⚠️不同应用的包名签名不要使用相同的值 |
All | options["appKey"] = "请输入您的appKey" |
country | 国家地区参数,如cn sg us fra idna | 根据国家地区填写对应参数。 cn代表中国, sg代表新加坡, us代表北美, fra代表欧洲, idna代表印尼 |
All | options["country"] = "请输入您所在的国家地区" |
获取SDK版本号
示例代码
methods: {
getSDKVersion() {
var ret = TrustDeviceUniPlugin.getSDKVersion();
console.log("SDK version: " + ret)
}
}
设备指纹功能模块
initWithOptions选传参数
配置 key | 定义 | 说明 | 平台 | 示例代码 |
---|---|---|---|---|
debug | 是否允许app被调试 | 默认false,集成SDK后App默认具有反调试功能,开发者根据具体情况进行对应设置
开发阶段:Xcode调试请打开此配置 打包测试/上架阶段:移除此配置 选项: true:允许调试; false:不允许调试,调试会闪退 |
All | options["debug"] = true |
timeLimit | SDK超时时间配置(单位:秒) | SDK初始化采集上报后,网络请求回调的超时时间,SDK默认为15s | All | options["timeLimit"] = 5 |
location | 是否允许SDK采集地理定位信息 | 默认true,在app获得地理位置权限的情况下,SDK会采集地理定位信息
选项: true:采集地理定位信息; false:不采集地理定位信息 |
All | options["location"] = true |
collectLevel | 降级blackbox采集字段长度配置 | 需要blackbox长度较短时建议使用此配置 不设置: 降级blackbox长度为5000个字符左右(根据实际设备情况会有上浮) 选项: "M":设置后,降级blackbox长度为2000个字符左右; "L":默认值, 设置后,降级长度为5000字符左右 |
All | options["collectLevel"] = "M" |
IDFA | 是否允许SDK采集广告标识符(IDFA)信息 | 默认true,在app获得广告标识符授权后,SDK会采集广告标识符(IDFA)信息;设置false,可以通过苹果对于广告标识符的静态扫码检查 选项: true:采集IDFA; false:不采集IDFA |
iOS | options["IDFA"] = true |
deviceName | 是否采集设备名称(deviceName) | 默认true,SDK默认会采集当前设备名称,开发者根据具体情况进行对应设置 选项: true:采集设备名称; false:不采集设备名称 |
iOS | options["deviceName"] = true |
runningTasks | 是否允许获取正在运行的任务 | 默认true 选项: true:允许获取正在运行的任务; false:允许获取正在运行的任务 |
Android | options["runningTasks"] = true |
sensor | 是否采集传感器信息 | 默认true,如果需要不采集传感器相关信息,可通过该方法取消采集相关信息 选项: true:采集传感器信息; false:不采集传感器信息 |
Android | options["sensor"] = true |
readPhone | 是否采集READ_PHONE_STATE相关信息 | 默认true,采集需要READ_PHONE_STATE权限。 选项: true:采集READ_PHONE_STATE相关信息; false:不采集READ_PHONE_STATE相关信息 |
Android | options["readPhone"] = true |
installPackageList | 是否采集应用列表信息 | 默认true 选项: true:采集应用列表信息; false:不采集应用列表信息 |
Android | options["installPackageList"] = true |
wifiMac | 是否采集WIFI MAC地址, 默认不采集 | 默认false 选项: true:采集WIFI MAC地址; false:不采集WIFI MAC地址相关 |
Android | options["wifiMac"] = true |
获取blackbox
同步方法 getBlackBox
使用场景说明
优点: 会立即返回blackBox,不受网络状态的影响;
缺点: 在集成设备指纹SDK后,在之前没有获取到非降级blackBox的情况下,会返回降级blackBox,会增大后续查询接口上传的数据量,数据量大小为5000字节左右;
适用场景: 需要立即获取blackBox的场景;
示例代码
getBlackBox() {
var ret = TrustDeviceUniPlugin.getBlackBox();
console.log("getBlackBox,blackBox: "+ret)
},
异步方法 getBlackBoxAsync
使用场景说明
优点: 网络正常情况下返回非降级blackBox,会降低后续查询接口上传的数据量,数据量大小为26字节左右;
缺点: 不是立即返回,根据网络情况进行等待,一般耗时300ms左右返回;
适用场景: 需要获取最新且为非降级blackBox的场景;
示例代码
getBlackBoxAsync() {
TrustDeviceUniPlugin.getBlackBoxAsync(ret => {
console.log("getBlackBoxAsync,blackBox: "+ret)
})
},
验证码功能模块
initWithOptions选传参数
配置 key | 定义 | 说明 | 场景 | 示例代码 |
---|---|---|---|---|
language | 语言类型 | 可选项: 1-简体中文、2-繁体中文、3-英 文、4-日文、5-韩文、6-⻢来语、7-泰语、8-印尼语、9-俄 语 默认: 1-简体中文 |
客户根据需要设置语言类型。 国内支持1-5 海外支持1-9 |
options[language"] = "1" |
tapToClose | 点击空白处是否关闭验证码 | 可选项: true、false 默认: false |
开启后,点击界面空白处,会关闭验证码弹窗,关闭弹窗更加便捷 | options[tapToClose"] = true |
needSeqid | 失败回调信息中是否携带seqid | 可选项: true、false 默认:true |
开启后,失败信息中会携带seqid序列号,将seqid提供给同盾,方便排查失败原因 | options[needSeqid"] = true |
hideLoadHud | 是否跳过加载动画 | 可选项: true、false 默认:false |
开启后,弹出验证码弹窗时不会再显示加载动画,缩短验证时间 | options[hideLoadHud"] = true |
hideWebCloseButton | 是否隐藏webview的关闭按钮 | 可选项: true、false 默认:false |
需要强制完成验证码验证的场景 | options[hideWebCloseButton"] = true |
openLog | 是否打开log | 可选项: true、false 默认:false |
开启后,调试时控制台会输出更多的log信息,方便排查问题 | options[openLog"] = true |
skipCaptcha | 是否跳过同盾验证码验证 | 可选项: true、false 默认:false |
开启将不会进行验证码的验证,同时返回4000错误码,用于动态设置是否使用同盾验证码SDK验证的场景 | options[skipCaptcha"] = true |
mfaId | MFA产品 | 可选项: string 默认:nil |
如果您接入了MFA产品(未对接MFA,可忽略该说明),请将MFA流程中获取的 `mfaid`传递给验证码配置参数 | options[mfaId"] = "mfaId string" |
弹出验证码弹窗
示例代码
showCaptcha() {
this._showCaptcha({
onReady: function() {
console.log("验证码弹窗成功,等待验证!");
},
onSuccess: function(token) {
console.log("验证成功!,validateToken:", token);
},
onFailed: function(errorCode, errorMsg) {
console.log("验证失败,错误码:", errorCode, ",错误内容:", errorMsg);
}
})
},
错误码
验证码功能模块的错误码会通过 showCaptcha 函数输出
错误码 | 错误信息 | 处理方式 |
---|---|---|
1001 | 关闭了验证码窗口 | 弹出验证码后,用户手动取消了验证码,不需要处理 |
2001 | 请求参数异常,请检查参数 | 请检查appName和partnerCode参数 |
2100 | 请求参数异常,请检查参数 | 请检查传递参数 |
2101 | 请求参数异常,请检查参数 | 请求过程出错,请联系运营 |
2102 | 请求参数异常,请检查参数 | 参数缺失,请检查参数 |
2111 | 验证⻚面网络错误 | 稍后再试,或者请联系运营 |
2112 | 验证⻚面操作太频繁 | 稍后再试 |
2113 | 未知错误 | 未知错误,请联系运营 |
2114 | 关闭了验证码窗口 | 点击了验证码关闭按钮,不需要处理 |
2115 | 验证⻚面网络错误 | 网络资源加载失败 |
2116 | 验证⻚面网络错误 | 网络资源加载失败 |
2202 | 验证成功 | 验证结果成功,不需要处理 |
2301 | 未购买此服务 | 请联系运营 |
2302 | 流量已被禁用 | 请联系运营 |
2303 | 流量不足 | 请联系运营 |
2304 | 服务已过期 | 请联系运营 |
2305 | 日流量已封顶 | 请联系运营 |
2600 | 系统繁忙,请稍后再试 | 系统繁忙,请稍后再试 |
2601 | 验证失败,稍后重试 | 验证失败,请稍后重试 |
2602 | 验证失败,稍后重试 | 验证失败,请稍后重试 |
2603 | 验证失败,稍后重试 | 验证失败,请稍后重试 |
2604 | 验证失败,稍后重试 | 刷新频繁,请稍后重试 |
2605 | 验证失败,稍后重试 | 获取验证码信息失败 |
2702 | 验证失败,稍后重试 | 解析错误,请稍后重试 |
3001 | SSL证书校验失败 | 请关闭网络代理工具 |
3002 | 验证页面加载出错 | 刷新网络后重试 |
3003 | 验证⻚面加载超时 | 检查网络后重试 |
4000 | 验证逻辑跳过 | 开发者手动处理验证跳过逻辑 |
9000 | 设备指纹没有挂载 | 集成验证码需要先集成设备指纹 |
9001 | 没有网络 | 请检查网络连接 |
9002 | 请求超时 | 检查网络,稍后重试 |
9003 | 返回结果异常 | 服务端错误,返回结果异常,联系技术支持 |
9004 | 全局加载超时 | 检查网络,稍后重试 |
FAQ
Q1:引入终端SDK后,工程无法再进行 Xcode 调试,如何解决?
A1:请参考 SDK初始化 在终端SDK初始化时,加入如下参数
options["debug"] = true