iOS

集成要求

环境要求

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

集成步骤

安装(CocoaPods)

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

引入头文件

在调用的位置引入头文件

#import <TDMobRisk/TDMobRisk.h>
import TDMobRisk

接口签名

SDK支持两种类型的接口:query和body。根据需要保护的接口传参来调用SDK的API。

方法定义

// 适用于键值对形式的入参
TDAPISignResult (*signWithQuery)(NSString *path, NSDictionary<NSString*,NSString*> *queryDictionary);
// 适用于body形式字节流或者字符串形式的入参
TDAPISignResult (*signWithBody)(NSString *path, NSString *body);

结构体定义

typedef struct _TDAPISignResult{
    // 签名结果
    char* sign;
    // 状态码
    int code;
    // 错误信息
    char* msg;
}TDAPISignResult;

最佳实践

Query方式

待保护的API形如:https://cn.apitd.net/de/v1?name=jacky&age=12

NSMutableDictionary *query = [NSMutableDictionary dictionary];
[query setValue:@"jacky" forKey:@"name"];
[query setValue:@"12" forKey:@"age"];
NSString *path = @"de/v1";
TDMobRiskManager_t *manager = [TDMobRiskManager sharedManager];
TDAPISignResult result = manager->signWithQuery(path,query);
// 加签成功
if(result.code == 0){
    // 获取签名并使用
    NSString* signString = [NSString stringWithUTF8String:result.sign];
}else{
    // 获取状态码
    int code = result.code;
    // 获取错误信息
    NSString* errMsgString = [NSString stringWithUTF8String:result.msg];
    // 继续业务逻辑,此处签名可以用空字符替代
}
var query = Dictionary<String, String>()
query.updateValue("jacky", forKey: "name")
query.updateValue("12", forKey: "age")
let path = "de/v1"
let manager = TDMobRiskManager.sharedManager()
let result = manager?.pointee.signWithQuery(path,query)
// 加签成功
if result?.code == 0 {
    // 获取签名并使用
    let signString = result?.sign
}else {
    // 获取状态码
    let code = result?.code
    // 获取错误信息
    let errMsgString = result?.msg;
    // 继续业务逻辑,此处签名可以用空字符替代
}

Body方式

待保护的API形如:https://cn.apitd.net/de/v1 并且在body内传递了大字符串: sdsdsdsds...ihhfywehnas

NSString *body = @"sdsdsdsds...ihhfywehnas";
NSString *path = @"de/v1";
TDMobRiskManager_t *manager = [TDMobRiskManager sharedManager];
TDAPISignResult result = manager->signWithBody(path,body);
// 加签成功
if(result.code == 0){
    // 获取签名并使用
    NSString* signString = [NSString stringWithUTF8String:result.sign];
}else{
    // 获取状态码
    int code = result.code;
    // 获取错误信息
    NSString* errMsgString = [NSString stringWithUTF8String:result.msg];
    // 继续业务逻辑,此处签名可以用空字符替代
}
let body = "sdsdsdsds...ihhfywehnas"
let path = "de/v1"
let manager = TDMobRiskManager.sharedManager()
let result = manager?.pointee.signWithBody(path,body)
// 加签成功
if result?.code == 0 {
    // 获取签名并使用
    let signString = result?.sign
}else {
    // 获取状态码
    let code = result?.code
    // 获取错误信息
    let errMsgString = result?.msg;
    // 继续业务逻辑,此处签名可以用空字符替代
}

状态检查

通过加签返回的结构体拿到的状态码为0,则加签成功。

状态码

错误码错误信息处理方式
0sign 正常生成返回/
2000path为空请设置path参数
22xx内部错误请联系技术支持
3001内部错误请联系技术支持
3002内部错误请联系技术支持
3003内部错误请联系技术支持
3004内部错误请联系技术支持