# 集成要求

# 合规说明

请注意,在贵司的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 (opens new window)

# 环境要求

条目 说明
兼容版本 iOS9.0+
支持架构 armv7, arm64, x86_64

# 集成步骤

# CocoaPods集成

  • 在 Podfile 文件中对应 target 中新增 pod 'TrustDecisionPro', '4.2.4.2'
  • 在 Podfile 所在文件夹中执行 pod install --repo-update 命令 (M1系列mac电脑需要执行 arch -x86_64 pod install --repo-update 命令)

# SDK目录

Pods/TrustDecisionPro 文件夹下存在如下文件:

  • TDMobRisk.framework(终端SDK主文件,静态库类型)
  • TDCorePlugin.framework (终端SDK依赖核心插件,Embed动态库类型)

# 引入头文件

在调用的位置引入头文件 Objective C

#import <TDMobRisk/TDMobRisk.h>

Swift

import TDMobRisk

# SDK初始化

注意事项

安装后首次启动时,在用户同意隐私协议后,再进行SDK初始化。 避免出现用户未同意隐私协议就进行SDK初始化采集,引发合规风险事故。

接口定义

void (*initWithOptions)(NSDictionary *options);

示例代码 Objective C

- (void)initTrustDecisionSDK:(void (^)(NSString *blackbox))callback {
  TDMobRiskManager_t *riskManager = [TDMobRiskManager sharedManager];
  NSMutableDictionary *options = [NSMutableDictionary dictionary];
  
  /*************************** 必传 ***************************/
  // 合作方编码,如tongdun,参考下面`必传配置`
  [options setValue:@"请输入您的合作方编码" forKey:@"partner"];
  // 同盾平台注册的应用标识,参考下面`必传配置`
  [options setValue:@"请输入您的appKey" forKey:@"appKey"];
  // 同盾平台注册的应用名称,参考下面`必传配置`
  [options setValue:@"请输入您的appName" forKey:@"appName"];
  // 国家地区参数,参考下面`必传配置`
  [options setValue:@"请输入您所在的国家地区" forKey:@"country"];

  /*************************** 选传 ***************************/
#ifdef DEBUG
  // !!! DEBUG模式下若不设置此参数,app运行会闪退
  [options setValue:@"allowed" forKey:@"allowed"];
#endif

  [options setValue:^(NSString *blackbox) {
    // 此处回调在子线程
    // 网络正常的情况下,会在200-300ms内返回结果。
    // 网络异常的情况下,会在超时时间timeLimit(默认最长15s)后返回。
    // 请在下方添加您对blackbox的处理逻辑
    if (callback) {
        callback(blackbox);
    }
  } forKey:@"callback"];
  riskManager->initWithOptions(options);
}

Swift

func initTrustDecisionSDK(callback: @escaping (_ blackBox:String) -> Void) {
  let riskManager = TDMobRiskManager.sharedManager()
  var options = [String : NSObject]()
  /*************************** 必传 ***************************/
  // 合作方编码,如tongdun,参考下面`必传配置`
  options.updateValue("请输入您的合作方编码" as NSObject, forKey: "partner")
  // 同盾平台注册的应用标识,参考下面`必传配置`
  options.updateValue("请输入您的appKey" as NSObject, forKey: "appKey")
  // 同盾平台注册的应用名称,参考下面`必传配置`
  options.updateValue("请输入您的appName" as NSObject, forKey: "appName")
  // 国家地区参数,参考下面`必传配置`
  options.updateValue("请输入您所在的国家地区" as NSObject, forKey: "country")

  /*************************** 选传 ***************************/
#if DEBUG
  // !!! DEBUG模式下若不设置此参数,app运行会闪退
  options.updateValue("allowed" as NSObject, forKey: "allowed")
#endif

  let tdcallback: (String)-> Void = {blackBox in
   // 此处回调在子线程
   // 网络正常的情况下,会在200-300ms内返回结果。
   // 网络异常的情况下,会在超时时间timeLimit(默认最长15s)后返回。
   // 请在下方添加您对blackbox的处理逻辑
   callback(blackBox)
  }
  options["callback"] = unsafeBitCast(tdcallback as @convention(block) (String) -> Void, to: AnyObject.self) as? NSObject
  riskManager?.pointee.initWithOptions(options)
}

必传配置

配置 key 定义 说明 场景 示例代码
partner 合作方编码 同盾的合作方编码,请联系同盾运营获取 所有场景 Objective C [options setValue:@"请输入您的合作方编码" forKey:@"partner"]; Swift options.updateValue("请输入您的合作方编码" as NSObject, forKey: "partner")
appKey 应用标识 同盾生成的应用标识,和app绑定,用于校验app的有效性,请联系同盾运营获取 appkey创建需要用户提供应用包名、小写的sha256 签名。 ⚠️不同应用的包名签名不要使用相同的值 所有场景 Objective C [options setValue:@"请输入您的appKey" forKey:@"appKey"]; Swift options.updateValue("请输入您的appKey" as NSObject, forKey: "appKey")
appName 应用名称 同盾平台注册的应用名称,请联系同盾运营获取 所有场景 Objective C [options setValue:@"请输入您的appName" forKey:@"appName"]; Swift options.updateValue("请输入您的appName" as NSObject, forKey: "appName")
country 国家地区 国家地区参数,如cn sg us fra 根据国家地区填写对应参数。 cn代表中国, sg代表新加坡, us代表北美, fra代表欧洲 Objective C [options setValue:@"请输入您所在的国家地区" forKey:@"country"]; Swift options.updateValue("请输入您所在的国家地区" as NSObject, forKey: "country")

# 获取SDK版本号

示例代码 Objective C

// 获取SDK版本号
TDMobRiskManager_t *riskManager = [TDMobRiskManager sharedManager];
NSString *sdkVersion = riskManager->getSDKVersion();

Swift

// 获取SDK版本号
let riskManager = TDMobRiskManager.sharedManager()
let sdkVersion = riskManager?.pointee.getSDKVersion()

# 设备指纹功能模块

# initWithOptions选传参数

配置 key 定义 说明 场景 示例代码
allowed SDK反调试配置 集成SDK后App默认具有反调试功能,开发者根据具体情况进行对应设置 **开发阶段:**Xcode调试请打开此配置 **打包测试/上架阶段:**移除此配置 Objective C [options setValue:@"allowed" forKey:@"allowed"]; Swift options.updateValue("allowed" as NSObject, forKey: "allowed")
timeLimit SDK超时时间配置(单位:秒) SDK初始化采集上报后,网络请求回调的超时时间,SDK默认为15s 开发者需要控制SDK上报以后的网络请求超时时间,请设置此配置 Objective C [options setValue:@"5" forKey:@"timeLimit"]; Swift options.updateValue("5" as NSObject, forKey: "timeLimit")
noLocation SDK地理定位信息采集配置 SDK本身不主动进行定位授权,完全依赖App的权限 禁止SDK获取定位信息,请设置此配置 Objective C [options setValue:@"noLocation" forKey:@"noLocation"]; Swift options.updateValue("noLocation" as NSObject, forKey: "noLocation")
noIDFA SDK广告标识符(IDFA)采集配置 SDK本身不主动进行广告标识符授权,完全依赖App的权限设置此配置后,可以通过苹果对于广告标识符的静态扫码检查 禁止SDK获取和执行广告标识符(IDFA)相关代码,请设置此配置 Objective C [options setValue:@"noIDFA" forKey:@"noIDFA"]; Swift options.updateValue("noIDFA" as NSObject, forKey: "noIDFA")
noDeviceName 设备名称(deviceName)采集配置 集成SDK后,SDK默认会采集当前设备名称,开发者根据具体情况进行对应设置 禁止SDK采集设备名称,请设置此配置 Objective C [options setValue:@"noDeviceName" forKey:@"noDeviceName"]; Swift options.updateValue("noDeviceName" as NSObject, forKey: "noDeviceName")
callback SDK异步回调配置 SDK初始化采集上报后,根据网络请求结果返回blackbox。 请求成功: 返回非降级blackbox 请求失败: 返回降级blackbox 尽可能获取到非降级blackbox Objective C [options setValue:^(NSString *blackbox) {} forKey:@"callback"]; Swift let callback: (String)-> Void = {blackBox in } options["callback"] = unsafeBitCast(callback as @convention(block) (String) -> Void, to: AnyObject.self) as? NSObject
collectLevel 降级blackbox采集字段长度配置 降级的blackbox会较长。通过此配置可控制降级的blackbox长度 需要blackbox长度较短时建议使用此配置 不设置: 降级blackbox长度为5000个字符左右(根据实际设备情况会有上浮) **设置:**降级blackbox长度为2000个字符左右 Objective C [options setValue:@"M" forKey:@"collectLevel"]; Swift options.updateValue("M" as NSObject, forKey: "collectLevel")

# 获取blackbox

注意事项

  • 请在 initWithOptionsgetBlackBox,否则会引起SDK异常
  • 建议开发者不要在App内对 getBlackBox返回的结果进行缓存,获取blackbox请依赖此函数

示例代码 Objective C

// 同步获取blackbox,未进行SDK初始化禁止调用,否则会引起SDK异常。
TDMobRiskManager_t *riskManager = [TDMobRiskManager sharedManager];
NSString *blackbox = riskManager->getBlackBox();

Swift

// 同步获取blackbox,未进行SDK初始化禁止调用,否则会引起SDK异常。
let riskManager = TDMobRiskManager.sharedManager()
let blackBox = riskManager?.pointee.getBlackBox()

# FAQ

Q1:引入终端SDK后,工程无法再进行 Xcode 调试,如何解决?

A1:请参考 SDK初始化 (opens new window) 在终端SDK初始化时,加入如下参数 Objective C

[options setValue:@"allowed" forKey:@"allowed"];

Swift

options.updateValue("allowed" as NSObject, forKey: "allowed")
: 2023/06/07 16:19:48