Appearance
Objective-C SDK
T3 网络验证 Objective-C SDK,适用于 macOS / iOS 平台。
适用场景
- iOS 越狱插件 / dylib 注入
- macOS 命令行工具 / 应用
- 配合注入工具使用
依赖说明
需要链接 Foundation 和 Security 框架。
初始化
方式一: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
| 属性 | 类型 | 说明 |
|---|---|---|
success | BOOL | 是否成功 |
core | NSString | 核心数据内容 |
error | NSString | 错误信息 |
获取在线数量 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
| 属性 | 类型 | 说明 |
|---|---|---|
success | BOOL | 是否成功 |
count | NSInteger | 在线数量 |
error | NSString | 错误信息 |
获取云文档 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