教程:获取玩家档案

本教程介绍如何:

  • 创建具有显示名称的用户
  • 进行玩家档案通话
  • 获取玩家创建时间和上次登录时间
  • 配置游戏的玩家个人资料视图约束
  • 通过登录操作获取玩家档案

要求

  • 一个 PlayFab 开发者帐户
  • Unity 编辑器的已安装副本。 若要通过 Unity Hub 或 Unity+ 安装 Unity 以供个人使用,请参阅下载 Unity

    注意

    PlayFab Unity3D SDK 支持 Unity 编辑器版本 5.3(2015 年 12 月发布)及更高版本。

  • Unity 项目 * 可以是以下任一项:
    • 全新的项目。 有关详细信息,请参阅 首次启动 Unity
    • 引导式教程项目。 有关详细信息,请参阅 Unity 入门
    • 一个现有项目。
  • PlayFab Unity3D SDK

在学习本教程之前,您需要掌握为作品创建玩家的基础知识,以便对玩家执行 GetPlayerProfile

如果不熟悉 Game Manager,请先阅读 Game Manager 快速入门(因为我们需要在 Game Manager 中配置档案约束)。

本文中的 C# 示例是为 Unity SDK 编写的。 Unity SDK 使用事件驱动模型来处理非同步任务。 若要使用标准 C# 或 Xamarin C# SDK 运行示例代码,必须修改代码以使用异步任务模型。 必须修改的方法在签名中将异步附加到方法名称。 例如,Unity SDK 中的 SetObject 在标准 C# SDK 中变为 SetObjectAsync。 对此,请参阅 使用 async 和 await 进行异步编程

创建具有显示名称的用户

第一步是创建玩家并向用户添加显示名称。 此示例将创建一个显示名称为 UnicornTossMaster 的新用户。

void CreatePlayerAndUpdateDisplayName() {
    PlayFabClientAPI.LoginWithCustomID( new LoginWithCustomIDRequest {
        CustomId = "PlayFabGetPlayerProfileCustomId",
        CreateAccount = true
    }, result => {
        Debug.Log("Successfully logged in a player with PlayFabId: " + result.PlayFabId);
        UpdateDisplayName();
    }, error => Debug.LogError(error.GenerateErrorReport()));
}

void UpdateDisplayName() {
    PlayFabClientAPI.UpdateUserTitleDisplayName( new UpdateUserTitleDisplayNameRequest {
        DisplayName = "UnicornTossMaster"
    }, result => {
        Debug.Log("The player's display name is now: " + result.DisplayName);
    }, error => Debug.LogError(error.GenerateErrorReport()));
}

控制台输出应显示:

Successfully logged in a player with PlayFabId: SOME_PLAYFAB_ID
The player's display name is now: UnicornTossMaster

进行玩家档案通话

下一步是为玩家 usin 创建一个非常基本的配置文件

下面的示例使用基本 GetPlayerProfile 调用。

void GetPlayerProfile(string playFabId) {
    PlayFabClientAPI.GetPlayerProfile( new GetPlayerProfileRequest() {
        PlayFabId = playFabId,
        ProfileConstraints = new PlayerProfileViewConstraints() {
            ShowDisplayName = true
        }
    },
    result => Debug.Log("The player's DisplayName profile data is: " + result.PlayerProfile.DisplayName),
    error => Debug.LogError(error.GenerateErrorReport()));
}

响应包括 PlayerProfileModel 对象,其中包含玩家的显示名称 UnicornTossMaster

获取玩家创建时间和上次登录时间

PlayerProfileModel 对象中,有大量关于玩家的数据。 在上一步中,我们发出了 GetPlayerProfile,收到的响应仅包含显示名称信息。

下一步是获取玩家更多 的档案数据。 为此,请在 PlayerProfileViewConstraints请求参数中使用其他字段调用GetPlayerProfile

下面的 C# 示例修改了第 2 步中的 GetPlayerProfile 方法,并通过在 ProfileConstraints 中设置 CreatedLastLogin 字段的标志来调用 GetPlayerProfile 请求这些信息。

注意

此步骤中的调用将失败!!!

void CreatePlayerAndUpdateDisplayName(string playFabId) {
    PlayFabClientAPI.GetPlayerProfile( new GetPlayerProfileRequest() {
        PlayFabId = playFabId,
        ProfileConstraints = new PlayerProfileViewConstraints {
            ShowDisplayName = true,
            ShowCreated = true,
            ShowLastLogin = true
        }
    },
    result => Debug.Log("The player's profile Created date is: " + result.PlayerProfile.Created),
    error => Debug.LogError(error.GenerateErrorReport()));
}

如果此时运行此示例代码,则会返回 Error Code 1303的错误。 RequestViewConstraintParamsNotAllowed,以及一条错误消息,指出存在与游戏当前设置的约束的 JSON 输出 Invalid view constraints

发生此错误的原因是你尚未配置在游戏的配置文件约束设置中显示 CreatedLastLogin 的功能。

配置游戏的玩家个人资料视图约束

若要在调用 GetPlayerProfile API 时获取更多数据,需要配置对可用数据的约束。 这些设置位于 Game Manager 中的游戏设置中。

默认情况下,“允许客户端访问配置文件属性”:仅启用显示名称,允许检索显示名称值。

若要为游戏配置其他约束,请执行以下操作:

  • Game Manager中,选择您的游戏。
  • 选择左上角的齿轮图标,然后选择标题设置
  • 选择 Client Profile Options 选项卡。
  • 若要在 ProfileConstraints中启用创建的LastLogin,请检查创建日期上次登录时间,然后选择保存客户端配置文件选项

PlayFab 设置 * 客户端配置文件选项 * 允许客户端访问配置文件属性

现在,当你调用 1CreatePlayerAndUpdateDisplayName 它返回 PlayerProfileModel 对象,其中包含用户创建时间、上次登录时间和 UnicornTossMaster的显示名称的数据。

通过登录操作获取玩家档案

在大多数情况下,你希望在玩家登录后立即检索玩家个人资料数据。 PlayFab API 允许你将登录调用和调用合并到单个调用中,以检索玩家档案。

以下示例显示如何通过登录请求获取档案信息,并使用 LoginWithCustomId 作为示例。

注意

这适用于所有 登录机制。

void CreatePlayerAndUpdateDisplayName(string customId) {
    PlayFabClientAPI.LoginWithCustomID( new LoginWithCustomIDRequest() {
        CustomId = customId,
        // Define info request parameters
        InfoRequestParameters = new GetPlayerCombinedInfoRequestParams() {
            // And make sure PlayerProfile is included
            GetPlayerProfile = true,
            // Define rules for PlayerProfile request
            ProfileConstraints = new PlayerProfileViewConstraints() {
                // And make sure that both AvatarUrl and LastLogin are included.
                ShowAvatarUrl = true,
                ShowLastLogin = true,
            }
        }
    },
    result =>
    {
        // Extract the data you have requested
        var avatarUrl = result.InfoResultPayload.PlayerProfile.AvatarUrl;
    },
    error => Debug.LogError(error.GenerateErrorReport()));
}