• 首页
首页
高防CDN静态与动态加速,边缘清洗与调度高防IP转发四层转发,业务 IP 高防接入SDK游戏盾客户端集成,游戏业务专属防护高防服务器独享资源,稳定抗 D 与高可用了解更多
游戏解决方案低延迟与防护一体化金融解决方案合规与流量清洗直播解决方案推拉流与边缘加速区块链解决方案Web3 基础设施防护查看方案
技术文档API 与接入指南帮助中心常见问题与帮助文档博客资讯产品动态与最佳实践全球测速多节点网络性能测试标签云按主题聚合全站内容进入文档
关于我们使命与愿景加入我们招聘与内推合作伙伴渠道与生态联系我们咨询与售后联系我们

文档导航

  • SDK 说明
  • 产品说明
← 返回帮助首页
帮助中心/金盾sdk说明/SDK 说明

SDK 说明

速盾网络 团队
帮助文档

标签

  • SDK

相关文档

  • 产品说明

本页目录

暂无目录

分享

𝕏fin

企业级CDN与加速解决方案,AI智能监测优化,实时全方位DDoS/CC防护。全球数万家企业信赖,提供快速、安全、可靠的内容分发与抗DDOS攻击服务。

产品

  • 高防CDN
  • 高防IP转发
  • SDK游戏盾
  • 高防服务器

解决方案

  • 游戏解决方案
  • 金融解决方案
  • 直播解决方案
  • 区块链解决方案

资源

  • 技术文档
  • 帮助中心
  • 博客资讯
  • 全球测速

公司

  • 关于我们
  • 加入我们
  • 合作伙伴
  • 联系我们

© 2026 Sudun. 保留所有权利。

Windows 以动态库 dll 的形式提供接口;IOS 以静态库.a 或动态库的形式提供接口;android 以 aar 或 jar 包的形式提供接口,同时也支持 C 或 $\mathrm { 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 集成示例代码。

如有任何的疑问请和我们的客服联系。

2.1 windows版本

2.1.1 文件说明

“金盾 sdk\lib\windows\x86\clinkAPI.dll”为 32 位的 dll“金盾 sdk\lib\windows\x64\clinkAPI.dll”为 64 位的 dll“金盾 sdk\lib\windows\ClinkAPI.h”为接口头文件

2.1.2 接口说明

函数的原型:extern $^ { \prime \prime } \mathrm { C } ^ { \prime \prime }$ CLINKAPI_API int clinkStart(const char * key)

功能:启动客户端安全接入组件(只需要调用一次,重复调用也不会出错,调用时内部会判断是否已启动过,如果已启动过直接返回第一次调用的结果。调用时因客户端网络不通返回了0,等网络正常后我们会自动重连,这时再调用会返回 150,这时如果没有调用业务也可正常运行)

参数:key:sdk 配置密钥。key不完整或错误,程序会崩溃。

返回:150表示成功,其它的值均为失败。150:成功、0:网络不通、1:已外部停止(如调用了停止函数,该函数一般不需要调用)、2:已内部停止(如运行过程中密钥被删除等)、170:实例到期或密钥不存在

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

注意:用 $c { + + }$ 时 Release 模式下编译才能正常调用本 dll 中的函数,在 Debug 模式下编译出来的exe或在开发工具中以调试运行将报错。

2.1.3 示例代码

#include<iostream>

#include<string>

comment(lib, "../../../../../lib/windows/x86/clinkAPI.lib")

#include "../../../../../lib/windows/clinkAPI.h" //包含 api 头文件

using namespace std;

txt
int_tmain(int argc, _TCHAR* argv[])  
{  
/*如果编译报字符串太长,可以把下面的代码分多行写如:  
char* key = "Asqa05ZoKFpJphMAAJpHsItVh6E/J67eQ"  
"1X602sE1W3amXPuWYxvXrV6+bbv2p4...";  
char* key = "Ai9oW..."; //定义sdk密钥。可从单实例控制面板的sdk密钥列表中获取。以实际为准  
int ret = clinkStart(key); //启动(只需要调用一次,重复调用也不会出错)  
if (ret == 150)  
{  
    cout << "盾启动成功。ret=" << ret << endl;  
}  
else  
{  
    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),集成完成。

txt
具体的可参考下面两行伪代码  
connect("202.23.56.9", 600) 未集成盾前的连接  
connect("127.0.10.21", 600) 集成盾后的连接  
\*/  
//如有任何的疑问请和我们的客服联系  
system("pause");  
return 0;

2.2 IOS静态库版本

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

2.2.1 文件说明

“金盾 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”为接口头文件

2.2.2 接口说明

接口类:

cpp
class ClinkAPI   
{   
public: int start(const char \*key);   
}; 

函数的原型:int start(const char * key)

功能:启动客户端安全接入组件(只需要调用一次,重复调用也不会出错,调用时内部会判断是否已启动过,如果已启动过直接返回第一次调用的结果。调用时因客户端网络不通返回了0,等网络正常后我们会自动重连,这时再调用会返回 150,这时如果没有调用业务也可正常运行)

参数:key: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 的,需要在 BuildSettings- $\cdot >$ Architectures- $\cdot >$ Excluded Architectures 中加上 arm64 (手动输入)

2.2.3 示例代码

objectivec
import "ViewController.h"
#include "ClinkAPI.hpp";//包含api头文件
@interfaceViewController()
@end
@implementationViewController
-(void) viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    TextView *txtMsg = [[UITextField alloc] init];
    [self.view addSubview: txtMsg];
    txtMsg.frame = CGRectMake(50, 60, 170, 40);
    txtMsg(layer边境Width = 1.0; // 边框的宽度
        txtMsg(layer.color = [Uicolor blueColor].CGColor; // 边框的颜色
        txtMsg.placeholder = "@返回的状态";
    char* key="Ai90W..."; // 定义sdk密钥。可从单实例控制面板的sdk密钥列表中获取。以实际为准
    ClinkAPI api;//定义api对象
    int ret = api.start(key); // 启动(只需要调用一次,重复调用也不会出错)
    txtMsg.text = [NSSString 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),集成完成。

txt
具体的可参考下面两行伪代码connect("202.23.56.9",7000)未集成盾前的连接connect("127.0.0.1",7000)集成盾后的连接\*///如有任何的疑问请和我们的客服联系  
}  
- (void) didReceiveMemoryWarning{[super didReceiveMemoryWarning];// Disposefofany resources that can be recreated.  
}  
@end

2.3 IOS动态库版本

2.3.1 文件说明

“金盾 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”为接口头文件

2.3.2 接口说明

函数的原型:extern ${ } ^ { \prime \prime } \mathrm { C } ^ { \prime \prime }$ int clinkStart(const char * key);

功能:启动客户端安全接入组件(只需要调用一次,重复调用也不会出错,调用时内部会判断是否已启动过,如果已启动过直接返回第一次调用的结果。调用时因客户端网络不通返回了0,等网络正常后我们会自动重连,这时再调用会返回 150,这时如果没有调用业务也可正常运行)

参数:key:sdk 配置密钥。key不完整或错误,程序会崩溃。

返回:150表示成功,其它的值均为失败。150:成功、0:网络不通、1:已外部停止(如调用了停止函数,该函数一般不需要调用)、2:已内部停止(如运行过程中密钥被删除等)、170:实例到期或密钥不存在

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

如何将接口引入到项目中(Xcode Version 11.5 为例):

  1. 将 clinkFrwAPI.framework 拷贝到你的工程路径下;

  2. 进入 TARGETS $> ^ { \cdot }$ 你的项目名称 $>$ 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 的,需要在 BuildSettings- $\cdot >$ Architectures- $\cdot >$ 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 开发的项目集成时遇到过。

2.3.3 示例代码

txt
import "ViewController.h"
# include "ClinkFrxAPI.hpp" //包含api头文件
julia
@interfaceViewController() 
txt
@end 
txt
@implementation ViewController 
txt
- (void) viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib. 
objectivec
UITextField *txtMsg = [[UITextField alloc] init];  
[ self.view addSubview:txtMsg ];  
txtMsg.frame = CGRectMake(50, 60, 170, 40);  
txtMsg(layer边境Width = 1.0; // 边框的宽度  
txtMsg(layerBorderColor = [Uicolor blueColor].CGColor; // 边框的颜色  
txtMsg.placeholder = "@返回的状态";
txt
char* key="Ai9oW..."; //定义sdk密钥。可从单实例控制面板的sdk密钥列表中获取。以实际为准  
int ret = clinkStart(key); //启动(只需要调用一次,重复调用也不会出错)  
txtMsg.text = [NsString.withFormat:@"盾启动返回:%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),集成完成。

txt
具体的可参考下面两行伪代码  
connect("202.23.56.9", 7000) 未集成盾前的连接  
connect("127.0.0.1", 7000) 集成盾后的连接  
*/

//如有任何的疑问请和我们的客服联系

objectivec
}   
- (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Disposefofany resources that can be recreated.   
}   
@end 

2.4 IOS Swift动态库版本

2.4.1 文件说明

“金盾 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 桥接文件

2.4.2 接口说明

函数的原型:extern $^ { \prime \prime } \mathrm { C } ^ { \prime \prime }$ int clinkStart(const char * key);

功能:启动客户端安全接入组件(只需要调用一次,重复调用也不会出错,调用时内部会判断是否已启动过,如果已启动过直接返回第一次调用的结果。调用时因客户端网络不通返回了0,等网络正常后我们会自动重连,这时再调用会返回 150,这时如果没有调用业务也可正常运行)

参数:key:sdk 配置密钥。key不完整或错误,程序会崩溃。

返回:150表示成功,其它的值均为失败。150:成功、0:网络不通、1:已外部停止(如调用了停止函数,该函数一般不需要调用)、2:已内部停止(如运行过程中密钥被删除等)、

170:实例到期或密钥不存在

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

如何将接口引入到项目中(Xcode Version 14.3 为例):

  1. 将 clinkFrwAPI.framework 拷贝到你的工程路径下;

  2. 进入 TARGETS $> ^ { \cdot }$ 你的项目名称 $>$ 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 BridgingHeader 里把 ${SRCROOT}/你的项目名/ClinkAPISwift-Bridging-Header.h 设置进去;

image

注意:

如果在真机运行项目把 Enable Bitcode 设成 yes(默认就为 yes),用的库又是非 Bitcode版本的运行会报错, 解决办法有两个:可以将项目 Enable Bitcode 设成 no 或用Bitcode 版本的库。

有些高版本的 xcode 在模拟器运行报错,是因为 cpu 是 M1 的,需要在 BuildSettings- $\cdot >$ Architectures- $\cdot >$ Excluded Architectures 中加上 arm64 (手动输入)

2.4.3 示例代码

import UIKit
class ViewController: UIiviewController{ override func viewDidLoad() { super.viewDidLoad() let txtMsg $=$ UITextViewField( view.addSubview(txtMsg) txtMsg.frame $=$ CGRectMake(50,60,170,40) txtMsg(layer.buttonWidth $= 1.0$ //边框的宽度 txtMsg(layer.buttonColor $=$ UIColor.blue.bgColor//边框的颜色 txtMsg.placeholder $=$ "返回的状态" let key $=$ "Ai9oW..."//定义sdk密钥。可从单实例控制面板的sdk密钥列表中获取。以实际为准 let ret $=$ clinkStart(key)//启动(只需要调用一次,重复调用也不会出错) txtMsg.text $=$ "盾启动返回:" + " $\backslash$ (ret)"

/*将客户端原来连接到服务器端的IP改成“实例转发规则”配置的那个以127开头的IP(例如转发规则里配置的是127.0.0.1:7000转到202.23.56.9:7000,原先的代码里连接的是202.23.56.9:7000,现在要改成连接127.0.0.1:7000),集成完成。

json
具体的可参考下面两行伪代码connect("202.23.56.9",7000)未集成盾前的连接connect("127.0.0.1",7000)集成盾后的连接\*///如有任何的疑问请和我们的客服联系  
}

2.5 android版本(AndroidStudio)

2.5.1 文件说明

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

2.5.2 接口说明

接口类:com.dun.clinkapi.Api

函数的原型:int start(String key)

功能:启动客户端安全接入组件(只需要调用一次,重复调用也不会出错,调用时内部会判断是否已启动过,如果已启动过直接返回第一次调用的结果。调用时因客户端网络不通返回了0,等网络正常后我们会自动重连,这时再调用会返回 150,这时如果没有调用业务也可正常运行)

参数:key: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')

image

4. 打开 AndroidManifest.xml 增加网络访问权限

<uses-permission android:name="android.permission.INTERNET"/>

image

2.5.3 示例代码

package com.dun.clinkapical1;
import android.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); TextViewtvState $=$ (TextView)findViewByld(R.id.tvState); String key $=$ "Ai9ow...";//定义sdk密钥。可从单实例控制面板的sdk密钥列表中获取。 api $\equiv$ new com.dun.clinkapi.Api();//创建api对象 int ret $\equiv$ api.start(key); //启动(只需要调用一次,重复调用也不会出错) tvState.setText("启动盾返回:" $^+$ ret);

/*将客户端原来连接到服务器端的IP改成“实例转发规则”配置的那个以127开头的IP(例如转发

txt
具体可参考下面两行伪代码connect("202.23.56.9",7000)未集成盾前的连接connect("127.0.0.1",7000)集成盾后的连接\*///如有任何的疑问请和我们的客服联系}@Overridepublicvoid onBackPressed(){System.exit(0);}

2.6 android版本(Eclipse)

2.6.1 文件说明

“金盾 sdk\lib\android\jar\clinkapi-release.jar”接口 jar 包

“金盾 sdk\lib\android\jar\armeabi\libclinkapi-lib.so”真机和模拟器运行库

“金盾 sdk\lib\android\jar\x86\libclinkapi-lib.so”模拟器运行库

2.6.2 接口说明

接口类:com.dun.clinkapi.Api

函数的原型:int start(String key)

功能:启动客户端安全接入组件(只需要调用一次,重复调用也不会出错,调用时内部会判断是否已启动过,如果已启动过直接返回第一次调用的结果。调用时因客户端网络不通返回了0,等网络正常后我们会自动重连,这时再调用会返回 150,这时如果没有调用业务也可正常运行)

参数:key: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 目录下。完成后的工程目录如下图所示:

image

  1. 在 工 程 属 性 ->Java Build Path->Libraries 中 选 择 “ Add External JARs ”, 选 定clinkapi-release.jar,确定后返回。 通过以上两步操作后,您就可以正常使用金盾 SDK为您提供的功能了。

  2. 打开 manifest.xml 增加网络访问权限

xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.test"
android:versionCode="1"
android:versionName="1.0">
<uses-permission android:name="android流畅ration.INTERNET"/>
<uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="21"/>
<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme"/>
<activity
    android:name=".MainActivity"
    android:label="@string/app_name"/>
<intent-filter>
    <action android:name="android intent.action.MAIN" />
    <category android:name="android intent.category.LAUNCHER" />
    </intent-filter>
</activity>
</manifest>

2.6.3 示例代码

txt
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(例如转发规则里配

具体的可参考下面两行伪代码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(Item 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); 1

2.7 易语言版本

2.7.1 示例代码

DLL文件引用代码:

.版本 2

.DLL 命令 clinkStart, 整数型, "clinkAPI.dll", "@clinkStart"

.参数 文本, 文本型

执行DLL命令函数:

clinkStart (“key”)

2.7.2 操作示例

易语言程序仅能调用 32 位 clinkAPI.dll,调用时请确认 dll 是否为 32 位(lib\windows\x86\clinkAPI.dll)。

调用流程:

image

image

image

2.8 Unity版本

2.8.1 文件说明

“金盾 sdk\lib\Unity\ClinkSDKForUnity.cs”为 C#调用的类

“金盾 sdk\lib\Unity\clinkAPIForIOS.mm”为支持 ios 调用的中间接口函数

由于 Unity 开发一般要支持 windows、IOS、Android 所以还要用到这三个版本的 sdk 文件

2.8.2 接口说明

接口类:

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

函数的原型:public static int Start(string key, out string sysName)

功能:启动客户端安全接入组件(只需要调用一次,重复调用也不会出错,调用时内部会判断是否已启动过,如果已启动过直接返回第一次调用的结果。调用时因客户端网络不通返回了0,等网络正常后我们会自动重连,这时再调用会返回 150,这时如果没有调用业务也可正常运行)

参数:key:sdk 配置密钥。key 不完整或错误,程序会崩溃。

sysName:返回的当前运行的宏定义系统名称(有助于分析是否执行了正确的代码)返回: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 下:

image

Plugins 下:

image

Android 下:

image

IOS 下:

image

2.8.3 常见问题

□ 1 1. 当点Unity开发工具里的 “执行”按钮执行过,就无法删除我们 windows 版本的 sdk 文件 clinkAPI.dll,或运行生成的 exe 时提示端口冲突;这是因为点“执行”时是由 Unity 执行的,Unity 加载了我们的 clinkAPI.dll 并执行,当你停止“执行”时 Unity并没有退出我们的 clinkAPI.dll,所以文件被占用了而且我们的sdk也是在运行的。你只要关闭 Unity开发工具重新打开就可以了。

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

image

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

  1. 当导出 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 版本。

  2. 如果你的项目里 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 文件夹里。

2.8.4 示例代码

cs
using System.Collections;   
using System.Collections.Generic;   
using UnityEngine;   
public class CallApiTest : MonoBehaviour { // Start is called before the first frame update void Start() { } 
txt
// 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) 集成盾后的连接
        */
    //如有任何的疑问请和我们的客服联系
}

2.9 Uni-app版本

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

2.9.1 文件说明

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

2.9.2 接口说明

插件 name:dunClinkApiForUni

插件函数:start (key)

功能:启动客户端安全接入组件(只需要调用一次,重复调用也不会出错,调用时内部会判断是否已启动过,如果已启动过直接返回第一次调用的结果。调用时因客户端网络不通返回了0,等网络正常后我们会自动重连,这时再调用会返回 150,这时如果没有调用业务也可正常运行)

参数:key:sdk 配置密钥。key 不完整或错误,程序会崩溃。

返回:150表示成功,其它的值均为失败。150:成功、0:网络不通、1:已外部停止(如调用了停止函数,该函数一般不需要调用)、2:已内部停止(如运行过程中密钥被删除等)、170:实例到期或密钥不存在

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

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

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

image

  1. 点选“manifest.json”文件->App 原生插件配置 $- >$ 选择本地插件,在出来的插件列里选上 dunClinkApiForUni 插件,点“确定”,到此插件就已集成到项目中了,接下来调用插件里提供的函数就可以了。

image

关键调用代码只有三行:

const api $=$ uni.requireNativePlugin('dunClinkApiForUni');//获取插件对象

let key $\stackrel { - } { } $ "Ai9oW...";//定义 sdk密钥,值可从单实例控制面板的sdk 密钥列表中获取

let ret $=$ api.start(key);//启动客户端安全接入组件

2.9.3 常见问题

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

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

下图为制作自定义调试基座:

image

image

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

image

image

image

image

使用标准基座运行(G)

image

使用自定义基座运行(C)仕么是自定义基座

包名:uni.UNIDDC7B59 修改时间:2023/9/8 19:2:10 uniRuntimeVersion:3.8.12位置

故障排查指南

运行(O)

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

2.9.4 示例代码

具体的示例项目在:“sdk\demo\uni-app\clinkAPIcallForUniApp”

以下是示例中的代码:

<template> <view class $=$ "content"> <image class $\coloneqq$ "logo" src $\coloneqq$ "/static/logo.png"></image> <view class $\coloneqq$ "text-area"> <text class $\coloneqq$ "title">{{retStr}}></text> </view> <button @tap $\coloneqq$ "dunStart()">启动盾</button> </view>
</template>

<script> export default{ data(){ return{ retStr:" } }, onLoad({ }, methods:{ //启动盾 dunStart() { const api $=$ unirequireNativePlugin('dunClinkApiForUni');//获取插件对象 letkey $=$ "Ai9oW...";//定义sdk密钥。可从单实例控制面板的sdk密钥列表中获取。 letret $\equiv$ 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) 集成盾后的连接 */ //如有任何的疑问请和我们的客服联系 } ```vue } } </script>