| 对比项 | 打包器接入 | SDK接入 |
|---|---|---|
| 接入条件 | 不需要源代码,无需编译 | 需要用户端修改部分代码 |
| 接入速度 | 封装软件,接入可用 | 根据说明几分钟搞定 |
| 接入位置 | 封装登陆器 | 不限制,只要是客户端即可 |
| 适用性 | 仅支持EXE,PC平台封装 | 全平台,移动端为主 |
| 拓展性 | 无法使用SDK的AP接口 | 更灵活的使用规则 |
注意:IOS系统默认本地IP只能使用”127.0.0.1”,如接入,默认链接的本地IP,都是”127.0.0.1”
//引入windows基本库#include <windows.h>#include <iostream>
//加载dll库// ---- DLL 函数指针类型 ----using FnShieldStart = char* (*)(char*);using FnShieldStop = char* (*)();using FnShieldGetState = int (*)();using FnShieldVersion = char* (*)();using FnShieldFreeString = void (*)(char*);// ---- 定义DLL结构体并增加析构方法,用来释放库占用内存struct DllGuard {HMODULE hModule = nullptr;explicit DllGuard(const char* path) {hModule = LoadLibraryA(path);if (!hModule)throw std::runtime_error(std::string("LoadLibrary failed: ") + path+ " LastError=" + std::to_string(GetLastError()));std::cout << "[DLL] Loaded: " << path << "\n";}~DllGuard() {if (hModule) {FreeLibrary(hModule);std::cout << "[DLL] Unloaded\n";}}template<typename Fn>Fn proc(const char* name) const {auto fn = reinterpret_cast<Fn>(GetProcAddress(hModule, name));if (!fn)throw std::runtime_error(std::string("GetProcAddress failed: ") + name);return fn;}};// ---- 加载 DLL ----DllGuard dll("shieldmanager.dll");auto ShieldStart = dll.proc<FnShieldStart> ("ShieldStart");auto ShieldStop = dll.proc<FnShieldStop> ("ShieldStop");auto ShieldGetState = dll.proc<FnShieldGetState> ("ShieldGetState");auto ShieldVersion = dll.proc<FnShieldVersion> ("ShieldVersion");auto ShieldFreeString = dll.proc<FnShieldFreeString>("ShieldFreeString");//定义sdk_key字符指针,根据实际gamekey复制即可const char* SDK_KEY_DEFAULT ="";std::string sdkKey = SDK_KEY_DEFAULT;//调用上面定义的shieldStart函数,将真实的sdk_key传入char* result = ShieldStart(const_cast<char*>(sdkKey.c_str()));printResult("ShieldStart", result, ShieldFreeString);//结果为1表示正常启动
<uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.FOREGROUND_SERVICE" /><uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" /><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
implementation fileTree(dir: 'libs', include: ['*.aar'])
import shieldmanager.Shieldmanager// SDK KEYprivate val sdkKey = "your-sdk-key"val resultEncoded = Shieldmanager.start(sdkKey)val resultJson = String(Base64.decode(resultEncoded, Base64.NO_WRAP), Charsets.UTF_8) //对结果进行base64解密val result = JSONObject(resultJson) //启动成功则返回为1val errMsg = result.optString("error", "")val data = result.optString("data", "")
val resultEncoded = Shieldmanager.stop()val resultJson = String(Base64.decode(resultEncoded, Base64.NO_WRAP), Charsets.UTF_8)val result = JSONObject(resultJson)val errMsg = result.optString("error", "")
#import <Shieldmanager/Shieldmanager.h>
//SDN keystatic NSString *const SDK_KEY =@"your-sdk-key";//开启盾,并对结果进行处理NSString *resultB64 = ShieldmanagerStart(SDK_KEY);dispatch_async(dispatch_get_main_queue(), ^{NSString *json = decodeBase64JSON(resultB64);NSDictionary *result = [NSJSONSerializationJSONObjectWithData:[json dataUsingEncoding:NSUTF8StringEncoding]options:0 error:nil];NSString *error = result[@"error"] ?: @"";NSString *data = result[@"data"] ?: @"";if (error.length == 0 && [data isEqualToString:@"1"]) {// error为空,且data 是字符1表示启动成功} else {//error 不为空,则表示启动异常,data为具体的报错}});
NSString *resultB64 = ShieldmanagerStop();dispatch_async(dispatch_get_main_queue(), ^{NSString *json = decodeBase64JSON(resultB64);NSDictionary *result = [NSJSONSerializationJSONObjectWithData:[json dataUsingEncoding:NSUTF8StringEncoding]options:0 error:nil];NSString *error = result[@"error"] ?: @"";if (error.length == 0) {//表示成功关闭} else {//表示关闭异常}});