请注意,在贵司的App中集成小盾提供的SDK产品时:
1.1 根据《网络安全法》《电信条例》《电信和互联网用户个人信息保护规定》等相关法律法规要求及监管实践中的标准,在贵司的最终用户首次启动App并在贵司开始采集信息之前,贵司应以交互界面或设计(如隐私政策弹窗等)向最终用户完整告知收集、使用、与第三方共享最终用户个人信息的目的、方式和范围,并征得最终用户的明示同意。
1.2 为向贵司提供业务安全和风控服务,小盾 SDK 将采集、处理、使用用户的手机终端唯一标志信息IDFA、Android ID、OAID(包含VAID、AAID)、MAC 地址、WIFI列表、无线路由器标识(BSSID、SSID)、设备类型、设备型号、系统类型、粗略位置信息、精准位置信息、应用程序列表、运行中进程信息、网络制式、设备软件版本号、传感器(光传感器、重力传感器、磁场传感器、加速度传感器、陀螺仪传感器、心率传感器)相关设备信息。为确保贵司使用相关服务的合规性,前述隐私政策应涵盖对小盾SDK提供服务并采集、处理、使用相关信息的授权,以上内容供贵司参考,具体表述可由贵司根据贵司隐私协议的整体框架和内容自行确定。
个人信息类处理规则(隐私政策):https://xiaodun.com/other/privacy/id=4
使用说明:合规使用指导
复制 AI 提示词,粘贴到 Codex、Copilot、Claude Code 等AI 编码工具,即可自动生成代码,完成 TD SDK 集成
SDK接入示例代码(sample):https://github.com/trustdecision/mobrisk-ios-sample
如果您使用离线文件的的安装方式,请参考:离线安装SDK指导
在线安装方式 CocoaPods 和 Swfit Package Manager 集成方式二选一:
File -> Add Package Dependencies...https://github.com/trustdecision/trustdevice-pro-ios.gitExact Version5.3.2Add Package-ObjC:#TARGETS -> 宿主 App TargetBuild SettingsOther Linker Flags-ObjC在调用的位置引入头文件
根据苹果公司公布的最新 App Store 隐私政策,自2024年春季开始,上架 App Store 的应用需要携带一份 App 的隐私清单文件。 从 2024 年 5 月 1 日开始,App Store Connect 不接受未在隐私清单文件中描述其使用所需原因 API 的应用程序。
请根据您的实际情况选择解决方案进行处理:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>NSPrivacyCollectedDataTypes</key>
<array>
<dict>
<key>NSPrivacyCollectedDataType</key>
<string>NSPrivacyCollectedDataTypeDeviceID</
void (*initWithOptions)(NSDictionary *options);// 异步回调获取
void (*getBlackBoxAsync)(TDGetBlackBoxAsyncBlock block);
// 同步获取
NSString (*getBlackBox)(void);请在initWithOptions方法之前调用setOnErrorCodeListener来监听错误信息
Q1: 如何解决使用Archive打包上架Testflight 或 AppStore完成后报警告:The archive did not include a dSYM for the TDCorePlugin.framework with the UUIDs 的问题?
A1: 不会对当前App上架造成任何影响,请忽略这个警告
| idfv |
| wifiIp | 是否采集 wifiIp,默认开启 | Objective C[options setValue:@(NO) forKey:@"wifiIp"];Swift options.updateValue(false, forKey: "wifiIp") | wifiIp |
| cellIp | 是否采集 cellIp,默认开启 | Objective C[options setValue:@(NO) forKey:@"cellIp"];Swift options.updateValue(false, forKey: "cellIp") | cellIp |
| vpnIp | 是否采集 vpnIp,默认开启 | Objective C[options setValue:@(NO) forKey:@"vpnIp"];Swift options.updateValue(false, forKey: "vpnIp") | vpnIp |
| wifiIpv6 | 是否采集 wifiIpv6,默认开启 | Objective C[options setValue:@(NO) forKey:@"wifiIpv6"];Swift options.updateValue(false, forKey: "wifiIpv6") | wifiIpv6 |
| deviceName | 是否采集设备名称,默认开启 | Objective C[options setValue:@(NO) forKey:@"deviceName"];Swift options.updateValue(false, forKey: "deviceName") | device_name |
| ssid | 是否采集ssid信息,默认开启 | Objective C[options setValue:@(NO) forKey:@"ssid"];Swift options.updateValue(false, forKey: "ssid") | ssid、bssid |
| collectLevel | 配置降级 blackBox 裁剪长度,默认情况为5000字符左右,配置M后大部分在2000-5000字符区间,目前仅支持这两种配置。 | Objective C[options setValue:@"M" forKey:@"collectLevel"];Swift options.updateValue("M", forKey:"collectLevel") |
| customMessage | 自定义消息,sdk支持透传和存储 | Objective C[options setValue:@"this is a customMessage" forKey:@"customMessage"];Swift options.updateValue("this is a customMessage", forKey: "customMessage") |
#import <TDMobRisk/TDMobRisk.h>
- (void)initTrustDeviceSDK {
TDMobRiskManager_t *riskManager = [TDMobRiskManager sharedManager];
NSMutableDictionary *options = [NSMutableDictionary dictionary];
/*************************** 必传 ***************************/
// 合作方(partnerCode),请填写partnerCode,不要填partnerKey,参考下方全部配置说明
[options setValue:@"请输入您的合作方" forKey:@"partner"];
// 平台注册的应用标识,参考下方全部配置说明
[options setValue:@"请输入您的appKey" forKey:@"appKey"];
// 数据中心地区参数,参考下方全部配置说明`
[options setValue:@"请输入您接入的数据中心" forKey:@"country"];
#ifdef DEBUG
// 监听错误码
riskManager->setOnErrorCodeListener(^(int errorCode,const char* errorMsg){
// 如果你想要在别的线程使用变量errorMsg,请先使用以下方式对字符串类型进行转化,保证这个值能被其他线程block正常持有
NSString *errorMsgStr = [[NSString alloc] initWithCString:errorMsg ?: "" encoding:NSUTF8StringEncoding];
NSLog(@":errorCode:%d,errorMsg:%@",errorCode,errorMsgStr);
});
#endif
riskManager->initWithOptions(options);
riskManager->getBlackBoxAsync(^(NSString* blackBox){
NSLog(@"blackBox:%@",blackBox);
});
}
// 比如注册的时候
TDMobRiskManager_t *riskManager = [TDMobRiskManager sharedManager];
NSString *blackBox = riskManager->getBlackBox();
TDMobRiskManager_t *riskManager = [TDMobRiskManager sharedManager];
NSString *sdkVersion = riskManager->getSDKVersion();
TDMobRiskManager_t *riskManager = [TDMobRiskManager sharedManager];
riskManager->setOnErrorCodeListener(^(int errorCode,const char* errorMsg){
// 如果你想要在别的线程使用变量errorMsg,请先使用以下方式对字符串类型进行转化,保证这个值能被其他线程block正常持有
NSString *errorMsgStr = [[NSString alloc] initWithCString:errorMsg ?: "" encoding:NSUTF8StringEncoding];
NSLog(@":errorCode:%d,errorMsg:%@",errorCode,errorMsgStr);
});