## 接入步骤
请登录[易盾官网后台](https://dun.163.com/dashboard?v=0116&locale=zh-CN#/m/risk-manage/service/)风控引擎-服务管理获取SDK，详情如图![image title](https://nos.netease.com/yidun/e5adb07ec735e95205e83d48bb2a00aa.png)
### 引入/安装js SDK

#### Web

建议直接通过 `script `引入, 将放在初始化代码之前

```html
<script src="./YiDunProtector-Web.js"></script>
```

#### uni-app（H5）

```js
import createNEGuardian from  './YiDunProtector-Web.js'
或者
import './YiDunProtector-Web.js'
```

### 初始化SDK
执行SDK初始化。

```js
const neg = createNEGuardian({ productId: '<PRODUCT_ID>', timeout: 6000 })
```

其中：

`productId` 是应用标识，对应易盾控制台中的产品编号，YD开头

`timeout` 数据上报超时时间，单位 ms，默认 `6000`

注：不可用的productId会导致服务端鉴权接口失败，请确保productId是正常可用的。

### 私有化初始化SDK
执行SDK初始化。

```js
const neg = createNEGuardian({ productId: '<PRODUCT_ID>', apiServer:'https://xxxxx.xxxx.xxxx', timeout: 6000 })
```

其中：

`productId` 是应用标识，对应易盾控制台中的产品编号，YD开头

`apiServer` 私有化服务器地址，私有化的客户需要通过该接口设置服务器地址，其他客户可以忽略

`timeout` 数据上报超时时间，单位 ms，默认 `6000`

注：不可用的productId会导致服务端鉴权接口失败，请确保productId是正常可用的。

### 获取 Token

```js
neg.getToken().then(result => {
  if (result.code === 200) { // 正常情况
    alert('get token:', result.token)
  }
  if (result.code === 201) { // 离线模式
    alert('get token:', result.token)
  }
})
```

getToken 返回有两种模式：
- 正常模式，数据正常上报到设备指纹服务端，token 长度固定
- 离线模式，数据上报过程中出现异常，比如网络抖动/超时等，token 长度不固定

**web/小程序sdk的token可能包含 + ，不建议在传输中使用application/x-www-form-urlencoded，建议application/json**
### 校验结果
前端获取到 `token` 后，将 `token` 上传到业务服务器。
业务服务器根据 `token` 向智能风控服务器发起校验，查询结果
更多接入细节见智能风控服务端接入文档。

### 模拟操作AI识别

批量的模拟操作影响游戏正常运营，请在作弊情况较严重的玩法和场景下调用`registerTouchEvent`和`unregisterTouchEvent`，开启和关闭数据采集，初次接入建议设置一个玩法和场景id，并同步给易盾，如需接入多个玩法和场景需提前与易盾沟通。 开启`registerTouchEvent`后，在该场景结束后必须调用`unregisterTouchEvent`关闭检测逻辑。

#### 开启采集

```js
neg.registerTouchEvent('serverId', 'roldId', gameplayId, scendId, 'canvas').then(function () {
  // your handle...
})
```

其中：

`serverId` 是服务器id，格式为string

`roleId` 是角色id，格式为string

`gameplayId` 是玩法id，格式为number

`scendId` 是场景id，格式为number

`canvas` 是待监听画布对象，不能为空，否则功能将不能正常开启，格式为HTMLCanvasElement

#### 关闭采集

```js
neg.unregisterTouchEvent().then(function () {
   // your handle...
})
```