删除玩家数据

本文介绍了从 PlayFab 中删除玩家数据的两种主要方法。 可以删除整个 Player 帐户,也可以仅删除数据而不删除帐户

删除玩家帐户

警告

删除主玩家帐户会从 PlayFab 中删除与玩家关联的所有数据,同时也会从游戏中删除该玩家。 DeleteMasterPlayerAccount API 没有选择性地删除与玩家关联的数据的机制。 有关删除数据和保留玩家账户的选项,请参阅删除事件数据和删除自定义数据。

可以使用 DeleteMasterPlayerAccount 管理员 API (在所有 SDK 中可用)来删除主玩家帐户和数据。 请阅读确保找到所有数据

请求删除玩家时,PlayFab 会首先将玩家的个人信息从核心系统中快速删除,然后将请求发送给队列处理代理,该代理会从辅助系统和子处理器中移除有关玩家的任何其余信息。

此 API 立即返回并提供 JobReceiptId,应该将它存储到记录中。 JobReceiptId 是验证 PlayFab 是否收到了删除玩家的请求。

删除完成后,会向为游戏配置的通知电子邮件地址发送电子邮件。 它包含最初从 API 返回的相同 JobReceiptId。 任务的完成也会触发 PlayStream 事件。

使用我们的 WebHook 功能可以进行注册,从而在所选终结点上接收这些事件并根据需要进行处理。 事件包含一个具有 JobReceiptId 的 JSON Blob。

下面的示例介绍如何将管理员 API 与 C# SDK 结合使用。 如果要使用其他 SDK,请从 PlayFab SDK 列表中选择一个。

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

}

注意

由于这种删除 无法撤销,我们建议与玩家确认,他们是否对其删除请求的范围和影响感到满意。

确认操作后,使用以下代码继续删除主玩家帐户。

//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 API 删除见解数据。 这将仅删除 PlayFab Insights 中存储的与玩家相关的数据,而不会删除所有其他数据。

删除自定义数据

自定义数据是指一大类功能,可用于将任意数据与玩家相关联。 PlayFab 提供与游戏逻辑中的数据进行交互的方法,但不解释或理解数据。

旧版玩家数据

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

UpdateUserData, UpdateUserInternalData, UpdateUserReadOnlyData, UpdateUserPublisherData, UpdateUserPublisherInternalData, UpdateUserPublisherReadOnlyData

每个 API 都采用 KeysToRemove 参数,该参数采用应从玩家个人资料中删除的玩家数据密钥列表。

实体对象

可以使用 SetObjects API 删除实体对象。 在请求正文的对象数组中,通过指定其 ObjectName 并将 DeleteObject 设置为 true,为要删除的每个对象创建条目。 以下是示例请求正文。

{ 
    "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 API 删除实体文件