手游智能反外挂(iOS-C#)接入文档
隐私说明
详情请参照网易易盾隐私政策,请将易盾隐私政策链接放到应用“用户协议”中。
接入说明
接入步骤
接入反外挂SDK,开发者需要完成以下步骤
1. 根据游戏运行平台将SDK动态库拷贝到指定工程目录;
2. 初始化SDK;
3. 根据用户登录信息调用SDK接口函数;
4. 验证SDK接入是否正确;
5. 可选择性的接入相关功能性接口。
文件说明
在iOS系统下接入安全SDK所需的相关文件如下:
libRiskPerception.a
RiskPerception.cs
RiskPerceptionSingle.cs(非单机版不需要导入)
XCodeConfig.cs(自动化配置文件)
接入步骤
导入组件
(1)使用RiskPerception.unitypackage
打开unity工程,双击RiskPerception.unitypackage
,导入文件到您的工程
(2)添加头文件
引入RiskPerception.cs
权限说明
在Xcode工程中的info.plist
文件中添加
1、App Transport Security Settings-Allow Arbitrary Loads(必须)
2、Privacy - Location Always and When In Use Usage Description(非必须)
使用SDK
(1)初始化
选择第一个或主场景(Scene),在任意脚本文件(建议选择较早加载的脚本)中调用如下代码进行初始化。
a 中国大陆应用
NTESSecProtect.InitWithAppId(AppID);
b 台湾应用
NTESSecProtect.SetServerType(2);
NTESSecProtect.InitWithAppId(AppID);
c 香港、澳门及非欧盟海外应用
NTESSecProtect.SetServerType(3);
NTESSecProtect.InitWithAppId(AppID);
d 欧盟地区应用
NTESSecProtect.SetServerType(4);
NTESSecProtect.InitWithAppId(AppID);
说明:
设置区域信息的接口: SetServerType
,需要在初始化接口: InitWithAppId
之前调用。
AppID可在智能反外挂下的服务管理查询AppID,或者可在群里咨询技术支持人员。AppID示例:I003722234
(2)设置角色信息
用户登录或者切换游戏账号的时候,调用以下接口
NTESSecProtect.SetRoleInfo("userId","userName","userAccount","userSever","gameJson");
说明:
只有调用了SetRoleInfo
接口,才会启动反外挂功能。
接入验证
1、确保工程中SDK相关接口已调用。
2、运行程序,确保已触发相关接口。
3、前往官网查询数据。 输入用户名进行查询。
SDK初始化
接口用途:
用于初始化反外挂SDK。
注意:该接口为必须调用接口。
接入须知:
正常环境下,使用直传方式。如需接入透传模式,需联系技术支持人员,设置相应的透传服务器。 自动化透传模式客户端会自动转发到被拦截的请求。
函数原型:
直传模式
public static void InitWithAppId(string appID);
自动化透传模式
public static void InitWithPassthroghUrl(string appID, string url);
参数说明:
参数 | 说明 |
---|---|
app_id | 不同用户或游戏的唯一标识(非bundleID),可在智能反外挂下的服务管理查询AppID,或者可在群里咨询技术支持人员。AppID示例:I003722234 |
url | 透传服务器地址。url示例"https://www.netease163.com"。 |
返回值说明:
返回值 | 说明 |
---|---|
错误返回 NO | 初始化失败 |
正确返回 YES | 初始化成功 |
示例代码:
NTESSecProtect.InitWithAppId(AppID);
登录接口/设置角色信息
接口用途:
在进行数据采集的过程中,会将角色ID、角色名称、角色账号等设置在反外挂采集的数据中一同上传,标识了用户的信息后,对应有恶意行为的用户可以进行相应的惩罚
注意:该接口为必须调用接口。
函数原型:
public static void SetRoleInfo(string userId, string userName, string userAccount, string userServer, string gameJson);
参数说明:
参数 | 说明 |
---|---|
user_id | 用户ID,建议使用唯一ID。必传参数 |
user_name | 用户名称 |
user_account | 用户/玩家的账号;如业务方同时接入易盾反垃圾,则此账号需要与反垃圾接入中的account一致 |
user_server | 用户所在服务器 |
game_json | 自定义数据。请使用json字符串格式 |
示例代码:
NTESSecProtect.SetRoleInfo("userId","userName","userAccount","userSever","gameJson");
设置自动化透传类型
接口用途:
在使用自动化透传后,可以设置自动化透传的类型
接入须知:
不使用自动化透传,不需要调用相关接口
函数原型:
public static void SetPassthroghType(int type)
参数说明:
参数 | 说明 |
---|---|
Type | 1、自动透传模式会自动根据网络情况选择网络传输方案。 2、强制透传模式。默认状态为自动透传模式。完全使用透传方案 |
示例代码:
public static void SetPassthroghType(2);
设置区域信息
接口用途:
非中国大陆地区,因为网络和监管需要,需要设置区域信息,以支持在不同的地区使用不同的网络进行数据传输。
接入须知:
不调用此接口默认为中国大陆。非中国大陆应用和台湾地区,需要调用此接口。如不按规范设置,可能会有数据丢失问题存在。设置时,请与技术支持确认。
函数原型:
public static void SetServerType(int type);
参数说明:
参数 | 说明 |
---|---|
Type | 服务器地区类型 1、中国大陆 2、台湾地区 3、香港、澳门及非欧盟海外地区 4、欧盟地区 |
示例代码:
台湾地区应用
NTESSecProtect.SetServerType(2);
香港、澳门及非欧盟海外地区
NTESSecProtect.SetServerType(3);
欧盟地区
NTESSecProtect.SetServerType(4);
退出登录
接口用途:
账号退出登录可以使用以下接口。
接入须知:
如果切换账号可以直接使用“设置角色信息”接口,会自动退出自己登录的账号。
函数原型:
public static void LogOut();
示例代码:
NTESSecProtect.LogOut();
心跳系统
接口用途:
保障反外挂服务的安全,防止易盾反外挂服务被中止或者被剥离的风险,定时向游戏方反馈心跳信息,告知游戏方当前反外挂运行状态,既方便游戏方实时掌握反外挂运行状态,也能保障易盾反外挂服务的正常运行。
接入须知:
设置心跳回调。心跳系统每十秒调用一次或者出现异常的情况下会触发回调。(心跳系统在非主线程中运行,如需进行UI操作请切回到主线程中。) 回调结果需要进行解密。对接时请联系运营同学,获取相应的解密文件。
函数原型:
public static extern void ___heartbeatCheckResult(heartBeatCallBack callBack);
public static extern void ___heartbeatCheckResultWithType(int type, heartBeatCallBack callBack);
参数说明:
参数 | 说明 |
---|---|
type | 1为未加密数据,2为加密数据,需要服务端进行解密 |
callBack | heartBeatCallBack 加密数据 |
解密后参数说明:
名称 | 标示 | 说明 | 异常情况 | 是否每次必有 |
---|---|---|---|---|
序列号 | seq | 从初始值“1”开始递增 | 序列号不存在,或者乱序 | 是 |
时间戳 | t | 当前时间戳,以秒为单位 | 时间戳非当前时间 | 是 |
网络标识 | net | 数据发送是否成功 (1 为成功,0 为失败) |
网络异常,数据发送失败,则网络标识为0 | 是 |
- 易盾网络通信正常时:
seq:1||t:1589781840||net:1
- 当易盾网络通信异常时:
seq:1||t:1589781840||net:0
处理建议:
- seq、t和net是否出现,这三个标识是心跳系统一定会返回的值,如果没有出现,说明反外挂异常。
- seq的值是否符合"从1开始依次递增"的规则,如果不符合,说明返回值被篡改。
- net为0是否长期出现,如果在5分钟内net的取值都为0,说明可能存在网络异常。
- net第一次为0的时候,建议发送自助式透传数据到易盾服务器,在后续再次从1->0的时候再次发生自助式透传数据。
示例代码:
注册回调
#if UNITY_IPHONE || UNITY_IOS
if (Application.platform == RuntimePlatform.IPhonePlayer)
{
NTESSecProtect.heartBeatCallBack render = new NTESSecProtect.heartBeatCallBack(heartBeatAction);
NTESSecProtect.___heartbeatCheckResult(render);
}
#endif
回调函数
[MonoPInvokeCallback(typeof(heartBeatCallBack))]
public static void heartBeatAction(string result)
{
UnityEngine.Debug.Log(result);
}
举报系统
接口用途:
游戏场景下,若玩家A发现玩家B有存在使用外挂嫌疑,玩家A可通过游戏举报系统举报B。游戏方举报系统可接入易盾举报验证功能判断B游戏用户是否使用了外挂。
接入须知:
接入易盾举报系统后,游戏方可对举报系统后,进行数据清洗,筛选出有用的举报信息,并及时处理;也可凭借易盾智能反外挂挖掘类似恶意玩家。服务端接口文档
函数原型:
public static void ReportedRoleInfo(string userId, string userName, string userAccount, string userSever, string report_desc, int verification_span, NTESRiskReportType report_type);
参数说明:
参数 | 说明 |
---|---|
user_id | 用户ID,建议使用唯一ID。必传参数。 |
user_name | 用户名称 |
user_account | 用户/玩家的账号;如业务方同时接入易盾反垃圾,则此账号需要与反垃圾接入中的account一致 |
user_server | 用户所在服务器 |
report_desc | 举报描述 |
verification_span | 查询时间维度。以小时为单位,最大为24小时。建议设置为1 |
report_type | 外挂:NTESRiskReportPlug 工作室:NTESRiskReportStudio |
示例代码:
NTESSecProtect.ReportedRoleInfo ("userId","userName","userAccount","userSever"," report_desc ",1, NTESSecProtect.NTESRiskReportType.NTESRiskReportPlug);
数据查询
接口用途:
通过查询类型获取指定的数据。可用于获取签名信息、 越狱状态、 SDK版本、白盒加密。
函数原型:
public static string QueryData(NTESRiskQueryType queryType, string data);
参数说明:
参数 | 说明 |
---|---|
queryType | NTESRiskQuerySignInfo 签名信息 NTESRiskQueryRootStatus 越狱状态 NTESRiskQuerySDKVersion sdk版本 NTESRiskQueryWhiteBox 白盒加密 NTESRiskQueryWhiteBoxDec 白盒解密 NTESRiskQueryYiDunID 跨应用ID |
data | 白盒加密时需要传入,其他使用可为空
返回值说明:
返回值 | 说明 |
---|---|
NSString * | 对应查询的数据 |
示例代码:
string sign = NTESSecProtect.QueryData(NTESSecProtect.NTESRiskQueryType.NTESRiskQueryRootStatus,"");
白盒加密
接口用途:
可用于对数据进行加密和解密。
接入须知:
白盒加密每个客户端都有单独的白盒查找表在RiskPerceptionBundle.bundle文件(需要找运营获取),需要将文件加入工程中和sdk同一目录下。
函数原型:
public static string QueryData(NTESRiskQueryType queryType, string data);
参数说明:
参数 | 说明 |
---|---|
queryType | NTESRiskQueryWhiteBox 白盒加密 NTESRiskQueryWhiteBoxDec 白盒解密 |
data | 传入加密数据 |
返回值说明:
返回值 | 说明 |
---|---|
NSString * | 加密或解密数据 |
示例代码:
加密
string sign = NTESSecProtect.QueryData(NTESSecProtect.NTESRiskQueryType. NTESRiskQueryWhiteBox,"白盒加密数据");
解密
string sign = NTESSecProtect.QueryData(NTESSecProtect.NTESRiskQueryType. NTESRiskQueryWhiteBoxDec,"解密数据");
自助式透传
接口用途:
用于获取透传数据,进行自助式数据转发。
接入须知:
游戏方自行选择获取数据的时机。建议将数据合并到其他加密数据中,发送到游戏服务器,通过请求发送到易盾服务器。
函数原型:
public static extern string GetUploadData();
返回值说明:
返回值 | 说明 |
---|---|
string | 此处获取的数据为body数据。服务端相关设置内容参考服务端接口文档 |
示例代码:
string sign = NTESSecProtect.GetUploadData();
作弊监控/支付安全
接口用途:
用于实时获取作弊监控、支付安全结果。
接入须知:
此接口获取的为查询token。客户服务端调用相关的查询接口获取查询结果。
函数原型:
public static extern void ___getActualRiskToken(int timeout, actualRiskCallBack callBack);
参数说明:
返回值 | 说明 |
---|---|
Timeout | 超时时间(100ms-10000ms)。默认3000ms |
callBack | code 状态码 200为正确状态 token 查询token |
示例代码:
注册回调
#if UNITY_IPHONE || UNITY_IOS
if (Application.platform == RuntimePlatform.IPhonePlayer)
{
NTESSecProtect.actualRiskCallBack render = new NTESSecProtect.actualRiskCallBack(actualRiskAction);
NTESSecProtect.___getActualRiskToken(3000,render);
}
#endif
回调函数
[MonoPInvokeCallback(typeof(NTESSecProtect.actualRiskCallBack))]
public static void actualRiskAction(int code, string token)
{
UnityEngine.Debug.Log(token);
}
12、设置代理闪退模式
接口用途:
用于用户使用代理软件(包含VPN、抓包等工具)拦截易盾网络请求时进行闪退处理(正常网络情况下不会闪退)。此功能涉及闪退,建议游戏方进行动态下发配置,不建议将配置硬编码,避免因特殊原因造成的闪退问题。
接入须知:
设置此接口可以对以下两类软件进行处理。高危包含Quantymult、Quantymult X、Thor、charles、含拦截功能VPN等。低危包含各类网络加速等。
注:如果设置此接口后,用户使用了代理软件,且自身的代理网络存在问题,也会视为拦截易盾请求并进行闪退。通过此方式的闪退,由于网络失效数据,将不会上传至易盾服务器。
函数原型:
public static void SetVPNCrashType(int type);
参数说明:
返回值 | 说明 |
---|---|
type | 0、不拦截代理(默认为0,不需要进行设置) 1、高危代理拦截闪退 2、全部代理拦截闪退(高危、低危) |
示例代码:
NTESSecProtect.SetVPNCrashType(1);