> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 玩家封禁系统

> 使用 Game Manager、ReportPlayer 和服务器 API 封禁管理调用应用 PlayFab 玩家封禁,使违规者的身份验证令牌失效。

玩家封禁功能允许你限制某些违反规则的玩家访问游戏。当对玩家应用封禁时,任何现有的玩家身份验证令牌都会失效,该玩家未来的身份验证尝试也会被拒绝。玩家封禁可以是永久性的,也可以是指定时间范围内的临时封禁,且可以针对玩家 ID 或 IP 地址应用。封禁的范围仅限于一个游戏,不适用于你[命名空间](/services/playfab/live-service-management/game-configuration/entities)中的其他任何游戏。

<Note>
  对于新集成,我们建议使用专用的 [IP 封禁系统](/services/playfab/player-progression/player-data/ip-bans),而不是在玩家封禁中指定 IP 地址。
</Note>

以下教程向你展示如何通过 PlayFab API 和 Game Manager 使用封禁系统。

## 识别

虽然你的游戏可能有自定义系统来识别作弊者和违规者,但 PlayFab 提供了玩家对玩家的举报机制。本质上,你依靠玩家来举报其他有问题的玩家。

若要让客户端举报特定玩家,请在客户端代码中使用以下代码片段。

```csharp theme={null}
public void ReportPlayer(string problematicPlayerId, string reason) {
    PlayFabClientAPI.ReportPlayer(new ReportPlayerClientRequest() {
        ReporteeId = problematicPlayerId,
        Comment = reason
    }, result => {
        //... Handle success
    }, error => {
        Debug.Log(error.GenerateErrorReport());
    });
}
```

此 API 调用会生成:

* 一个**举报事件**,你可以通过**分析**工具 **(1)** 定位它。
* 选择 **player\_reported\_as\_abusive** 事件类型 **(2)**。
* 这将显示:
  * **事件名称 (3)**。
  * 被举报的**玩家 ID (4)**。

<img src="https://mintcdn.com/microsoft-4404708b/U1LR64ZWxo45eXwl/images/playfab/player-progression/player-data/tutorials/game-manager-event-history-player-reported-as-abusive.png?fit=max&auto=format&n=U1LR64ZWxo45eXwl&q=85&s=2d2e5165fee8b1923bd8e693be322296" alt="Game Manager - 分析 - 事件历史记录" width="2560" height="1039" data-path="images/playfab/player-progression/player-data/tutorials/game-manager-event-history-player-reported-as-abusive.png" />

## 应用封禁

一旦识别出有问题的玩家,你可能会应用封禁。有两种方法可以应用封禁:通过 Game Manager 手动应用,或通过代码以编程方式应用。

### 从 Game Manager 创建封禁

社区管理代表可能希望使用 Game Manager 应用封禁。

1. 导航到 Players 部分。
2. 找到并选择有问题的玩家。
3. 导航到 **Bans** 选项卡。
4. 选择 **Add Ban** 以显示 **Add Ban** 表单。
5. 输入封禁**原因**和期望的持续时间。可选地,你可以按特定 **IP ADDRESS (4)** 进行**封禁**。
6. 最后,选择 **ADD BAN** 按钮。

<img src="https://mintcdn.com/microsoft-4404708b/N3T1ucKV7zIMBudj/images/playfab/player-progression/player-data/tutorials/game-manager-players-add-ban.png?fit=max&auto=format&n=N3T1ucKV7zIMBudj&q=85&s=c281ac3e7daaf347d81fde5681c3af87" alt="Game Manager - Players - 添加封禁" width="1280" height="900" data-path="images/playfab/player-progression/player-data/tutorials/game-manager-players-add-ban.png" />

如果一切设置正确,你会在表格中看到一个新的**封禁**。你也可以选择在 **REVOKE BANS** 字段中选择手动移除一个**封禁**。

<img src="https://mintcdn.com/microsoft-4404708b/N3T1ucKV7zIMBudj/images/playfab/player-progression/player-data/tutorials/game-manager-players-bans-revoke-ban.png?fit=max&auto=format&n=N3T1ucKV7zIMBudj&q=85&s=7ce3408617095f8f4a7434e5048e4c7d" alt="Game Manager - Players - Bans - 撤销封禁" width="860" height="450" data-path="images/playfab/player-progression/player-data/tutorials/game-manager-players-bans-revoke-ban.png" />

### 从服务器或服务创建封禁

或者,你可以使用[服务 SDK](/services/playfab/sdks/playfab-sdk-intro)通过下面提供的代码片段以代码方式应用封禁。

```csharp theme={null}
public void AddBan(string playerId, uint hours) {
    PlayFabServerAPI.BanUsers(new BanUsersRequest() {
        Bans = new List<BanRequest>() {
            new BanRequest() {
                DurationInHours = hours,
                PlayFabId = playerId,
                Reason = "Automatic ban for WH",
            }
        }
    }, result => {
        //... Handle success
    }, error => {
        Debug.Log(error.GenerateErrorReport());
    });
}
```

通过代码应用的封禁也会显示在 Game Manager 中目标玩家的封禁表格中。

<Note>
  PlayFab 服务器 SDK 方法提供了更多选项,例如 **IP** 地址封禁。
</Note>

每个应用的封禁都会获得一个分配的 ID。请考虑以下服务器 SDK API 方法以进行精确的封禁管理:

* [GetUserBans](xref:titleid.playfabapi.com.server.accountmanagement.getuserbans)
* [RevokeAllBansForUser](xref:titleid.playfabapi.com.server.accountmanagement.revokeallbansforuser)
* [RevokeBans](xref:titleid.playfabapi.com.server.accountmanagement.revokebans)
* [UpdateBans](xref:titleid.playfabapi.com.server.accountmanagement.updatebans)

<Note>
  你可以使用 CloudScript 函数作为可能封禁玩家的自动化系统的一部分。要了解有关 CloudScript 的更多信息,请参阅我们的教程[编写自定义 CloudScript](/services/playfab/live-service-management/service-gateway/automation/cloudscript/writing-custom-cloudscript)。
</Note>

## 另请参阅

[BanUsers](xref:titleid.playfabapi.com.server.accountmanagement.banusers)


## Related topics

- [IP 封禁系统](/zh-CN/services/playfab/player-progression/player-data/ip-bans.md)
- [从游戏发送信誉反馈](/zh-CN/services/xbox-services/community/reputation/concepts/live-sending-reputation-feedback.md)
- [PlayFab 概念](/zh-CN/services/playfab/get-started/concepts.md)
- [PlayFab Game Manager 中的 API 功能设置](/zh-CN/services/playfab/live-service-management/gamemanager/api-feature-settings-in-the-playfab-game-manager.md)
- [Foundation Mode 概览](/zh-CN/services/playfab/get-started/mode-overview.md)
