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
#include
comment(lib, "../../../../../lib/windows/x86/clinkAPI.lib")
#include "../../../../../lib/windows/clinkAPI.h" //包含 api 头文件
using namespace std;
/*将客户端原来连接到服务器端的IP改成“实例转发规则”配置的那个以127开头的IP(例如转发规则里配置的是127.0.10.21:600转到202.23.56.9:600,原先的代码里连接的是202.23.56.9:600,现在要改成连接127.0.10.21:600),集成完成。
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 接口说明
接口类:
函数的原型:int start(const char * key)
功能:启动客户端安全接入组件(只需要调用一次,重复调用也不会出错,调用时内部会判断是否已启动过,如果已启动过直接返回第一次调用的结果。调用时因客户端网络不通返回了0,等网络正常后我们会自动重连,这时再调用会返回 150,这时如果没有调用业务也可正常运行)
参数:key:sdk 配置密钥。key不完整或错误,程序会崩溃。
返回:150表示成功,其它的值均为失败。150:成功、0:网络不通、1:已外部停止(如调用了停止函数,该函数一般不需要调用)、2:已内部停止(如运行过程中密钥被删除等)、170:实例到期或密钥不存在
最好是在进程启动后先调用该函数,这样后面的所有连接都可以通过安全接入组件进行数据转发。
如何将接口引入到项目中:
用Xcode将你的项目打开;
把 libclinkAPI_x86_arm.a(根据自己具体情况选对应版本)的文件直接拖入你的项目中;
把 ClinkAPI.hpp 文件拷贝到项目的目录下;
把要调用接口的.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 示例代码
/*将客户端原来连接到服务器端的IP改成“实例转发规则”配置的那个以127开头的IP(例如转发规则里配置的是127.0.0.1:7000转到202.23.56.9:7000,原先的代码里连接的是202.23.56.9:7000,现在要改成连接127.0.0.1:7000),集成完成。
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 为例):
将 clinkFrwAPI.framework 拷贝到你的工程路径下;
进入 TARGETS $> ^ { \cdot }$ 你的项目名称 $>$ General $>$ Frameworks, Libraries, and Embedded Content 菜单,点击 $^ +$ ,再点击 Add Other…,将刚才拷贝到工程下的 SDK 文件添加进去;
添加进去后要将 Embed 属性设置为 Embed & Sign,以使得 SDK 动态库和应用签名保持一致;
把 ClinkFrwAPI.hpp 文件拷贝到项目的目录下;
如何将接口引入到项目中(Xcode Version 8.3.3 为例):
将 clinkFrwAPI.framework 拷贝到你的工程路径下;
进入 TARGETS $>$ 你的项目名称 $>$ General $>$ Embedded Binaries 菜单,点击 $^ +$ ,再点击 Add Other…,将刚才拷贝到工程下的 SDK 文件添加进去;
把 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 示例代码
/*将客户端原来连接到服务器端的IP改成“实例转发规则”配置的那个以127开头的IP(例如转发规则里配置的是127.0.0.1:7000转到202.23.56.9:7000,原先的代码里连接的是202.23.56.9:7000,现在要改成连接127.0.0.1:7000),集成完成。
//如有任何的疑问请和我们的客服联系
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 为例):
将 clinkFrwAPI.framework 拷贝到你的工程路径下;
进入 TARGETS $> ^ { \cdot }$ 你的项目名称 $>$ General $>$ Frameworks, Libraries, and Embedded Content 菜单,点击 $^ +$ ,再点击Add Other…,将刚才拷贝到工程下的 SDK文件添加进去;
添加进去后要将Embed 属性设置为Embed & Sign,以使得 SDK动态库和应用签名保持一致;
把 ClinkFrwAPI.hpp 文件拷贝到项目的目录下;
把桥接文件 ClinkAPISwift-Bridging-Header.h 拷贝到项目的目录下;
进入 TARGETS $>$ 你的项目名称>BuildSettings >Swift Compiler – General 在 Objective-C BridgingHeader 里把 ${SRCROOT}/你的项目名/ClinkAPISwift-Bridging-Header.h 设置进去;

注意:
如果在真机运行项目把 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),集成完成。
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:实例到期或密钥不存在
最好是在进程启动后先调用该函数,这样后面的所有连接都可以通过安全接入组件进行数据转发。
如何将接口引入到项目中:
用 AndroidStudio 将你的项目打开;
把clinkapi-release.aar拷贝到模块libs文件夹下;
在模块的build.gradle中的dependencies节点下增加sdk的引用:
implementation files('libs/clinkapi-release.aar')

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

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(例如转发
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:实例到期或密钥不存在
最好是在进程启动后先调用该函数,这样后面的所有连接都可以通过安全接入组件进行数据转发。
如何将接口引入到项目中:
- 在工程里新建 libs 文件夹,将开发包里的 clinkapi-release.jar 拷贝到 libs 根目录下,如果真机运行就将 armeabi\libclinkapi-lib.so 拷贝到 libs\armeabi\libclinkapi-lib.so 目录下,如果是在模拟器里运行就将 x86\libclinkapi-lib.so 拷贝到 libs\x86\libclinkapi-lib.so 目录下。完成后的工程目录如下图所示:

在 工 程 属 性 ->Java Build Path->Libraries 中 选 择 “ Add External JARs ”, 选 定clinkapi-release.jar,确定后返回。 通过以上两步操作后,您就可以正常使用金盾 SDK为您提供的功能了。
打开 manifest.xml 增加网络访问权限
2.6.3 示例代码
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)。
调用流程:



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 接口说明
接口类:
函数的原型:public static int Start(string key, out string sysName)
功能:启动客户端安全接入组件(只需要调用一次,重复调用也不会出错,调用时内部会判断是否已启动过,如果已启动过直接返回第一次调用的结果。调用时因客户端网络不通返回了0,等网络正常后我们会自动重连,这时再调用会返回 150,这时如果没有调用业务也可正常运行)
参数:key:sdk 配置密钥。key 不完整或错误,程序会崩溃。
sysName:返回的当前运行的宏定义系统名称(有助于分析是否执行了正确的代码)返回:150表示成功,其它的值均为失败。150:成功、0:网络不通、1:已外部停止(如调用了停止函数,该函数一般不需要调用)、2:已内部停止(如运行过程中密钥被删除等)、170:实例到期或密钥不存在
最好是在进程启动后先调用该函数,这样后面的所有连接都可以通过安全接入组件进行数据转发。
如何将接口引入到项目中:
把 sdk\lib\Unity\ClinkSDKForUnity.cs 文件拖到 Assets 文件夹里;
在 Assets 下新建 Plugins 文件夹(如果已有就不用了);
把 sdk\lib\windows\x64\clinkAPI.dll 文件拖到 Plugins 文件夹里(根据你的实际情况来确定你是用 64 位版本的还是 32 位版本);
在 Plugins 文件夹下新建 Android 文件夹,用来放 android 的 sdk 文件;
把 sdk\lib\android\clinkapi-release.aar 文件拖到 Android 文件夹里
在 Plugins 文件夹下新建 IOS 文件夹,用来放 ios 的 sdk 文件;
把 sdk\lib\IOS\IOS 静态库版本\真机 Bitcode\ libclinkAPI.a 文件拖到 IOS 文件夹里(根据你实际情况来确定你用的是 Bitcode 版本还是非 Bitcode 版本);
把 sdk\lib\Unity\clinkAPIForIOS.mm 文件拖到 IOS 文件夹里;
到 此 windows、IOS、Android 三个端的 sdk 就 已 集 成 好了 , 你 只 需 要 调 用ClinkSDKForUnity.Start(string key, out string sysName)方法就可以启动我们的 sdk 了。下图为集成好的文件目录结构:
Assets 下:

Plugins 下:

Android 下:

IOS 下:

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

这可能是你没把 clinkAPI.dll 拖到Plugins 文件夹里,或者是选的 64 位版本或 32 位版本和你实际的项目不符,只要删除现有的 clinkAPI.dll 重新选对版本就可以了。这里要注意,一般开发环境的操作系统是 64 位的,所以这个一般用的是 64 位版的 clinkAPI.dll,当程序发布成32位时最好先把这个文件换成32位版本的,不然会无法调用。特别要记得如果你的程序要发布出 32 位和 64 位两个版本,在发布前最好要先替换好对应版本的clinkAPI.dll,当然也可以在发布后把发布的出来的 clinkAPI.dll 用正确版本替换也可以。
当导出 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 版本。
如果你的项目里 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 示例代码
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:实例到期或密钥不存在
最好是在进程启动后先调用该函数,这样后面的所有连接都可以通过安全接入组件进行数据转发。
如何将接口引入到项目中:
- 把 sdk\lib\uni-app\dunClinkApiForUni 文件夹拷贝到项目的 nativeplugins 文件夹下(如果没有就新建),文件夹“dunClinkApiForUni”名称不能改,它表示插件的 ID;

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

关键调用代码只有三行:
const api $=$ uni.requireNativePlugin('dunClinkApiForUni');//获取插件对象
let key $\stackrel { - } { } $ "Ai9oW...";//定义 sdk密钥,值可从单实例控制面板的sdk 密钥列表中获取
let ret $=$ api.start(key);//启动客户端安全接入组件
2.9.3 常见问题
如果在开发过程中需要电脑连接手机进行调试的,需要先“制作自定义调试基座”,再“运行项目中”选“使用自定义基座运行”,不能使用“标准基座运行”,因为“标准基座”没有我们的 sdk,所以也就调不到我们的函数了。
在插件或manifest.json 有变化时需要重新“制作自定义调试基座”。手机上原来的版本也最好卸载调,因为在更新手机上的基座时是通过版本名称来判断要不要更新的,如果新生成的基座版本没比手机上的大将不会更新手机上的基座,只更新里面的资源。
下图为制作自定义调试基座:


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




使用标准基座运行(G)

使用自定义基座运行(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”
以上是示例中的代码:
轻量 SDK,为移动应用提供通信加密、DDoS 防护、智能加速的安全解决方案。支持 iOS、Android、Flutter 等主流平台。从通信加密到智能加速,为移动应用构建全方位安全屏障。多场景无缝适配!
SDK游戏盾免费开通地址:https://dash.sudun.com/view/register 注册登录按照截图所示即可自动免费开通试用版!
SDK文档手册下载地址:https://dash.sudun.com/download/jdSDK.zip 下载即可完整查看SDK文档接入手册流程!




