手游智能反外挂iOS端接入文档(C#)

一、隐私说明

详情请参照网易易盾隐私政策,请放到应用“隐私协议”中。

二、接入说明

1、接入步骤

接入反外挂SDK,开发者需要完成以下步骤

1. 根据游戏运行平台将SDK动态库拷贝到指定工程目录;
2. 修改项目配置;
3. 初始化SDK;
4. 根据用户登录信息调用SDK接口函数;
5. 验证SDK接入是否正确;
6. 可选择性的接入相关功能性接口。

2、文件说明

安全SDK在iOS系统下接入需要的相关文件有以下:

libRiskPerception.a
RiskPerceptionBundle.bundle(需要白盒加密时导入)
RiskPerception.cs

三、接入步骤

1、导入组件


(1)使用RiskPerception.unitypackage

打开unity工程,双击RiskPerception.unitypackage,导入libRiskPerception.aRiskPerceptionBundle.bundle(需要白盒加密时导入)、 RiskPerception.cs文件到您的工程。

如需使用白盒加密,导入RiskPerceptionBundle.bundle文件到您的工程。


(2)添加头文件

引入RiskPercetion.cs

2、权限说明

在xcode工程中info.plist文件中添加

1、Privacy - Location Always and When In Use Usage Description
2、App Transport Security Settings-Allow Arbitrary Loads

3、修改项目配置

自动化配置引入XCodeConfig.cs

4、使用SDK


(1)初始化

选择第一个或主场景(Scene),在任意脚本文件(建议选择较早加载的脚本)中调用如下代码进行初始化。


a 中国大陆应用
NTESSecProtect.InitWithAppId(AppID);

b 台湾应用
NTESSecProtect.SetServerType(2);
NTESSecProtect.InitWithAppId(AppID);

c 其他地区应用
NTESSecProtect.SetServerType(3);
NTESSecProtect.InitWithAppId(AppID);

说明
:

设置区域信息的接口: SetServerType,需要在初始化接口: InitWithAppId之前调用.

AppID可在智能反外挂下的服务管理查询AppID,或者可在群里咨询技术支持人员。AppID示例:I003722234


(2)设置角色信息

用户登录或者切换游戏账号的时候,调用以下接口

NTESSecProtect.SetRoleInfoUserId("userId","userName","userAccount","userSever","gameJson");

说明:

只有调用了SetRoleInfoUserId接口,才会启动反外挂功能.

5、接入验证

1、确保工程中SDK相关接口已调用。

2、运行程序,确保已触发相关接口。

3、前往官网查询数据. 输入用户名进行查询

四、SDK接入调用说明

1、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);

2、登录接口/设置角色信息


接口用途:

在进行数据采集的过程中,会将角色ID、角色名称、角色账号等设置在反外挂采集的数据中一同上传,标识了用户的信息后,对应有恶意行为的用户可以进行相应的惩罚。


函数原型:
public static void SetRoleInfo(string userId, string userName, string userAccount, string userServer, string gameJson);

参数说明:
参数说明
user_id用户ID,建议使用唯一ID。必传参数
user_name用户名称
user_account用户账号
user_name用户所在服务器
game_json自定义数据。请使用json字符串格式

示例代码:
NTESSecProtect.SetRoleInfo("userId","userName","userAccount","userSever","gameJson");

3、设置自动化透传类型


接口用途:

在使用自动化透传后,可以设置自动化透传的类型


接入须知:

不使用自动化透传,不需要调用相关接口


函数原型:
public static void SetPassthroghType(int type)

参数说明:
参数说明
Type1、自动透传模式会自动根据网络情况选择网络传输方案。
2、强制透传模式。默认状态为自动透传模式。完全使用透传方案

示例代码:
public static void SetPassthroghType(2);

4、设置区域信息


接口用途:

非中国大陆地区,因为网络和监管需要,需要设置区域信息,以支持在不同的地区使用不同的网络进行数据传输。


接入须知:

不调用此接口默认为中国大陆。非中国大陆应用和台湾地区,需要调用此接口。如不按规范设置,可能会有数据丢失问题存在。设置时,请与技术支持确认。


函数原型:
public static void SetServerType(int type);

参数说明:
参数说明
Type服务器地区类型 1、中国大陆 2、台湾地区 3、非中国大陆地区。
示例代码:
台湾地区应用
NTESSecProtect.SetServerType(2);
非中国大陆和台湾地区应用
NTESSecProtect.SetServerType(3);

5、退出登陆


接口用途:

账号退出登陆可以使用以下接口。


接入须知:

如果切换账号可以直接使用“设置角色信息”接口,会自动退出自己登陆的账号。


函数原型:
public static void LogOut();

示例代码:
NTESSecProtect.LogOut();

6、心跳系统


接口用途:

保障反外挂服务的安全,防止易盾反外挂服务被中止或者被剥离的风险,定时向游戏方反馈心跳信息,告知游戏方当前反外挂运行状态,既方便游戏方实时掌握反外挂运行状态,也能保障易盾反外挂服务的正常运行。


接入须知:

设置心跳回调。心跳系统每十秒调用一次或者出现异常的情况下会触发回调。(心跳系统在非主线程中运行,如需进行UI操作请切回到主线程中。) 回调结果需要进行解密。对接时请联系运营同学,获取相应的解密文件。


函数原型:
private static extern void ___heartbeatCheckResult(heartBeatCallBack callBack);

参数说明:
参数说明
blockheartBeatCallBack 加密数据

解密后参数说明:
名称标示说明异常情况是否每次必有
序列号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,说明网络异常

示例代码:

注册回调

#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);

}

7、举报系统


接口用途:

游戏场景下,若玩家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用户账号
user_server用户所在服务器
report_desc举报描述
verification_span查询时间维度。以小时为单位,最大为24小时。建议设置为1
eport_type外挂:NTESRiskReportPlug
工作室:NTESRiskReportStudio

示例代码:
NTESSecProtect.ReportedRoleInfo ("userId","userName","userAccount","userSever"," report_desc ",1, NTESSecProtect.NTESRiskReportType.NTESRiskReportPlug);

8、数据查询


接口用途:

通过查询类型获取指定的数据。可用于获取签名信息、 越狱状态、 sdk版本、白盒加密。


函数原型:
public static string QueryData(NTESRiskQueryType queryType, string data);

参数说明:
参数说明
queryTypeNTESRiskQuerySignInfo 签名信息
NTESRiskQueryRootStatus 越狱状态
NTESRiskQuerySDKVersion sdk版本
NTESRiskQueryWhiteBox 白盒加密
data白盒加密时需要传入,其他使用可为空

返回值说明:
返回值说明
NSString *对应查询的数据

示例代码:
string sign = NTESSecProtect.QueryData(NTESSecProtect.NTESRiskQueryType.NTESRiskQueryRootStatus,"");

9、白盒加密


接口用途:

可用于对数据进行加密。


接入须知:

白盒加密每个客户端都有单独的白盒查找表,需要替换RiskPerceptionBundle.bundle文件中pic_error_741.png文件(需要找运营获取)


函数原型:
public static string QueryData(NTESRiskQueryType queryType, string data);

参数说明:
参数说明
queryTypeNTESRiskQueryWhiteBox 白盒加密
data传入加密数据

返回值说明:
返回值说明
NSString *加密数据

示例代码:
string sign = NTESSecProtect.QueryData(NTESSecProtect.NTESRiskQueryType. NTESRiskQueryWhiteBox,"白盒加密数据");

10、作弊监控


接口用途:

实时获取作弊监控结果。


接入须知:

此接口获取的为查询token。客户服务端调用相关的查询接口获取查询结果。服务端接口文档


函数原型:
private static extern void ___getActualRiskToken(int timeout, actualRiskCallBack callBack);


参数说明:
返回值说明
Timeout超时时间(100ms-10000ms)。默认3000ms
actualRiskCallBackcode 状态码 200为正确状态
token 查询token

示例代码:

注册回调

#if UNITY_IPHONE || UNITY_IOS
		if (Application.platform == RuntimePlatform.IPhonePlayer)
		{
            NTESSecProtect.actualRiskCallBack render = new NTESSecProtect.actualRiskCallBack(NTESSecProtect.actualRiskAction);
            NTESSecProtect.___getActualRiskToken(render);
		}
#endif

回调函数

[MonoPInvokeCallback(typeof(NTESSecProtect.actualRiskCallBack))]
public static void actualRiskAction(int code, string token)
{
	UnityEngine.Debug.Log(result);  
}