iOS

集成要求

合规说明

在接入行为采集模块的App隐私政策中应添加我司隐私协议中的如下部分

4.提供识别机器行为欺诈风险服务 (仅适用于已集成设备指纹SDK行为采集模块的情形)

(1)功能描述:为了识别机器行为欺诈风险,SDK需要获取您或您最终用户的相关行为信息。

(2)必要个人信息:触摸、滚动、滑动、屏幕边缘滑动、缩放的行为信息,输入的行为信息(输入类型次数,输入速度,输入耗时),应用进入前台、进入后台的行为信息,浏览页面名称及停留时间的行为信息,设备方向的行为信息,陀螺仪传感器的行为信息,加速度计传感器的行为信息,鼠标的行为信息(web端),键盘的行为信息(web端)

(3)其他可选个人信息:无


1.集成SDK

CocoaPods集成

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

2.调用行为采集方法,获取 payload

行为采集方法用于获取用户行为数据,其接口定义如下:

typedef struct _TDBehaviorResultStruct{
    // 返回码,0代表成功
    const NSInteger code;
    // 行为采集数据
    char* const payload;
    // 失败时的错误信息
    char* const msg;
}TDBehaviorResultStruct;

/**
* TDBehavior start,开始行为采集,将采集数据写入SDK内部容器中
*/
void (*start)(void);
    
/**
* TDBehavior stop,结束行为采集,停止将采集数据写入SDK内部容器中,同时清空SDK内部容器中的数据;
*/
void (*stop)(void);
             
/**
* TDBehavior collect,返回行为采集结果,如果SDK内部容器中存在数据,则会返回成功code == 0,同时清空SDK内部容器中的数据;
* 如果SDK内部容器中不存在数据则返回code == 104 错误码
*/
TDBehaviorResultStruct (*collect)(void);

示例代码

⚠️⚠️⚠️ 确保在业务界面调用start之后,存在用户行为,例如:文字输入、点击、

滑动等,否则调用 collect 会返回104错误码,表示没有采集到行为数据;

    TDMobRiskManager_t *manager = [TDMobRiskManager sharedManager];
    // 在进入业务界面时,调用 start方法,进行行为采集,例如进入登录界面时
    manager->start();
    ...
    // 在调用业务接口时,调用 collect方法,获取行为采集数据,例如点击登录按钮
    TDBehaviorResultStruct resultStruct = manager->collect();
    NSInteger code = resultStruct.code;
    char* msg = resultStruct.msg;
    char* payload = resultStruct.payload;
    if (code == 0){
        NSLog(@"获取行为采集结果成功,payload:%s",payload);
    }else{
        NSLog(@"获取行为采集结果失败,code:%ld,msg:%s",code,msg);
    }
    ...
    // 离开业务界面时,调用 stop方法,结束行为采集,例如离开登录界面时
    manager->stop();
    let manager = TDMobRiskManager.sharedManager()
    // 在进入业务界面时,调用 start方法,进行行为采集,例如进入登录界面时
    manager?.pointee.start();
    ...
    // 在调用业务接口时,调用 collect方法,获取行为采集数据,例如点击登录按钮
    let resultStruct = manager?.pointee.collect()
    let code = resultStruct!.code
    let msg = resultStruct!.msg
    let payload = resultStruct!.payload
        
    if code == 0 {
       print("获取行为采集结果成功,payload:\(String(cString: payload!))")
     } else {
       print("获取行为采集结果失败,code:\(code),msg:\(String(cString: msg!))")
     }
    ...
    // 离开业务界面时,调用 stop方法,结束行为采集,例如离开登录界面时
    manager?.pointee.stop();

指定不需要监听的输入框

在 UITextField、UITextView 输入框 设置属性 accessibilityIdentifier 包含 "TDBehaviorExInput" ,设置后,将不会对 UITextField、UITextView 输入框的文字输入事件进行监听

		// 不采集 UITextField 输入框的文字输入
    UITextField *textField = [[UITextField alloc]init];
    textField.accessibilityIdentifier = @"otherKey,TDBehaviorExInput";
    
    // 不采集 UITextView 输入框的文字输入
    UITextView *textView = [[UITextView alloc]init];
    textView.accessibilityIdentifier = @"otherKey,TDBehaviorExInput";

3.code 返回码

错误码描述处理方案
0成功无需处理
100没有调用 initWithOptions没有调用 initWithOptions,需要调用 initWithOptions
101网络鉴权结果还没有返回向用户抛出错误:“网络原因,请检查网络后重试”,引导用户重新调用 collect 方法
102系统原因导致的鉴权接口网络错误,例如没有网络连接等向用户抛出错误:“网络原因,请检查网络后重试”,引导用户重新调用 collect 方法
103鉴权接口后端返回状态码非200检查 partner 参数是否填写正确,如果还是失败,提供错误信息result.msg给我司运营确认参数是否正确且在有效期内
104SDK内部容器中没有数据确保在业务界面调用start之后,存在用户行为,例如:文字输入、点击、滑动等!
109SDK内部容器中没有数据采集开关全部关闭,请提供错误信息result.msg给我司运营!
110SDK内部容器中没有数据确保调用collect方法前调用了start方法!