本文将为您介绍如何接入水印 SDK,本文主要包括 Android、iOS 和 Windows 三个版本的接入指南。
SDK 准备
Android 接入
预备工作
接入 SDK 需要完成以下步骤:
1.1 根据运行平台选择相应的 so 文件,将 so 文件和 jar 文件拷贝到工程目录下并添加依赖。
1.2 调用 SDK 接口函数,生成水印信息。
1.3 发送报文时,将20字节水印信息放在消息体前面。
SDK 文件包含 so 文件和 jar 文件,目录结构如下:
SDK API 说明:
程序包:com.gamesec
类:Mark
接口说明:
接口名称 | 说明 |
CreateSDKBuffFromStr | 生成水印 |
接入步骤(Android Studio)
1. 将 sdk/android 文件夹下的内容拷贝到工程目录的 libs 文件夹下:
2. 修改项目的 build.gradle 文件,设置 jni 文件目录,添加 jar 依赖:
android {sourceSets {main {jniLibs.srcDirs =['libs/jni'] // 设置 jni 目录}}}dependencies {implementation files('libs/gamesec.jar') // 添加依赖}
3. Eclipse 接入方法类似,不需要配置 build.gradle 文件。
接口调用
1. 导入程序包。
import com.gamesec.*;
2. 实例化 Mark 对象。
Mark mark = new Mark();
3. 调用 CreateSDKBuffFromStr 生成水印。
byte [ ] CreateSDKBuffFromStr (String pSDKinfo, String buffer, String uDesIp, int uDesPort)
参数说明:
参数 | 类型 | 含义 |
pSDKinfo | String | 水印防护密钥 |
buffer | String | 占位参数,传入空字符串即可 |
uDeslp | String | 服务器 IP,如 “1.2.3.4” |
uDesPort | int | 服务器端口 |
返回值:
类型 | 含义 |
byte[] | 计算的水印信息,取20字节 |
调用示例:
String pSDKinfo = "566c2dea9420eb37-b6c8-566c2dea9420eb3710525135e8485e80806a2f9c";String uDesIp = "115.159.147.198";int uDesPort = 8899 ;byte[] bytes = mark.CreateSDKBuffFromStr(pSDKinfo, "", uDesIp, uDesPort);
4. 添加水印信息到消息体。代码示例如下:
Socket s = new Socket(uDesIp, uDesPort);OutputStream out = s.getOutputStream();PrintWriter output = new PrintWriter(out, true);// 先传入水印信息output.print(bytes);output.println("msg msg msg");BufferedReader input = new BufferedReader(new InputStreamReader(s.getInputStream()));String msg = input.readLine();s.close();
iOS 接入
预备工作
接入 SDK 需要完成以下步骤:
1.1 将 SDK 文件拷贝到工程目录,Swift 工程需要添加桥文件。
1.2 调用 SDK 接口函数,生成水印信息。
1.3 发送报文时,将 20 字节水印信息放在消息体前面。
SDK 文件包含 a 文件和 h 文件,目录结构如下:
接口说明:
接口名称 | 说明 |
CreateSDKBuffFromStr | 生成水印 |
接入步骤(Xcode)
1. 将 sdk/ios 文件夹下的内容拷贝到工程目录:
2. 将 SDK 文件添加到 Xcode。右键工程名,单击 “Add Files to”。
3. 在对话框中勾选 “Create folder references”,选中 SDK 的两个文件,单击 Add。
4. 左键工程名,选择 General,将 a 文件添加到 “Linked Framews and Libraries”:
5. 如果是 Swift 项目,需要创建桥文件,Object-C 项目可以跳过此步骤。创建一个 Header File,命名为 bridge.h。并在文件中添加以下代码:
# import "gamesec.h";
6. 左键工程名,选择 Build Settings,将 bridge.h 添加到 Object-C Bridging Header 中:
接口调用
1. Swift 项目可以直接调用生成水印函数,Object-C 项目需要在使用的文件里面添加头文件:
# import "gamesec.h";
2. 调用 CreateSDKBuffFromStr 生成水印。
uint32_t CreateSDKBuffFromStr(char *pSDKinfo, uint8_t *buffer, char* uDstIp, uint16_tuDstPort);
参数说明:
参数 | 类型 | 含义 |
pSDKinfo | char * | 水印防护密钥 |
buffer | uint8_t * | 水印指针,输出水印结果 |
uDeslp | char * | 服务器 IP,如 “1.2.3.4” |
uDesPort | uint16_t | 服务器端口 |
注意:
水印结果保存在参数 buffer 中,取20字节。
3. 调用示例。
Swift 调用:let pSDKinfo = UnsafeMutablePointer<Int8>(mutating: ("566c2dea9420eb37-b6c8-566c2dea9420eb3710525135e8485e80806a2f9c"as NSString).utf8String);var buffer = UnsafeMutablePointer<UInt8>.allocate(capacity: 20);let uDstIp = UnsafeMutablePointer<Int8>(mutating: ("115.159.147.198" as NSString).utf8String);let uDstport = UInt16.init("8899")!;CreateSDKBuffFromStr(pSDKinfo, buffer, uDstIp, uDstport);for i in 0 ..< 20 {let b = (buffer+i).pointee;// 水印信息在前20字节,注意这里输出的是 uint8print(" \\(b)");}Object-C 调用:char *pSDKinfo = "566c2dea9420eb37-b6c8-566c2dea9420eb3710525135e8485e80806a2f9c";uint8_t buffer[20];char *uDstIp = "115.159.147.198";uint16_t uDstPort = 8899;CreateSDKBuffFromStr(pSDKinfo, buffer, uDstIp, uDstPort);for(int i=0;i<20;i++){// 水印信息在前20字节NSLog(@"%d", (int8_t)buffer[i]);}
3. 发送报文前,添加 20 字节水印信息到消息体前面。
Windows 接入
预备工作
SDK 为 gamesec.dll 文件,有一个生成水印的函数:
uint32_t CreateSDKBuffFromStr(char *pSDKinfo, uint8_t *buffer, char* uDstIp, uint16_t uDstPort);
参数说明:
参数 | 类型 | 含义 |
pSDKinfo | char * | 水印防护密钥 |
buffer | uint8_t * | 水印指针,输出水印结果 |
uDeslp | char * | 服务器 IP,如 “1.2.3.4” |
uDesPort | uint16_t | 服务器端口 |
注意:
水印结果保存在参数 buffer 中,取20字节。
接口调用
在使用水印函数时,需先导入 dll 文件,可以使用 LoadLibrary 函数(需要添加 Windows.h ):
// 定义函数指针typedef int(*FUNC)(char *, uint8_t *, char* , uint16_t );// 设置 dll 路径HINSTANCE Hint = ::LoadLibrary(L"E:\\\\sdk\\\\gamesec.dll");FUNC CreateSDKBuffFromStr = (FUNC)GetProcAddress(Hint, "CreateSDKBuffFromStr");
完整调用示例:
// 保存水印uint8_t buffer[BUFFER_SIZE];memset(buffer, 0, BUFFER_SIZE);int UDP_TEST_PORT = 8899;const char * CONST_UDP_SERVER_IP = "115.159.147.198";char * UDP_SERVER_IP = new char[strlen(CONST_UDP_SERVER_IP)];strcpy(UDP_SERVER_IP, CONST_UDP_SERVER_IP);const char * CONST_pSDKinfo ="566c2dea9420eb37-b6c8-566c2dea9420eb3710525135e8485e80806a2f9c";char * pSDKinfo = new char[strlen(CONST_pSDKinfo)];strcpy(pSDKinfo, CONST_pSDKinfo);// 调用10次for (int i = 0; i < 5; i++) {CreateSDKBuffFromStr(pSDKinfo, buffer, (char *)UDP_SERVER_IP, UDP_TEST_PORT);for (int i = 0; i <= 20; i++){// 水印在前20字节printf("%d ", (int8_t)buffer[i]);}printf("\\n\\n");}