游戏盾SDK接入指南:从零开始的完整集成教程(2025最新版)

4月 07, 2025131 mins read

🔥2025最新版游戏盾SDK接入全攻略!从Unity、Uni-App到原生Android/iOS,手把手教你实现安全联机+防DDoS攻击!💻附易语言/C#代码示例、跨平台避坑指南(含真机调试玄学解决方案),5分钟完成密钥配置+端口转发,解决网络不通/版本冲突/编译报错等99%开发者痛点!

887ee453-6fb8-4d17-aefc-dc882c32144a_conew1
CDN5游戏盾由“安全接入客户端组件(sdk、加壳等等)”、“安全接入服务器机房群集”、“单实例控制面板”三大核心子系统构成。  用户通过集成安全接入组件将由原来的客户端程序直接连接后端应用服务的模式改成客户端通过本地的 127 开头的 IP 地址连接本地的安全接入组件,安全接入组件会动态选择延迟最小的链路将数据转发到安全接入机房服务器群集,安全接入机房服务器群集再将数据转发到用户的后端应用服务器。  

🔥核心特点🔥  

  • CDN5游戏盾是新一代智能分布式云接入系统,接入节点采用多机房集群部署模式,在某个机房出现故障或攻击导致链路拥塞的情况下接入通道会自动调整到其它流畅节点。
  • 用户连接状态在各机房之间实时同步,节点切换过程中用户无感知,并且保持用户TCP、UDP 连接不中断。
  • 在多机房、多线路、高防护的基础上部署,DDOS 总体防护能力超过 2TB,可以有效杜绝大流量 DDOS 攻击。对所有的连接都会通过加密验证,检查连接的真实性,过滤掉所有不真实的连接,实现大规模多样化 CC 攻击无误封,并有效避免用户服务器的 IP 地址外泄,有效杜绝服务器被入侵。
  • 客户端组件同时开启多路径,并且选择最优路径进行数据转发,当选择出来的最优路径出现波动会自动重新选择其它新的最优路径。无论您的服务器在哪里,都可以通过“CDN5”平台接入。
  • 大量减少接入节点服务的投入,降低服务器及运维成本。
  • 提供访问统计日志及分析,如:用户的分布区域、使用时段、历史在线数等,有效帮助客户实现精准运营。
  • 提供多种形式的客户端组件供用户集成,打包(加壳)集成、引用(调用)集成、SDK(开发)集成等多种方式。
  • 支持的客户端:Windows、Linux、Unix、IOS、Android。
  • 支持的服务器端:所有基于 TCP、UDP 的服务器端应用。
  • 由专业技术团队提供 365 天 7x24 小时的实时响应,及时帮助用户解决订购、配置、集成、运行上碰到的一切问题 。 

sdk说明

Windows 以动态库 dll 的形式提供接口。

IOS 以静态库.a 或动态库的形式提供接口。

Android 以 aar 或 jar 包的形式提供接口,同时也支持 C 或 C++直接调用.so 的动态库;支持 U3D、Cocos 、uniapp 等开发。

集成 sdk 非常方便,只需要调用接口中 “start”的函数就可以(有些系统为 clinkStart)。函数的原型如:int start(string key)    
key:为 sdk 密钥,可从“单实例控制面板”中获取。    
   
⚠️注意:调用时如果 key 不完整或错误,程序会崩溃。如果密钥被删除了,使用该密钥的应用将无法通过游戏盾的验证,所以在密钥删除后必需把原来应用中配置的密钥也要进行更换。同一把密钥在每次点击获取时都会和上次的内容不一样,但上次获取的密钥也是可用的,虽然它们的密文内容不一样但其实是同一把密钥,因为我们采用了动态加密,所以每次加密后的密文内容都不一样。    

集成后需要到“单实例控制面板”根据你的应用,配置相应的转发规则。将客户端程序原来直接连接服务器的 IP 和端口改成转发规则中对应的以 127 开头的 IP 及端口    

文件目录说明:“游戏盾 sdk\lib”下是各操作系统对应的 sdk 文件,“游戏盾 sdk\demo”、 “游戏盾 sdk\demo 高级功能”是我们写的各操作系统下不同开发语言 sdk 集成示例代码。如有任何的疑问请和我们的客服联系。  

💻windows版本集成

windows版本文件说明📂:    
“游戏盾 sdk\lib\windows\x86\clinkAPI.dll”为 32 位的 dll    
“游戏盾 sdk\lib\windows\x64\clinkAPI.dll”为 64 位的 dll    
“游戏盾sdk\lib\windows\ClinkAPI.h”为接口头文件  

windows版本接口说明📌:    
函数的原型:extern "C" CLINKAPI_API int clinkStart(const char * key) 。   
功能:启动客户端安全接入组件(只需要调用一次,重复调用也不会出错,调用时内部会判断是否已启动过,如果已启动过直接返回第一次调用的结果。调用时因客户端网络不通返回了 0,等网络正常后我们会自动重连,这时再调用会返回 150,这时如果没有调用业务也可正常运行)  。  
参数:Sdk配置密钥。key 不完整或错误,程序会崩溃。  

👉​​返回:150  表示成功,其它的值均为失败  

  • ✔️ ​​150:成功
  • ​​0:网络不通
  • ​​1:已外部停止(如调用了停止函数,该函数一般不需要调用)
  • ​​2:已内部停止(如运行过程中密钥被删除等)
  • ​​170:实例到期或密钥不存在

💡最好是在进程启动后先调用该函数,这样后面的所有连接都可以通过安全接入组件进行数据转发。 注意:用 c++时 Release 模式下编译才能正常调用本 dll 中的函数,在Debug模式下编译出来的 exe 或在开发工具中以调试运行将报错。   

🚀示例代码:

 #include<iostream> #include<string>
comment(lib, "../../../../../lib/windows/x86/clinkAPI.lib") #include "../../../../../lib/windows/clinkAPI.h" //包含 api 头文件using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
/*如果编译报字符串太长,可以把下面的代码分多行写如: char* key = "AsqaO5ZoKFpJphMAAJpHsItVh6E/J67eQ" "lX602sE1W3amXPuWYxvXrV6+bbv2p4...";*/
char* key = "Ai9oW..."; //定义sdk密钥。可从单实例控制面板的sdk密钥列表中获取。以实际为准int ret = clinkStart(key); //启动(只需要调用一次,重复调用也不会出错)
if (ret == 150)
{
}
else
{
}
cout << "盾启动成功。ret=" <<ret<< endl;
cout << "盾启动失败。ret=" << ret << endl;
/*将客户端原来连接到服务器端的IP改成“实例转发规则”配置的那个以127开头的IP(例如转发规则里配置的是127.0.10.21:600转到202.23.56.9:600,原先的代码里连接的是202.23.56.9:600,现在要改成连接127.0.10.21:600),
集成完成。
具体的可参考下面两行伪代码connect("202.23.56.9",600) 未集成盾前的连接connect("127.0.10.21", 600) 集成盾后的连接
*/
//如有任何的疑问请和我们的客服联系system("pause");
return 0;
}

📱 IOS静态库版本集成

如果你的项目用不了静态库版本,可选择用动态库版本

IOS静态库版本文件说明📂:  

✅“游戏盾 sdk\lib\IOS\IOS 静态库版本\真机\libclinkAPI.a”为真机运行库    
“游戏盾 sdk\lib\IOS\IOS 静态库版本\真机 Bitcode\libclinkAPI.a”为真机 Bitcode 运行库    
“游戏盾 sdk\lib\IOS 静态库版本\模拟器和真机\libclinkAPI_x86_arm.a”为真机和模拟器运行库    
“游戏盾 sdk\lib\IOS 静态库版本\模拟器和真机 Bitcode\libclinkAPI_x86_arm.a”为真机和模拟器 Bitcode 运行库    
“游戏盾​ sdk\lib\IOS 静态库版本\ClinkAPI.hpp”为接口头文件  

IOS静态库版本接口说明📌:  

🌟接口类:  
class ClinkAPI  
{  
public:  
int start(const char * key);  
};  
函数的原型:int start(const char * key)  。
功能:启动客户端安全接入组件(只需要调用一次,重复调用也不会出错,调用时内部会判断是否已启动过,如果已启动过直接返回第一次调用的结果。调用时因客户端网络不通返回了 0,等网络正常后我们会自动重连,这时再调用会返回 150,这时如果没有调用业务也可正常运行)  。
参数:Sdk配置密钥。key 不完整或错误,程序会崩溃。  

👉​​返回:150  表示成功,其它的值均为失败  

  • ✔️ ​​150:成功
  • ​​0:网络不通
  • ​​1:已外部停止(如调用了停止函数,该函数一般不需要调用)
  • ​​2:已内部停止(如运行过程中密钥被删除等)
  • ​​170:实例到期或密钥不存在

💡最好是在进程启动后先调用该函数,这样后面的所有连接都可以通过安全接入组件进行数据转发。  

📚如何将接口引入到项目中:    
1.用 Xcode 将你的项目打开。    
2.把 libclinkAPI_x86_arm.a(根据自己具体情况选对应版本)的文件直接拖入你的项目中。    
3.把 ClinkAPI.hpp 文件拷贝到项目的目录下。    
4.把要调用接口的.m 文件改成扩展名的.mm(采用动态库版的不需要改),否则无法通过编译,因为如果文件是.m 编译器会以 c 的形式调用而不是 c++形式。    
⚠️注意: 如果在真机运行项目把 Enable Bitcode 设成 yes(默认就为 yes),用的库又是非 Bitcode 版本的运行会报错, 解决办法有两个,可以将项目 Enable Bitcode 设成 no 或用Bitcode 版本的库。有些高版本的 xcode 在模拟器运行报错,是因为 cpu 是 M1 的,需要在 Build Settings->Architectures-> Excluded Architectures 中加上 arm64 (手动输入)。  

🚀示例代码:

#import "ViewController.h"
#include "ClinkAPI.hpp"//包含api头文件@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad { [super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
UITextField *txtMsg = [[UITextField alloc] init]; [self.view addSubview:txtMsg];
txtMsg.frame = CGRectMake(50, 60, 170, 40); txtMsg.layer.borderWidth = 1.0; // 边框的宽度
txtMsg.layer.borderColor = [UIColor blueColor].CGColor; // 边框的颜色
txtMsg.placeholder = @"返回的状态";
char* key="Ai9oW..."; //定义sdk密钥。可从单实例控制面板的sdk密钥列表中获取。以实际为准ClinkAPI api;//定义api对象
int ret= api.start(key); //启动(只需要调用一次,重复调用也不会出错) txtMsg.text=[NSString stringWithFormat:@"盾启动返回:%d",ret];
/*将客户端原来连接到服务器端的IP改成“实例转发规则”配置的那个以127开头的IP(例如转发规则里配置的是127.0.0.1:7000转到202.23.56.9:7000,原先的代码里连接的是202.23.56.9:7000,现在要改成连接127.0.0.1:7000),
集成完成。
具体的可参考下面两行伪代码connect("202.23.56.9",7000) 未集成盾前的连接connect("127.0.0.1", 7000) 集成盾后的连接
*/
//如有任何的疑问请和CDN5客服联系
}
- (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end

📱IOS动态库版本集成

IOS动态库版本文件说明📂:  

✅“游戏盾 sdk\lib\IOS\IOS 动态库版本\真机\clinkFrwAPI.framework”为真机运行库    
“游戏盾 sdk\lib\IOS\IOS 动态库版本\真机Bitcode\clinkFrwAPI.framework”为真机Bitcode 运行库    
“游戏盾 sdklib\IOS\IOS 动态库版本\模拟器\clinkFrwAPI.framework”为模拟器运行库    
“游戏盾 sdk\lib\IOS\IOS 动态库版本\ClinkFrwAPI.hpp”为接口头文件  

IOS动态库版本接口说明📌:  

函数的原型:extern "C" int clinkStart(const char * key)。    
功能:启动客户端安全接入组件(只需要调用一次,重复调用也不会出错,调用时内部会判断是否已启动过,如果已启动过直接返回第一次调用的结果。调用时因客户端网络不通返回了 0,等网络正常后我们会自动重连,这时再调用会返回 150,这时如果没有调用业务也可正常运行) 。   
参数:Sdk配置密钥。key 不完整或错误,程序会崩溃。  

👉​​返回:150  表示成功,其它的值均为失败  

  • ✔️ ​​150:成功
  • ​​0:网络不通
  • ​​1:已外部停止(如调用了停止函数,该函数一般不需要调用)
  • ​​2:已内部停止(如运行过程中密钥被删除等)
  • ​​170:实例到期或密钥不存在

💡最好是在进程启动后先调用该函数,这样后面的所有连接都可以通过安全接入组件进行数据转发。​  

📚如何将接口引入到项目中(Xcode Version 11.5     为例):    
1.将 clinkFrwAPI.framework 拷贝到你的工程路径下    
2.进入TARGETS >你的项目名称  > General > Frameworks, Libraries, and Embedded Content 菜单, 点击 +,再点击Add Other…,将刚才拷贝到工程下的 SDK 文件添加进去    
3.添加进去后要将 Embed 属性设置为 Embed & Sign,以使得 SDK 动态库和应用签名保持一致。    
4.把 ClinkFrwAPI.hpp 文件拷贝到项目的目录下    
📚如何将接口引入到项目中(Xcode Version 8.3.3     为例):    
1.将 clinkFrwAPI.framework 拷贝到你的工程路径下。    
2.进入TARGETS > 你的项目名称 > General > Embedded Binaries 菜单,点击 +,再点击Add Other…,将刚才拷贝到工程下的 SDK 文件添加进去。    
3.把 ClinkFrwAPI.hpp 文件拷贝到项目的目录下。  

⚠️注意

如果在真机运行项目把 Enable Bitcode 设成 yes(默认就为 yes),用的库又是非 Bitcode 版本的运行会报错, 解决办法有两个:可以将项目 Enable Bitcode 设成 no 或用Bitcode 版本的库。    
有些高版本的 xcode 在模拟器运行报错,是因为 cpu 是 M1 的,需要在 Build Settings->Architectures-> Excluded Architectures 中加上 arm64 (手动输入)    
💔当编译时遇到如下这样的错误💔    
Undefined symbols for architecture arm64:  并且后面还有 declaration possibly missing extern "C"    
需要用 sdk\lib\IOS\IOS 动态库版本\含有 externC 头\ClinkFrwAPI.hpp ,覆盖项目下的 clinkFrwAPI.framework\Headers\ClinkFrwAPI.hpp 和项目目录下的ClinkFrwAPI.hpp  文件,共两处。这个问题在cocos开发的项目集成时遇到过。  

🚀示例代码:

#import "ViewController.h"
#include "ClinkFrwAPI.hpp"//包含api头文件@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad { [super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
UITextField *txtMsg = [[UITextField alloc] init]; [self.view addSubview:txtMsg];
txtMsg.frame = CGRectMake(50, 60, 170, 40); txtMsg.layer.borderWidth = 1.0; // 边框的宽度
txtMsg.layer.borderColor = [UIColor blueColor].CGColor; // 边框的颜色
txtMsg.placeholder = @"返回的状态";
char* key="Ai9oW..."; //定义sdk密钥。可从单实例控制面板的sdk密钥列表中获取。以实际为准int ret= clinkStart(key); //启动(只需要调用一次,重复调用也不会出错) txtMsg.text=[NSString stringWithFormat:@"盾启动返回:%d",ret];
/*将客户端原来连接到服务器端的IP改成“实例转发规则”配置的那个以127开头的IP(例如转发规则里配置的是127.0.0.1:7000转到202.23.56.9:7000,原先的代码里连接的是202.23.56.9:7000,现在要改成连接127.0.0.1:7000),
集成完成。
具体的可参考下面两行伪代码connect("202.23.56.9",7000) 未集成盾前的连接connect("127.0.0.1", 7000) 集成盾后的连接
*/
//如有任何的疑问请和CDN5客服联系
}
- (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end

📱IOS Swift 动态库版本集成

IOSSwift动态库版本文件说明📂:  

✅“游戏盾 sdk\lib\IOS\IOS 动态库版本\真机\clinkFrwAPI.framework”为真机运行库    
✅“游戏盾 sdk\lib\IOS\IOS 动态库版本\真机Bitcode\clinkFrwAPI.framework”为真机Bitcode 运行库    
✅“游戏盾 sdklib\IOS\IOS 动态库版本\模拟器\clinkFrwAPI.framework”为模拟器运行库    
✅“游戏盾 sdk\lib\IOS\IOS 动态库版本\ClinkFrwAPI.hpp”为接口头文件    
✅“游戏盾 sdk\lib\IOS\IOS 动态库版本\ClinkAPISwift-Bridging-Header.h”为 Swift 桥接文件  

IOS Swift动态库版本接口说明📌:  

函数的原型:extern "C" int clinkStart(const char * key)。    
功能:启动客户端安全接入组件(只需要调用一次,重复调用也不会出错,调用时内部会判断是否已启动过,如果已启动过直接返回第一次调用的结果。调用时因客户端网络不通返回了 0,等网络正常后我们会自动重连,这时再调用会返回 150,这时如果没有调用业务也可正常运行) 。   
参数:Sdk配置密钥。key 不完整或错误,程序会崩溃。  

👉​​返回:150  表示成功,其它的值均为失败  

  • ✔️ ​​150:成功
  • ​​0:网络不通
  • ​​1:已外部停止(如调用了停止函数,该函数一般不需要调用)
  • ​​2:已内部停止(如运行过程中密钥被删除等)
  • ​​170:实例到期或密钥不存在

💡最好是在进程启动后先调用该函数,这样后面的所有连接都可以通过安全接入组件进行数据转发。​  

📚如何将接口引入到项目中(Xcode Version 14.3  为例):    
1.将 clinkFrwAPI.framework 拷贝到你的工程路径下。    
2.进入TARGETS >你的项目名称> General > Frameworks, Libraries, and Embedded Content 菜单, 点击 +,再点击Add Other…,将刚才拷贝到工程下的 SDK 文件添加进去。    
3.添加进去后要将Embed 属性设置为Embed & Sign,以使得 SDK 动态库和应用签名保持一致。    
4.把 ClinkFrwAPI.hpp 文件拷贝到项目的目录下。    
5.把桥接文件 ClinkAPISwift-Bridging-Header.h 拷贝到项目的目录下。    
6.进入TARGETS >你的项目名称>BuildSettings >Swift Compiler – General 在 Objective-C Bridging Header 里把 ${SRCROOT}/你的项目名/ClinkAPISwift-Bridging-Header.h 设置进去。  

CDN5游戏盾SDK接入指南
⚠️注意

如果在真机运行项目把 Enable Bitcode 设成 yes(默认就为 yes),用的库又是非 Bitcode 版本的运行会报错, 解决办法有两个:可以将项目 Enable Bitcode 设成 no 或用Bitcode 版本的库。    
有些高版本的 xcode 在模拟器运行报错,是因为 cpu 是 M1 的,需要在 Build Settings->Architectures-> Excluded Architectures 中加上 arm64 (手动输入)    

🚀示例代码:

import UIKit
class ViewController: UIViewController { override func viewDidLoad() {
super.viewDidLoad()
let txtMsg = UITextField() view.addSubview(txtMsg)
txtMsg.frame = CGRectMake(50, 60, 170, 40) txtMsg.layer.borderWidth = 1.0 // 边框的宽度txtMsg.layer.borderColor = UIColor.blue.cgColor // 边框的颜色txtMsg.placeholder = "返回的状态"
let key = "Ai9oW..." //定义sdk密钥。可从单实例控制面板的sdk密钥列表中获取。以实际为准let ret = clinkStart(key) //启动(只需要调用一次,重复调用也不会出错)
txtMsg.text = "盾启动返回:" + "\(ret)"
/*将客户端原来连接到服务器端的IP改成“实例转发规则”配置的那个以127开头的IP(例如转发规则里配置的是127.0.0.1:7000转到202.23.56.9:7000,原先的代码里连接的是202.23.56.9:7000,现在要改成连接127.0.0.1:7000),
集成完成。
具体的可参考下面两行伪代码connect("202.23.56.9",7000) 未集成盾前的连接connect("127.0.0.1", 7000) 集成盾后的连接
*/
//如有任何的疑问请和CDN5客服联系
}
}

🤖Android版本集成【AndroidStudio】

Android版本文件说明📂:  

✅“游戏盾 sdk\lib\android\clinkapi-release.aar”为包含真机和模拟器运行库  

Android版本接口说明📌:  

接口类:com.dun.clinkapi.Api    
函数的原型:int start(String key)    
功能:启动客户端安全接入组件(只需要调用一次,重复调用也不会出错,调用时内部会判断是否已启动过,如果已启动过直接返回第一次调用的结果。调用时因客户端网络不通返回了 0,等网络正常后我们会自动重连,这时再调用会返回 150,这时如果没有调用业务也可正常运行) 。   
参数:Sdk配置密钥。key 不完整或错误,程序会崩溃。  

👉​​返回:150  表示成功,其它的值均为失败  

  • ✔️ ​​150:成功
  • ​​0:网络不通
  • ​​1:已外部停止(如调用了停止函数,该函数一般不需要调用)
  • ​​2:已内部停止(如运行过程中密钥被删除等)
  • ​​170:实例到期或密钥不存在

💡最好是在进程启动后先调用该函数,这样后面的所有连接都可以通过安全接入组件进行数据转发。​  

📚如何将接口引入到项目中:    
1. 用 AndroidStudio 将你的项目打开。    
2. 把clinkapi-release.aar拷贝到模块libs文件夹下。    
3. 在模块的build.gradle中的dependencies节点下增加sdk的引用:implementation files('libs/clinkapi-release.aar')    
游戏盾SDK接入指南:从零开始的完整集成教程(2025最新版)
打开 AndroidManifest.xml 增加网络访问权限    
<uses-permission android:name="android.permission.INTERNET"/>anzuo2sfxe23
🚀示例代码:

package com.dun.clinkapicall;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity { com.dun.clinkapi.Api api = null;//定义api对象@Override
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);
TextView tvState = (TextView) findViewById(R.id.tvState);
String key = "Ai9oW..."; //定义sdk密钥。可从单实例控制面板的sdk密钥列表中获取。
api = new com.dun.clinkapi.Api();//创建api对象
int ret = api.start(key); //启动(只需要调用一次,重复调用也不会出错)
tvState.setText("启动盾返回:" + ret);
/*将客户端原来连接到服务器端的IP改成“实例转发规则”配置的那个以127开头的IP(例如转发规则里配置的是127.0.0.1:7000转到202.23.56.9:7000,原先的代码里连接的是202.23.56.9:7000,现  在要改成连接127.0.0.1:7000),集成完成。
具体的可参考下面两行伪代码connect("202.23.56.9",7000) 未集成盾前的连接connect("127.0.0.1", 7000) 集成盾后的连接
*/
//如有任何的疑问请和CDN5客服联系
}
@Override
public void onBackPressed() { System.exit(0);
}
}

🤖Android版本集成【Eclipse

Android Eclipse版本文件说明📂:  

✅“游戏盾 sdk\lib\android\jar\clinkapi-release.jar”接口 jar 包    
“游戏盾 sdk\lib\android\jar\armeabi\libclinkapi-lib.so”真机和模拟器运行库    
“游戏盾 sdk\lib\android\jar\x86\libclinkapi-lib.so”模拟器运行库  

Android Eclipse版本接口说明📌:  

接口类:com.dun.clinkapi.Api    
函数的原型:int start(String key)    
功能:启动客户端安全接入组件(只需要调用一次,重复调用也不会出错,调用时内部会判断是否已启动过,如果已启动过直接返回第一次调用的结果。调用时因客户端网络不通返回了 0,等网络正常后我们会自动重连,这时再调用会返回 150,这时如果没有调用业务也可正常运行) 。   
参数:Sdk配置密钥。key 不完整或错误,程序会崩溃。  

👉​​返回:150  表示成功,其它的值均为失败  

  • ✔️ ​​150:成功
  • ​​0:网络不通
  • ​​1:已外部停止(如调用了停止函数,该函数一般不需要调用)
  • ​​2:已内部停止(如运行过程中密钥被删除等)
  • ​​170:实例到期或密钥不存在

💡最好是在进程启动后先调用该函数,这样后面的所有连接都可以通过安全接入组件进行数据转发。​  

📚如何将接口引入到项目中:  

1.在工程里新建 libs 文件夹,将开发包里的 clinkapi-release.jar 拷贝到 libs 根目录下,如果真机运行就将 armeabi\libclinkapi-lib.so 拷贝到 libs\armeabi\libclinkapi-lib.so 目录下, 如果是在模拟器里运行就将 x86\libclinkapi-lib.so 拷贝到 libs\x86\libclinkapi-lib.so 目录下。完成后的工程目录如下图所示:  

anzuocdsd1
2.在工程属性->Java Build Path->Libraries 中选择“ Add External JARs ”, 选定clinkapi-release.jar,确定后返回。通过以上两步操作后,您就可以正常使用CDN游戏盾 SDK为您提供的功能了。    
3.打开 manifest.xml 增加网络访问权限  

sdfsdfsdf26266

🚀示例代码:

package com.dun.clinkapitest; import com.dun.clinkapitest.R;
import android.support.v7.app.ActionBarActivity; import android.os.Bundle;
import android.view.Menu; import android.view.MenuItem; import android.widget.TextView;
public class MainActivity extends ActionBarActivity {
com.dun.clinkapi.Api api = null;//定义 api 对象
@Override
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);
TextView tvState = (TextView) findViewById(R.id.tv);
String key = "Ai9oW..." ; //定义sdk密钥。可从单实例控制面板的sdk密钥列表中获取。
api = new com.dun.clinkapi.Api();//创建api对象
int ret = api.start(key); //启动(只需要调用一次,重复调用也不会出错)
tvState.setText("返回:" + ret);
/*将客户端原来连接到服务器端的IP改成“实例转发规则”配置的那个以127开头的IP(例如转发规则里配置的是127.0.0.1:7000转到202.23.56.9:7000,原先的代码里连接的是202.23.56.9:7000,现在
要改成连接127.0.0.1:7000),集成完成。
具体的可参考下面两行伪代码connect("202.23.56.9",7000) 未集成盾前的连接connect("127.0.0.1", 7000) 集成盾后的连接
*/
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId();
if (id == R.id.action_settings) { return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public void onBackPressed() {
// TODO Auto-generated method stub
System.exit(0);;
}
}​

⚙️易语言版本集成

🚀示例代码:

DLL 文件引用代码:
.版本 2
.DLL 命令 clinkStart, 整数型, "clinkAPI.dll", "@clinkStart"
.参数 文本, 文本型
执行 DLL 命令函数:
clinkStart (“key”)

🔧操作示例    
易语言程序仅能调用 32 位 clinkAPI.dll,调用时请确认 dll 是否为 32 位(lib\windows\x86\clinkAPI.dll)。调用流程    
yi1yi2
 yi3
 

🌈Unity版本集成

Unity版本文件说明📂:  

✅“游戏盾 sdk\lib\Unity\ClinkSDKForUnity.cs”为 C#调用的类    
“游戏盾 sdk\lib\Unity\clinkAPIForIOS.mm”为支持 ios 调用的中间接口函数    
🎯由于Unity 开发一般要支持 windows、IOS、Android 所以还要用到这三个版本的 sdk 文件  

Unity版本接口说明📌:  

接口类:

public class ClinkSDKForUnity : MonoBehaviour
{
public static int Start(string key, out string sysName)
{
}
}

函数的原型:public static int Start(string key, out string sysName)    
功能:启动客户端安全接入组件(只需要调用一次,重复调用也不会出错,调用时内部会判断是否已启动过,如果已启动过直接返回第一次调用的结果。调用时因客户端网络不通返回了 0,等网络正常后我们会自动重连,这时再调用会返回 150,这时如果没有调用业务也可正常运行) 。   
参数:Sdk配置密钥。key 不完整或错误,程序会崩溃。  

👉​​返回:150  表示成功,其它的值均为失败  

  • ✔️ ​​150:成功
  • ​​0:网络不通
  • ​​1:已外部停止(如调用了停止函数,该函数一般不需要调用)
  • ​​2:已内部停止(如运行过程中密钥被删除等)
  • ​​170:实例到期或密钥不存在

💡最好是在进程启动后先调用该函数,这样后面的所有连接都可以通过安全接入组件进行数据转发。​  

📚如何将接口引入到项目中:  

1.把 sdk\lib\Unity\ClinkSDKForUnity.cs 文件拖到 Assets 文件夹里    
2.在 Assets 下新建 Plugins 文件夹(如果已有就不用了)    
3.把 sdk\lib\windows\x64\clinkAPI.dll 文件拖到 Plugins 文件夹里(根据你的实际情况来确定你是用 64 位版本的还是 32 位版本)    
4.在 Plugins 文件夹下新建 Android 文件夹,用来放 android 的 sdk 文件    
5.把 sdk\lib\android\clinkapi-release.aar 文件拖到 Android 文件夹里    
6.在 Plugins 文件夹下新建 IOS 文件夹,用来放 ios 的 sdk 文件;    
7.把sdk\lib\IOS\IOS 静态库版本\真机Bitcode\ libclinkAPI.a 文件拖到IOS 文件夹里(根据你实际情况来确定你用的是 Bitcode 版本还是非 Bitcode 版本);    
8.把 sdk\lib\Unity\clinkAPIForIOS.mm 文件拖到 IOS 文件夹里    
9.到此 windows 、 IOS 、Android 三个端的 sdk 就已集成好了, 你只需要调用ClinkSDKForUnity.Start(string key, out string sysName)方法就可以启动我们的 sdk 了。下图为集成好的文件目录结构    
✨​Assets 下:  

Assets222
✨Plugins下:​​

androidsdfsfsdf
✨Android 下:

Androsfsfdsid

✨IOS 下:

ios124151

💥常见问题解答:

1. 当点 Unity 开发工具里的“执行”按钮执行过,就无法删除我们 windows 版本的 sdk 文件 clinkAPI.dll或运行生成的 exe 时提示端口冲突  

这是因为点“执行”时是由 Unity 执行的,Unity 加载了我们的 clinkAPI.dll 并执行, 当你停止“执行”时 Unity 并没有退出我们的 clinkAPI.dll,所以文件被占用了而且我们的 sdk 也是在运行的。你只要关闭 Unity 开发工具重新打开就可以了。  

2.当“执行”时出现类似下图内容:   

chinsdk

这可能是你没把 clinkAPI.dll 拖到Plugins 文件夹里,或者是选的 64 位版本或 32 位版本和你实际的项目不符,只要删除现有的 clinkAPI.dll 重新选对版本就可以了。这里要注意, 一般开发环境的操作系统是 64 位的,所以这个一般用的是 64 位版的 clinkAPI.dll,当程 序发布成 32 位时最好先把这个文件换成 32 位版本的,不然会无法调用。特别要记得如果 你的程序要发布出 32 位和 64 位两个版本,在发布前最好要先替换好对应版本的 clinkAPI.dll,当然也可以在发布后把发布的出来的 clinkAPI.dll 用正确版本替换也可以。  

3.当导出IOS 项目在xcode 里运行时出错  

这可能是 IOS 版sdk 的Bitcode 版和非Bitcode 版本没选对。如果 sdk 文件用的是 Bitcode 版本那么 xcode 里要把 Enable Bitcode 设成Yes,如果你选的是非 Bitcode 版本 xcode 里要把 Enable Bitcode 设成 No。具体项目里是选 Bitcode 版本还是非 Bitcode 版本要看你已集成的其它 sdk 选的是哪一种版本, 所有 sdk 的 Bitcode 或非 Bitcode 要一致。如果你没有集成其它的 sdk,只有我们的 sdk,两种都可以,只要在 xcode 里设对就行。Unity 默认导出来的IOS 项目Enable Bitcode 是设为 Yes 的,也就是 Bitcode 版本。    
4.如果你的项目里 android 只能用 jar 包不能用 aar 包,我们也是支持的,只是 Unity 的不同版本有点小的区别,如 Unity2018 和 Unity2021 在用 jar 包时就有点不同。具体操作只要把上面的第 5 步操作变一下就可以了,其它的操作都一样。Unity2018 版:把sdk\lib\android\clinkapi-release.jar 文 件 拷 贝 到 Android 文 件 夹 里 , 把sdk\lib\android\armeabi-v7a\libclinkapi-lib.so 文件拷贝到 Android 文件夹里。Unity2021 版本:把 sdk\lib\android\jar 下的所有文件及文件夹拷贝到 Android 文件夹里。  

🚀示例代码:

using System.Collections;
using System.Collections.Generic; using UnityEngine;
public class CallApiTest : MonoBehaviour
{
// Start is called before the first frame update void Start()
{
}
// Update is called once per frame void Update()
{
}
void OnGUI()
{
string key = "Ai9oW..."; //定义sdk密钥。可从单实例控制面板的sdk密钥列表中获取。string sysName = "";//返回的宏定义系统名称
int ret = ClinkSDKForUnity.Start(key, out sysName); //启动(只需要调用一次,重复调用也不会出错) string msg = "";
if (ret == 150)
msg = "盾启动成功 ret=" + ret + " sysName=" + sysName;
else
msg = "盾启动失败。ret=" + ret + " sysName=" + sysName;
GUI.Label(new Rect(100, 150, 900, 900), msg);
/*将客户端原来连接到服务器端的IP改成“实例转发规则”配置的那个以127开头的IP(例如转发规则里配置的是127.0.10.21:600转到202.23.56.9:600,原先的代码里连接的是202.23.56.9:600,现在要改成连接127.0.10.21:600),
集成完成。
具体的可参考下面两行伪代码connect("202.23.56.9",600) 未集成盾前的连接connect("127.0.10.21", 600) 集成盾后的连接
*/
//如有任何的疑问请联系CDN5客服
}
}

🔮Uni-app版本集成

我们提供的是Uni-app 的“原生代码插件”,和你用的其它的“原生代码插件”的用法是一样的。目前“原生代码插件”只支持 Android 和 IOS,不支持微信小程序等。也就是需要项目通过HBuilder原生App-云打包”生成原生 App。  

Uni-app版本文件说明📂:  

✅“游戏盾 sdk\lib\uni-app\dunClinkApiForUni”为 uniapp 原生代码插件(以前叫“原生插件”)  

Uni-app版本接口说明📌:  

插件 name:dunClinkApiForUni    
插件函数:start (key)    
功能:启动客户端安全接入组件(只需要调用一次,重复调用也不会出错,调用时内部会判断是否已启动过,如果已启动过直接返回第一次调用的结果。调用时因客户端网络不通返回了 0,等网络正常后我们会自动重连,这时再调用会返回 150,这时如果没有调用业务也可正常运行) 。   
参数:Sdk配置密钥。key 不完整或错误,程序会崩溃。  

👉​​返回:150  表示成功,其它的值均为失败  

  • ✔️ ​​150:成功
  • ​​0:网络不通
  • ​​1:已外部停止(如调用了停止函数,该函数一般不需要调用)
  • ​​2:已内部停止(如运行过程中密钥被删除等)
  • ​​170:实例到期或密钥不存在

💡最好是在进程启动后先调用该函数,这样后面的所有连接都可以通过安全接入组件进行数据转发。  

📚如何将接口引入到项目中:  

1.把sdk\lib\uni-app\dunClinkApiForUni 文件夹拷贝到项目的nativeplugins 文件夹下(如果没有就新建),文件夹“dunClinkApiForUni”名称不能改它表示插件的 ID  

游戏盾SDK接入指南:从零开始的完整集成教程
2.点选“manifest.json”文件->App 原生插件配置->选择本地插件,在出来的插件列里选上 dunClinkApiForUni 插件,点“确定”,到此插件就已集成到项目中了,接下来调用插件里提供的函数就可以了  

uisapp1
⚠️关键调用代码只有三行:

​const api = uni.requireNativePlugin('dunClinkApiForUni');//获取插件对象
let key ="Ai9oW...";//定义 sdk 密钥,值可从单实例控制面板的 sdk 密钥列表中获取
let ret = api.start(key);//启动客户端安全接入组件

💥常见问题:

如果在开发过程中需要电脑连接手机进行调试的,需要先“制作自定义调试基座”,再“运行项目中”选“使用自定义基座运行”,不能使用“标准基座运行”,因为“标准基座”没有我们的 sdk,所以也就调不到我们的函数了。

在插件或 manifest.json 有变化时需要重新“制作自定义调试基座”。手机上原来的版本也最好卸载调,因为在更新手机上的基座时是通过版本名称来判断要不要更新的,如果新生成的基座版本没比手机上的大将不会更新手机上的基座,只更新里面的资源。下图为制作自定义调试基座:

usdfsd45562def1
sfsdfdsfun

🔸下图为使用自定义基座运行:

jjjsdfs1
👉🏻我们建议您先用 android 测试全部功能没问题后,再来通过 HBuilder“发行->原生App- 云打包”生成出ios 真机版本来测试,因为 ios 里我们放的是真机库所以只能真机运行。  

🚀示例代码:

具体的示例项目在:“sdk\demo\uni-app\clinkAPIcallForUniApp”以下是示例中的代码:  

相关推荐
游戏盾SDK高级功能指南

联系CDN5客服获取实例集成开发包:点击联系  

图像通讯
图标主要
通讯

订阅我们的时事消息

单击按钮即表示您同意我们的条款和条件