PlayFab GDPR - 删除和导出玩家数据

PlayFab 符合一般数据保护条例 (GDPR) 标准 - 作为服务提供商,确保提供使玩家可以查看或删除围绕他们所存储的数据所需的挂钩。

我们无法为你提供法律建议—我们鼓励寻求法律顾问以确保遵守 GDPR—但还是很乐意帮助履行 GDPR 规定的义务。

PlayFab 有三个可用的 API,可帮助响应玩家数据请求:

  • GetPlayedTitleList - 调用此 API 可获取具有与给定玩家关联的数据的 TitleId 列表。 此列表由 PublisherID 确定范围,表示在删除或导出此玩家数据时会受影响的游戏集。
  • DeleteMasterPlayerAccount - 调用此 API 可删除给定玩家的记录。
  • ExportMasterPlayerData - 调用此 API 可导出给定玩家的所有关联数据和记录。

确保找到所有数据

使用DeleteMasterPlayerAccountExportMasterPlayerData API 之前,必须注意,玩家可能通过工作室创建了多个主玩家帐户。

当玩家使用不同设备或不同凭据玩游戏时,可能会发生这种情况。 因为他们提供不同的不相关凭据(例如,电子邮件地址或社交媒体帐户),所以我们会将他们解释为唯一的玩家。

玩家可能具有多个主玩家帐户的另一种方式是将工作室配置为使用多个发布者 ID 时;但是,具有多个发布者 ID 并不常见。

可以在每个“标题”设置菜单的 API 功能 选项卡上的 PlayFab Game Manager 中检查游戏的“发布者 ID”。

PlayFab - Settings -“API”选项卡

了解自己的游戏以及游戏如何对玩家进行身份验证。 调用 DeleteMasterPlayerAccountExportMasterPlayerData 之前,请确保从玩家收集正确的设备 ID 和/或凭剧集。

借助这些凭据,我们可以标识每个 主玩家帐户的 PlayFabId。

以下 API 可帮助从凭据转换为PlayFabId

注意

所有这些 API 都特定于游戏。 前两个是管理员 API,后两个是服务器 API。

即使玩家只有一个 PlayFabId,他们可能会使用该 ID 玩多个游戏。 这意味着其数据请求可能会跨多个游戏。

若要获取此游戏列表,请对每个 PlayFabId 调用 GetPlayedTitleList。 你可能希望告知玩家,其请求会影响返回的游戏列表。

此外,GetPlayedTitleList会返回TitleIds不是Title Names - 在确认页面中显示这些信息之前,请考虑将这些 ID 转换为Title Names

下面是一些伪代码,可更好地表达我们的意思...

//Here you would iterate through a request of known Ids, Emails, linked accounts  
//or other PlayFab searchable info on the player that you have.
//and store it in user credentials for that player.
user {
  credentials: (email/ids/linked accounts)
}

//create a variable to hold a list of all the PlayFabIds you want to remove.
PlayFabIdList

//create a list of affected titles
AffectedTitles


//Keep track of all your titles, this is important
//and should include all titles across all your namespaces.
foreach(title in <all my titles>){

    //each user record you have for the player, you should have a list of credentials for that player
    //so you can find them in PlayFab
    foreach(cred in user.credentials){
      //There are a few helper Admin and Server API's that help you do this part.
      //See below this pseudo code block for some tips!
      pfid = <find PlayFabId in Title using the credential>
      PlayFabIdList.add(pfid)
    }

    //go through the list of PlayFabIds that you have and fine all titles that
    //performing the action would affect
    foreach(pfid in PlayFabIdList){
      AffectedTitles = title.GetPlayedTitleList(pfid)
    }
}

下面是有关如何使用GetPlayedTitleList的快速示例。

public static async void StartFindTitlesExample(Action<PlayFabError> callback)
{

    var task = await PlayFabAdminAPI.GetPlayedTitleListAsync(new GetPlayedTitleListRequest() {
        PlayFabId = PlayFabId
    });

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

    var TitleList = task.Result.TitleIds;
    foreach (var title in TitleList)
    {
        Console.WriteLine(string.Format("Title Found: {0}", title));
    }
    callback(null);
}

此时具有此玩家的PlayFabIds列表(基于其共享的凭据)和每个PlayFabId的游戏列表。 现在该怎么办?

现在已准备好进行删除或导出!

其他注意事项

使用这些 API 容易造成伤害。 对错误玩家导出数据或进行删除可能会非常具有破坏性,并且是永久性的

由游戏开发者负责验证凭据是否与由请求导出或删除其玩家数据的玩家匹配。 PlayFab 在使用这些 API 时不提供任何类型的验证。

不过 PlayFab 会 提供一个电子邮件验证功能。 但是我们的解决方案不是进行验证的唯一选项。 也可以创建自己的 过程。

无论使用何种技术,建议在执行其中任何操作之前进行某种验证。