沒有産品在購物車中。
?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客服獲取實例集成開發包:點擊聯系 ?