Skip to content

Objective-C SDK

T3 网络验证 Objective-C SDK,适用于 macOS / iOS 平台。

适用场景

  • iOS 越狱插件 / dylib 注入
  • macOS 命令行工具 / 应用
  • 配合注入工具使用

依赖说明

需要链接 FoundationSecurity 框架。

初始化

方式一:Base64 自定义编码集

objc
T3Verify *verify = [[T3Verify alloc] init];
[verify initWithLoginCode:@"登录调用码"
               noticeCode:@"公告调用码"
              versionCode:@"版本号调用码"
            heartbeatCode:@"心跳调用码"
                   appkey:@"你的APPKEY"
            base64Charset:@"你的Base64编码集"];

方式二:RSA 算法 + HEX 编码 推荐

objc
T3Verify *verify = [[T3Verify alloc] init];
NSError *initError = nil;
BOOL success = [verify initRsaWithLoginCode:@"登录调用码"
                                 noticeCode:@"公告调用码"
                                versionCode:@"版本号调用码"
                              heartbeatCode:@"心跳调用码"
                                     appkey:@"你的APPKEY"
                               rsaPublicKey:@"-----BEGIN PUBLIC KEY-----\n"
                                             "你的RSA公钥\n"
                                             "-----END PUBLIC KEY-----"
                                      error:&initError];

if (!success) {
    NSLog(@"初始化失败: %@", initError.localizedDescription);
    return 1;
}

后台配置

使用 SDK 前,请先完成 后台快速配置。您也可以在后台「SDK 下载与注入」页面一键自动配置并下载已注入配置信息的 SDK,无需手动填写。

返回值类型

类型用途主要属性
T3Result通用结果success, msg, error
T3NoticeResult公告success, notice, error
T3VersionResult版本号success, version, error
T3LoginResult登录success, endTime, statecode, error

推荐调用顺序

API 方法参考

获取机器码

objc
NSString *machineCode = [T3Verify getMachineCode];

获取程序公告 getNotice

objc
T3NoticeResult *result = [verify getNotice];
if (result.success) {
    NSLog(@"公告: %@", result.notice);
} else {
    NSLog(@"失败: %@", result.error);
}

获取最新版本号 getLatestVersion

objc
T3VersionResult *result = [verify getLatestVersion];
if (result.success) {
    NSLog(@"最新版本: %@", result.version);
} else {
    NSLog(@"失败: %@", result.error);
}

单码卡密登录 loginWithKami:imei:

objc
T3LoginResult *result = [verify loginWithKami:card imei:machineCode];
if (result.success) {
    NSLog(@"到期时间: %@", result.endTime);
    NSLog(@"状态码: %@", result.statecode);
} else {
    NSLog(@"登录失败: %@", result.error);
}

单码心跳验证 heartbeatWithKami:statecode:

objc
T3Result *result = [verify heartbeatWithKami:card statecode:loginResult.statecode];
if (result.success) {
    NSLog(@"心跳验证成功");
} else {
    NSLog(@"心跳失败: %@", result.error);
}

检查更新 checkUpdateWithVer:

objc
T3UpdateResult *result = [verify checkUpdateWithVer:@"1000"];
if (result.success) {
    if (result.hasUpdate) {
        NSLog(@"最新版本: %@", result.ver);
        NSLog(@"更新公告: %@", result.uplog);
        NSLog(@"下载地址: %@", result.upurl);
    }
}

查询卡密信息 queryKami:

objc
T3QueryResult *result = [verify queryKami:card];
if (result.success) {
    NSLog(@"到期时间: %@", result.endTime);
    NSLog(@"剩余时间: %@秒", result.available);
}

用户注册 userRegisterWithUser:pass:email:

objc
T3Result *result = [verify userRegisterWithUser:@"username" pass:@"password" email:@"email@example.com"];
if (result.success) {
    NSLog(@"注册成功");
} else {
    NSLog(@"注册失败: %@", result.error);
}

用户登录 userLoginWithUser:pass:imei:

objc
T3LoginResult *result = [verify userLoginWithUser:@"username" pass:@"password" imei:machineCode];
if (result.success) {
    NSLog(@"到期时间: %@", result.endTime);
    // result.statecode 用于用户心跳
} else {
    NSLog(@"登录失败: %@", result.error);
}

用户心跳验证 userHeartbeatWithUser:pass:statecode:

objc
T3Result *result = [verify userHeartbeatWithUser:@"username" pass:@"password" statecode:userStatecode];

用户充值 rechargeWithUser:card:

objc
T3Result *result = [verify rechargeWithUser:@"username" card:@"recharge_card"];

用户绑定QQ bindQQWithUser:pass:openid:accessToken:

objc
T3Result *result = [verify bindQQWithUser:@"username" pass:@"password" openid:@"openid" accessToken:@"access_token"];

用户QQ登录 qqLoginWithOpenid:accessToken:

objc
T3LoginResult *result = [verify qqLoginWithOpenid:@"openid" accessToken:@"access_token"];

解绑设备 unbindKamiWithKami:imei: / unbindUserWithUser:pass:imei:

objc
// 单码解绑
T3Result *result = [verify unbindKamiWithKami:card imei:machineCode];
NSLog(result.success ? @"  %@" : @"  失败: %@", result.success ? result.msg : result.error);
// 用户解绑
T3Result *result2 = [verify unbindUserWithUser:@"username" pass:@"password" imei:machineCode];
NSLog(result2.success ? @"  %@" : @"  失败: %@", result2.success ? result2.msg : result2.error);

IP 解绑 ipUnbindKamiWithKami: / ipUnbindUserWithUser:pass:

objc
// 单码 IP 解绑
T3Result *result = [verify ipUnbindKamiWithKami:card];
NSLog(result.success ? @"  %@" : @"  失败: %@", result.success ? result.msg : result.error);
// 用户 IP 解绑
T3Result *result2 = [verify ipUnbindUserWithUser:@"username" pass:@"password"];
NSLog(result2.success ? @"  %@" : @"  失败: %@", result2.success ? result2.msg : result2.error);

获取远程变量 getVariableByKami:valueid:valuename: / getVariableByUser:pass:valueid:valuename:

objc
// 通过卡密获取
T3VariableResult *result = [verify getVariableByKami:card valueid:@"变量ID" valuename:@"变量名称"];
// 通过用户获取
T3VariableResult *result2 = [verify getVariableByUser:@"username" pass:@"password" valueid:@"变量ID" valuename:@"变量名称"];
if (result.success) {
    NSLog(@"变量值: %@", result.value);
}

修改远程变量 modifyVariableByKami:valueid:valuecontent: / modifyVariableByUser:pass:valueid:valuecontent:

objc
// 通过卡密修改
T3Result *result = [verify modifyVariableByKami:card valueid:@"变量ID" valuecontent:@"新内容"];
// 通过用户修改
T3Result *result2 = [verify modifyVariableByUser:@"username" pass:@"password" valueid:@"变量ID" valuecontent:@"新内容"];

修改核心数据 modifyCoreByKami:core: / modifyCoreByUser:pass:core:

objc
// 通过卡密修改
T3Result *result = [verify modifyCoreByKami:card core:@"核心数据"];
// 通过用户修改
T3Result *result2 = [verify modifyCoreByUser:@"username" pass:@"password" core:@"核心数据"];

获取核心数据 getCoreByKami: / getCoreByUser:pass:

objc
// 通过卡密获取
T3CoreResult *core1 = [verify getCoreByKami:card];
if (core1.success) NSLog(@"核心数据: %@", core1.core);

// 通过用户获取
T3CoreResult *core2 = [verify getCoreByUser:@"username" pass:@"password"];
if (core2.success) NSLog(@"核心数据: %@", core2.core);

返回值T3CoreResult

属性类型说明
successBOOL是否成功
coreNSString核心数据内容
errorNSString错误信息

获取在线数量 getOnlineKamiCount / getOnlineUserCount

objc
// 获取在线卡密数量
T3OnlineResult *ok = [verify getOnlineKamiCount];
if (ok.success) NSLog(@"在线卡密数: %ld", (long)ok.count);

// 获取在线用户数量
T3OnlineResult *ou = [verify getOnlineUserCount];
if (ou.success) NSLog(@"在线用户数: %ld", (long)ou.count);

返回值T3OnlineResult

属性类型说明
successBOOL是否成功
countNSInteger在线数量
errorNSString错误信息

获取云文档 getCloudDocWithToken:

objc
T3CloudDocResult *result = [verify getCloudDocWithToken:@"云文档Token"];
if (result.success) {
    NSLog(@"内容: %@", result.content);
}

应用签名比对 appSignWithAutograph:

objc
T3AppSignResult *result = [verify appSignWithAutograph:@"应用签名"];
if (result.success) {
    NSLog(@"  %@", result.msg);
    NSLog(@"  后台签名: %@", result.autograph);
} else {
    NSLog(@"  失败: %@", result.error);
}

用户修改密码 changePasswordWithUser:oldpass:newpass:

objc
T3Result *result = [verify changePasswordWithUser:@"username" oldpass:@"旧密码" newpass:@"新密码"];

禁用 disableKamiWithKami: / disableUserWithUser:pass:

objc
// 禁用卡密
T3Result *result = [verify disableKamiWithKami:card];
// 禁用用户
T3Result *result2 = [verify disableUserWithUser:@"username" pass:@"password"];

用户注销 userCancelWithUser:pass:

objc
T3Result *result = [verify userCancelWithUser:@"username" pass:@"password"];

编译(命令行)

bash
# macOS
clang -framework Foundation -framework Security \
    -o t3demo main.m T3Verify.m
./t3demo

T3 网络验证 WebAPI 开发文档