本文介绍了从 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 删除实体文件。