Windowsは動的ライブラリDLLという形でインターフェースを提供します。 IOSは静的library.aや動的ライブラリの形でインターフェースを提供します。 AndroidはAARやjarパッケージの形でインターフェースを提供し、また.soをCで直接呼び出す動的ライブラリもサポートしています。または$\mathrm { C } { + + }$; U3D、Cocos、uniappなどをサポートしましょう。
SDKの統合は非常に便利で、インターフェースの「スタート」機能を呼び出すだけで(システムによってはclinkStartです)。 関数のプロトタイプとして、int start(文字列キー)
key: はSDKキーで、シングルインスタンスコントロールパネルから入手可能です。
注意:キーが不完全または誤って呼び出されると、プログラムはクラッシュします。 キーが削除されると、そのキーを使用するアプリケーションは「ゴールデンシールド」の検証に合格できなくなるため、元のアプリケーションで設定されたキーもキー削除後に交換しなければなりません。 同じキーは前回の鍵と違いますが、最後に入手した鍵でも問題ありません
暗号文の内容は異なりますが、実際には同じ鍵です。動的暗号化を使用しているため、暗号化後の暗号文内容は毎回異なります。
統合後、「シングルインスタンスコントロールパネル」に行き、アプリケーションに応じて対応する転送ルールを設定する必要があります。 サーバーに直接接続しているクライアントプログラムのIPとポートを、転送ルールの127から始まる対応するIPとポートに変更してください。
ファイルディレクトリの説明:「Golden Shield sdk\lib」の下には各オペレーティングシステム対応のSDKファイルがあり、「Golden Shield SDK\Demo」と「Golden Shield SDK\Demo Advanced Functions」は、各オペレーティングシステムごとに異なる開発言語を統合するためのサンプルコードです。
ご質問がある場合は、カスタマーサービスまでお問い合わせください。
「Golden Shield sdk\lib\windows\x86\clinkAPI.dll」は32ビットのdll、「Golden Shield sdk\lib\windows\x64\clinkAPI.dll」は64ビットのdll、「Golden Shield sdk\lib\windows\ClinkAPI.h」はインターフェースヘッダーファイルです
関数のプロトタイプ: extern $^ { \prime \prime } \mathrm { C } ^ { \prime \prime }$ CLINKAPI_API int clinkStart(const char * key)
機能:クライアントセキュリティアクセスコンポーネントを起動する(一度だけ呼び出せばよく、繰り返し呼び出してもエラーは発生せず、内部判断が呼び出された時点で開始されたかどうか判定されます。開始された場合は最初の呼び出しの結果が直接返されます)。 通話時にはクライアントネットワークの障害により0が返され、ネットワークが正常になったら自動的に再接続し、通話は150に戻り、通話サービスがなくても通常通り実行可能です)
パラメータ:キー:SDK設定キー。 キーが不完全または間違っている場合、プログラムはクラッシュします。
リターン:150は成功、それ以外の値は失敗を示します。 150:成功、0:ネットワーク障害、1:外部停止(停止関数が呼び出された場合、通常はその関数を呼び出す必要がない)、2:内部停止(例:キーが実行中に削除されるなど)、170:インスタンスが終了するかキーが存在しない
プロセス開始後に関数を呼び出すのが最適で、これにより以降のすべての接続がセキュアアクセスコンポーネントを通じて転送されます。
注意:リリースモードで$c { + + }$でコンパイルした場合、このdllの関数は通常通り呼び出せますか?デバッグモードでコンパイルされたexeや開発ツールで実行するとエラーが発生します。
#include< iostream>
#include< 糸>
コメント(リブ、".. /.. /.. /.. /.. /lib/windows/x86/clinkAPI.lib")
#include「... /.. /.. /.. /.. /lib/windows/clinkAPI.h" // にはAPIヘッダーファイルが含まれています
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),集成完成。
具体的可参考下面两行伪代码
connect("202.23.56.9", 600) 未集成盾前的连接
connect("127.0.10.21", 600) 集成盾后的连接
\*/
//如有任何的疑问请和我们的客服联系
system("pause");
return 0;
如果你的项目用不了静态库版本,可选择用动态库版本。
“金盾 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”为接口头文件
class ClinkAPI
{
public: int start(const char \*key);
};
函数的原型: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 (手动输入)
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),集成完成。
具体的可参考下面两行伪代码connect("202.23.56.9",7000)未集成盾前的连接connect("127.0.0.1",7000)集成盾后的连接\*///如有任何的疑问请和我们的客服联系
}
- (void) didReceiveMemoryWarning{[super didReceiveMemoryWarning];// Disposefofany resources that can be recreated.
}
@end
“金盾 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”为接口头文件
函数的原型:extern ${ } ^ { \prime \prime } \mathrm { C } ^ { \prime \prime }$ int clinkStart(const char * key);
功能:启动客户端安全接入组件(只需要调用一次,重复调用也不会出错,调用时内部会判断是否已启动过,如果已启动过直接返回第一次调用的结果。调用时因客户端网络不通返回了0,等网络正常后我们会自动重连,这时再调用会返回 150,这时如果没有调用业务也可正常运行)
参数:key:sdk 配置密钥。key不完整或错误,程序会崩溃。
返回:150表示成功,其它的值均为失败。150:成功、0:网络不通、1:已外部停止(如调用了停止函数,该函数一般不需要调用)、2:已内部停止(如运行过程中密钥被删除等)、170:实例到期或密钥不存在
最好是在进程启动后先调用该函数,这样后面的所有连接都可以通过安全接入组件进行数据转发。
将 clinkFrwAPI.framework 拷贝到你的工程路径下;
进入 TARGETS $> ^ { \cdot }$ 你的项目名称 $>$ General $>$ Frameworks, Libraries, and Embedded Content 菜单,点击 $^ +$ ,再点击 Add Other…,将刚才拷贝到工程下的 SDK 文件添加进去;
添加进去后要将 Embed 属性设置为 Embed & Sign,以使得 SDK 动态库和应用签名保持一致;
把 ClinkFrwAPI.hpp 文件拷贝到项目的目录下;
将 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 开发的项目集成时遇到过。
import "ViewController.h"
# include "ClinkFrxAPI.hpp" //包含api头文件
@interfaceViewController()
@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边境Width = 1.0; // 边框的宽度
txtMsg(layerBorderColor = [Uicolor blueColor].CGColor; // 边框的颜色
txtMsg.placeholder = "@返回的状态";
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),集成完成。
具体的可参考下面两行伪代码
connect("202.23.56.9", 7000) 未集成盾前的连接
connect("127.0.0.1", 7000) 集成盾后的连接
*/
//如有任何的疑问请和我们的客服联系
}
- (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Disposefofany resources that can be recreated.
}
@end
“金盾 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 桥接文件
函数的原型:extern $^ { \prime \prime } \mathrm { C } ^ { \prime \prime }$ int clinkStart(const char * key);
功能:启动客户端安全接入组件(只需要调用一次,重复调用也不会出错,调用时内部会判断是否已启动过,如果已启动过直接返回第一次调用的结果。调用时因客户端网络不通返回了0,等网络正常后我们会自动重连,这时再调用会返回 150,这时如果没有调用业务也可正常运行)
参数:key:sdk 配置密钥。key不完整或错误,程序会崩溃。
返回:150表示成功,其它的值均为失败。150:成功、0:网络不通、1:已外部停止(如调用了停止函数,该函数一般不需要调用)、2:已内部停止(如运行过程中密钥被删除等)、
170:实例到期或密钥不存在
最好是在进程启动后先调用该函数,这样后面的所有连接都可以通过安全接入组件进行数据转发。
将 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 (手动输入)
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),集成完成。
具体的可参考下面两行伪代码connect("202.23.56.9",7000)未集成盾前的连接connect("127.0.0.1",7000)集成盾后的连接\*///如有任何的疑问请和我们的客服联系
}
“金盾 sdk\lib\android\clinkapi-release.aar”为包含真机和模拟器运行库
接口类: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')
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(例如转发
具体可参考下面两行伪代码connect("202.23.56.9",7000)未集成盾前的连接connect("127.0.0.1",7000)集成盾后的连接\*///如有任何的疑问请和我们的客服联系}@Overridepublicvoid onBackPressed(){System.exit(0);}
“金盾 sdk\lib\android\jar\clinkapi-release.jar”接口 jar 包
“金盾 sdk\lib\android\jar\armeabi\libclinkapi-lib.so”真机和模拟器运行库
“金盾 sdk\lib\android\jar\x86\libclinkapi-lib.so”模拟器运行库
接口类: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 增加网络访问权限
<?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>
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
DLL文件引用代码:
.版本 2
.DLL 命令 clinkStart, 整数型, "clinkAPI.dll", "@clinkStart"
.参数 文本, 文本型
执行DLL命令函数:
clinkStart (“key”)
易语言程序仅能调用 32 位 clinkAPI.dll,调用时请确认 dll 是否为 32 位(lib\windows\x86\clinkAPI.dll)。
调用流程:
“金盾 sdk\lib\Unity\ClinkSDKForUnity.cs”为 C#调用的类
“金盾 sdk\lib\Unity\clinkAPIForIOS.mm”为支持 ios 调用的中间接口函数
由于 Unity 开发一般要支持 windows、IOS、Android 所以还要用到这三个版本的 sdk 文件
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:实例到期或密钥不存在
最好是在进程启动后先调用该函数,这样后面的所有连接都可以通过安全接入组件进行数据转发。
把 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 下:
□ 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 文件夹里。
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) 集成盾后的连接
*/
//如有任何的疑问请和我们的客服联系
}
我们提供的是Uni-app 的“原生代码插件”,和你用的其它的“原生代码插件”的用法是一样的。目前“原生代码插件”只支持 android和ios,不支持微信小程序等。也就是需要项目通过HBuilder“发行->原生App-云打包”生成原生 App。
“金盾 sdk\lib\uni-app\dunClinkApiForUni”为 uniapp 原生代码插件(以前叫“原生插件”)
插件 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);//启动客户端安全接入组件
如果在开发过程中需要电脑连接手机进行调试的,需要先“制作自定义调试基座”,再“运行项目中”选“使用自定义基座运行”,不能使用“标准基座运行”,因为“标准基座”没有我们的 sdk,所以也就调不到我们的函数了。
在插件或manifest.json 有变化时需要重新“制作自定义调试基座”。手机上原来的版本也最好卸载调,因为在更新手机上的基座时是通过版本名称来判断要不要更新的,如果新生成的基座版本没比手机上的大将不会更新手机上的基座,只更新里面的资源。
下图为制作自定义调试基座:
下图为使用自定义基座运行:
使用标准基座运行(G)
使用自定义基座运行(C)仕么是自定义基座
包名:uni.UNIDDC7B59 修改时间:2023/9/8 19:2:10 uniRuntimeVersion:3.8.12位置
故障排查指南
运行(O)
我们建议您先用 android 测试全部功能没问题后,再来通过 HBuilder“发行->原生App-云打包”生成出 ios 真机版本来测试,因为 ios 里我们放的是真机库所以只能真机运行。
具体的示例项目在:“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>