更新记录

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

原生插件通用使用流程:

  1. 购买插件,选择该插件绑定的项目。
  2. 在HBuilderX里找到项目,在manifest的app原生插件配置中勾选模块,如需要填写参数则参考插件作者的文档添加。
  3. 根据插件作者的提供的文档开发代码,在代码中引用插件,调用插件功能。
  4. 打包自定义基座,选择插件,得到自定义基座,然后运行时选择自定义基座,进行log输出测试。
  5. 开发完毕后正式云打包

付费原生插件目前不支持离线打包。
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

  1. 在 https://ext.dcloud.net.cn/plugin?id=16592 界面下载 TrustDeviceUniPlugin 插件
  2. TrustDecision-TrustDeviceUniPlugin 文件夹放入 your_project/nativeplugins 目录
  3. 在 HBuilderX 点击选中 manifest.json,选择 App原生插件配置
  4. 点击本地插件 [选择本地插件],勾选 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

隐私、权限声明

1. 本插件需要申请的系统权限列表:

Android 需要申请一下权限: <manifest> <!--必选权限--> <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" tools:ignore="QueryAllPackagesPermission" /> </manifest>

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

采用数据用于生成设备指纹

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

许可协议

作者未提供license.md

使用中有什么不明白的地方,就向插件作者提问吧~ 我要提问