没有产品在购物车中。
🔥2025最新版游戏盾SDK接入全攻略!从Unity、Uni-App到原生Android/iOS,手把手教你实现安全联机+防DDoS攻击!💻附易语言/C#代码示例、跨平台避坑指南(含真机调试玄学解决方案),5分钟完成密钥配置+端口转发,解决网络不通/版本冲突/编译报错等99%开发者痛点!
CDN5游戏盾由“安全接入客户端组件(sdk、加壳等等)”、“安全接入服务器机房群集”、“单实例控制面板”三大核心子系统构成。 用户通过集成安全接入组件将由原来的客户端程序直接连接后端应用服务的模式改成客户端通过本地的 127 开头的 IP 地址连接本地的安全接入组件,安全接入组件会动态选择延迟最小的链路将数据转发到安全接入机房服务器群集,安全接入机房服务器群集再将数据转发到用户的后端应用服务器。
✅ 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版本文件说明📂:
✅“游戏盾 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 表示成功,其它的值均为失败。
💡最好是在进程启动后先调用该函数,这样后面的所有连接都可以通过安全接入组件进行数据转发。 注意:用 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静态库版本文件说明📂:
✅“游戏盾 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 表示成功,其它的值均为失败。
💡最好是在进程启动后先调用该函数,这样后面的所有连接都可以通过安全接入组件进行数据转发。
📚如何将接口引入到项目中:
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动态库版本文件说明📂:
✅“游戏盾 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 表示成功,其它的值均为失败。
💡最好是在进程启动后先调用该函数,这样后面的所有连接都可以通过安全接入组件进行数据转发。
📚如何将接口引入到项目中(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
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 表示成功,其它的值均为失败。
💡最好是在进程启动后先调用该函数,这样后面的所有连接都可以通过安全接入组件进行数据转发。
📚如何将接口引入到项目中(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 设置进去。
⚠️注意:
如果在真机运行项目把 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版本文件说明📂:
✅“游戏盾 sdk\lib\android\clinkapi-release.aar”为包含真机和模拟器运行库
Android版本接口说明📌:
接口类:com.dun.clinkapi.Api
函数的原型:int start(String key)
功能:启动客户端安全接入组件(只需要调用一次,重复调用也不会出错,调用时内部会判断是否已启动过,如果已启动过直接返回第一次调用的结果。调用时因客户端网络不通返回了 0,等网络正常后我们会自动重连,这时再调用会返回 150,这时如果没有调用业务也可正常运行) 。
参数:Sdk配置密钥。key 不完整或错误,程序会崩溃。
👉返回:150 表示成功,其它的值均为失败。
💡最好是在进程启动后先调用该函数,这样后面的所有连接都可以通过安全接入组件进行数据转发。
📚如何将接口引入到项目中:
1. 用 AndroidStudio 将你的项目打开。
2. 把clinkapi-release.aar拷贝到模块libs文件夹下。
3. 在模块的build.gradle中的dependencies节点下增加sdk的引用:implementation files('libs/clinkapi-release.aar')。
打开 AndroidManifest.xml 增加网络访问权限
<uses-permission android:name="android.permission.INTERNET"/>
🚀示例代码:
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版本文件说明📂:
✅“游戏盾 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 表示成功,其它的值均为失败。
💡最好是在进程启动后先调用该函数,这样后面的所有连接都可以通过安全接入组件进行数据转发。
📚如何将接口引入到项目中:
1.在工程里新建 libs 文件夹,将开发包里的 clinkapi-release.jar 拷贝到 libs 根目录下,如果真机运行就将 armeabi\libclinkapi-lib.so 拷贝到 libs\armeabi\libclinkapi-lib.so 目录下, 如果是在模拟器里运行就将 x86\libclinkapi-lib.so 拷贝到 libs\x86\libclinkapi-lib.so 目录下。完成后的工程目录如下图所示:
2.在工程属性->Java Build Path->Libraries 中选择“ Add External JARs ”, 选定clinkapi-release.jar,确定后返回。通过以上两步操作后,您就可以正常使用CDN游戏盾 SDK为您提供的功能了。
3.打开 manifest.xml 增加网络访问权限。
🚀示例代码:
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)。调用流程:
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 表示成功,其它的值均为失败。
💡最好是在进程启动后先调用该函数,这样后面的所有连接都可以通过安全接入组件进行数据转发。
📚如何将接口引入到项目中:
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 下:
✨Plugins下:
✨Android 下:
✨IOS 下:
💥常见问题解答:
1. 当点 Unity 开发工具里的“执行”按钮执行过,就无法删除我们 windows 版本的 sdk 文件 clinkAPI.dll,或运行生成的 exe 时提示端口冲突
这是因为点“执行”时是由 Unity 执行的,Unity 加载了我们的 clinkAPI.dll 并执行, 当你停止“执行”时 Unity 并没有退出我们的 clinkAPI.dll,所以文件被占用了而且我们的 sdk 也是在运行的。你只要关闭 Unity 开发工具重新打开就可以了。
2.当“执行”时出现类似下图内容:
这可能是你没把 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 的“原生代码插件”,和你用的其它的“原生代码插件”的用法是一样的。目前“原生代码插件”只支持 Android 和 IOS,不支持微信小程序等。也就是需要项目通过HBuilder原生App-云打包”生成原生 App。
Uni-app版本文件说明📂:
✅“游戏盾 sdk\lib\uni-app\dunClinkApiForUni”为 uniapp 原生代码插件(以前叫“原生插件”)
Uni-app版本接口说明📌:
插件 name:dunClinkApiForUni
插件函数:start (key)
功能:启动客户端安全接入组件(只需要调用一次,重复调用也不会出错,调用时内部会判断是否已启动过,如果已启动过直接返回第一次调用的结果。调用时因客户端网络不通返回了 0,等网络正常后我们会自动重连,这时再调用会返回 150,这时如果没有调用业务也可正常运行) 。
参数:Sdk配置密钥。key 不完整或错误,程序会崩溃。
👉返回:150 表示成功,其它的值均为失败。
💡最好是在进程启动后先调用该函数,这样后面的所有连接都可以通过安全接入组件进行数据转发。
📚如何将接口引入到项目中:
1.把sdk\lib\uni-app\dunClinkApiForUni 文件夹拷贝到项目的nativeplugins 文件夹下(如果没有就新建),文件夹“dunClinkApiForUni”名称不能改,它表示插件的 ID:
2.点选“manifest.json”文件->App 原生插件配置->选择本地插件,在出来的插件列里选上 dunClinkApiForUni 插件,点“确定”,到此插件就已集成到项目中了,接下来调用插件里提供的函数就可以了。
⚠️关键调用代码只有三行:
const api = uni.requireNativePlugin('dunClinkApiForUni');//获取插件对象
let key ="Ai9oW...";//定义 sdk 密钥,值可从单实例控制面板的 sdk 密钥列表中获取
let ret = api.start(key);//启动客户端安全接入组件
💥常见问题:
如果在开发过程中需要电脑连接手机进行调试的,需要先“制作自定义调试基座”,再“运行项目中”选“使用自定义基座运行”,不能使用“标准基座运行”,因为“标准基座”没有我们的 sdk,所以也就调不到我们的函数了。
在插件或 manifest.json 有变化时需要重新“制作自定义调试基座”。手机上原来的版本也最好卸载调,因为在更新手机上的基座时是通过版本名称来判断要不要更新的,如果新生成的基座版本没比手机上的大将不会更新手机上的基座,只更新里面的资源。下图为制作自定义调试基座:
🔸下图为使用自定义基座运行:
👉🏻我们建议您先用 android 测试全部功能没问题后,再来通过 HBuilder“发行->原生App- 云打包”生成出ios 真机版本来测试,因为 ios 里我们放的是真机库所以只能真机运行。
🚀示例代码:
具体的示例项目在:“sdk\demo\uni-app\clinkAPIcallForUniApp”以下是示例中的代码:
<template>
<view >
<image src=/static/logo.png></image>
<view >
<text >{{retStr}}</text>
</view>
<button @tap="dunStart()">启动盾</button>
</view>
</template>
<script>
export default { data() {
return {
retStr: ''
}
},
onLoad() {
},
methods: {
//启动盾dunStart() {
const api = uni.requireNativePlugin('dunClinkApiForUni'); //获取插件对象let key ="Ai9oW...";//定义 sdk 密钥。可从单实例控制面板的 sdk 密钥列表中获取。let ret = api.start(key); //启动(只需要调用一次,重复调用也不会出错)
if (ret == 150)
this.retStr = "盾 start 成功 ret=" + ret;
else
this.retStr = "盾 start 失败 ret=" + 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客服
}
}
}
</script>
相关推荐
游戏盾SDK高级功能指南
联系CDN5客服获取实例集成开发包:点击联系