> ## 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.

# PlayFab GDPR - 删除玩家数据

> 如何为遵守 GDPR 删除 PlayFab 玩家数据，包括使用 DeleteMasterPlayerAccount 移除账户或在保留账户的情况下清除数据。

# 删除玩家数据

本文介绍从 PlayFab 删除玩家数据的两种主要方式。你可以[删除整个玩家账户](#delete-a-player-account)或者[在不删除账户的情况下仅删除数据](#delete-account-data-without-deleting-the-account)。

## 删除玩家账户

<Warning>
  删除主玩家账户 (Master Player account) 会从 PlayFab 中删除与该玩家关联的所有数据，等同于将该玩家从你的游戏中删除。DeleteMasterPlayerAccount API 没有选择性地删除与玩家关联的数据的机制。请参阅"删除事件数据"和"删除自定义数据"以了解删除数据同时保留玩家账户的选项。
</Warning>

删除主玩家账户及其数据可以通过使用 [DeleteMasterPlayerAccount](https://learn.microsoft.com/en-us/rest/api/playfab/admin/account-management/delete-master-player-account) 管理 API 完成，该 API 在我们所有的 SDK 中都可用。请阅读[确保找到所有数据](/services/playfab/data-analytics/privacy-compliance/playfab-gdpr-deleting-and-exporting-player-data)。

当你发出删除玩家的请求时，PlayFab 将在将请求发送到队列处理代理之前，快速从我们的核心系统中移除玩家的个人信息，队列处理代理会从辅助系统和子处理器中移除任何剩余的玩家信息。

此 API 会立即返回并提供一个 `JobReceiptId`，你应记录该 ID。JobReceiptId 是 PlayFab 已收到删除玩家请求的验证。

删除完成后，会向为该标题配置的通知电子邮件地址发送一封电子邮件。它包含最初由 API 返回的相同 `JobReceiptId`。任务的完成还会触发 PlayStream 事件。

使用我们的 Webhook 功能，你可以在你选择的端点上注册接收这些事件，并根据需要处理它们。事件将包含一个具有 `JobReceiptId` 的 JSON blob。

以下示例展示了如何在 [C# SDK](/services/playfab/sdks/c-sharp) 中使用管理 API。如果你想使用不同的 SDK，请从 [PlayFab SDK](/services/playfab/sdks/playfab-sdk-intro) 列表中选择一个。

```csharp theme={null}
public static async void StartDeleteMasterPlayerExample(Action<PlayFabError> callback)
{
    var task = await PlayFabAdminAPI.DeleteMasterPlayerAccountAsync(new DeleteMasterPlayerAccountRequest()
    {
        PlayFabId = PlayFabId
    });

    if(task.Error != null)
    {
        callback(task.Error);
    }

    var jobReceiptId = task.Result.JobReceiptId;
    var AffectedTitleList = task.Result.TitleIds; 
    foreach (var title in AffectedTitleList)
    {
        Console.WriteLine(string.Format("Delete Player - Title Affected: {0}", title));
    }

}
```

<Note>
  由于此删除*无法撤销*，我们建议与你的玩家确认，他们对其删除请求的范围和影响感到满意。
</Note>

一旦操作得到确认，使用以下代码继续进行主玩家账户删除。

```csharp theme={null}
//Make sure we are 100% sure we want to do this.
if ( confirm successful ) {
   //create a variable to store a list of titles the player has already been removed from.
   listOfTitlesRemovedFrom
   //Hang on to the receipts from successful deletes.
   listOfReceipts
   foreach(title in <all my titles>){

       //You only need to remove the Master Player once per namespace, so check that you have not
       //already performed this action in the namespace, or you will get an error that
       //the player is already queued for deletion.
       if(title not in listOfTitlesRemovedFrom){
           foreach(pfid in PlayFabIdList){

              //Note: you should do some error handling around this API call.
              response = title.DeleteMasterPlayerAccount(pfid)
              foreach(titleId in response.titleids){
                listOfTitlesRemoved.add(titleId)
              }
              listOfReceipts.add(response.jobreceiptid)
           }
       }
   }

   //Save listOfReceipts somewhere as proof of deletion.

}
```

## 在不删除账户的情况下删除账户数据

使用此列表帮助你删除与玩家账户关联的事件数据。

### 删除事件数据

事件数据包括 PlayStream 事件和遥测。事件数据是事务性的，由用户活动生成。

#### PlayFab Insights

PlayFab Insights 是一种完全托管的解决方案，PlayFab 代表你存储事件数据。

你可以使用 [DeleteMasterPlayerEventData](https://learn.microsoft.com/en-us/rest/api/playfab/admin/account-management/delete-master-player-event-data) API 在玩家请求时删除 Insights 数据。这仅删除 PlayFab Insights 中与该玩家相关的数据，保留所有其他数据不变。

### 删除自定义数据

自定义数据指的是一大类允许你将任意数据与玩家关联的功能。PlayFab 提供从游戏逻辑与数据交互的方法，但除此之外不解释或理解这些数据。

#### 旧版玩家数据

可以使用以下 API 编辑和删除不同类型的玩家数据：

[UpdateUserData](https://learn.microsoft.com/en-us/rest/api/playfab/server/player-data-management/update-user-data)、[UpdateUserInternalData](https://learn.microsoft.com/en-us/rest/api/playfab/server/player-data-management/update-user-internal-data)、[UpdateUserReadOnlyData](https://learn.microsoft.com/en-us/rest/api/playfab/server/player-data-management/update-user-read-only-data)、[UpdateUserPublisherData](https://learn.microsoft.com/en-us/rest/api/playfab/server/player-data-management/update-user-publisher-data)、[UpdateUserPublisherInternalData](https://learn.microsoft.com/en-us/rest/api/playfab/server/player-data-management/update-user-publisher-internal-data)、[UpdateUserPublisherReadOnlyData](https://learn.microsoft.com/en-us/rest/api/playfab/server/player-data-management/update-user-publisher-read-only-data)

这些 API 都接受一个 **KeysToRemove** 参数，该参数接受应从玩家档案中删除的玩家数据键列表。

#### 实体对象

可以使用 SetObjects API 删除[实体对象](/services/playfab/live-service-management/game-configuration/entities/entity-objects)。在请求正文的 Objects 数组中，为要删除的每个对象创建一个条目，指定其 ObjectName 并将 DeleteObject 设置为 true。以下是请求正文示例。

```HTTP theme={null}
{ 
    "Entity": { 
        "Id": "<The ID of the target entity>", 
        "Type": "<either 'title_player_account', 'master_player_account', or 'character'>" 
    }, 
    "Objects": [ 
        { 
            "ObjectName": "<Name of object to delete>", 
            "DeleteObject": true 
        } 
    ] 
} 
```

#### 实体文件

使用 [DeleteFiles](https://learn.microsoft.com/en-us/rest/api/playfab/data/file/delete-files) API 删除[实体文件](/services/playfab/live-service-management/game-configuration/entities/entity-files)。


## Related topics

- [PlayFab GDPR - 删除和导出玩家数据](/zh-CN/services/playfab/data-analytics/privacy-compliance/playfab-gdpr-deleting-and-exporting-player-data.md)
- [PlayFab GDPR - 导出玩家数据](/zh-CN/services/playfab/data-analytics/privacy-compliance/gdpr-exporting-player-data.md)
- [PlayFab 玩家进程文档](/zh-CN/services/playfab/player-progression/index.md)
- [PlayFab 数据与分析文档](/zh-CN/services/playfab/data-analytics/index.md)
- [玩家数据](/zh-CN/services/playfab/player-progression/player-data/index.md)
