实体编程模型

实体是 PlayFab API 在操作时最基本的可寻址“内容”。 每个实体都有一个类型和 ID,它们共同对该实体进行唯一标识。 某些类型的实体是“标准”或“内置”的,因为 PlayFab 知道它们的含义,并且/或者会自动创建它们,例如 namespacetitlegroupmaster_player_accounttitle_player_account。 其他对 PlayFab 没有固有的含义,但是对游戏具有意义。

每个实体都有一个配置文件,其中包含该实体拥有的各种资源。 例如,对象、文件、语言设置、策略等。 使用 GetProfile API 直接检索实体配置文件,许多其他 API 针对配置文件内的特定资源进行操作,例如 SetObjects

最后,实体之间存在父/子关系,这些关系决定了控制其他实体如何访问实体资源的权限。 给定实体的“上级”可以在其配置文件的 Lineage 属性中找到。

与经典 API 的比较

了解这些之后,看看“经典”和“实体”API 之间的差异。 如果你正在使用经典 API,那么你已在使用可通过实体 API 使用的相同实体,但它们并不总是显式的。 例如,在“客户端 API”中, UpdateUserDatatitle_player_account 实体上操作, GetUserPublisherDatamaster_player_account 实体上操作, GetCharacterStatisticscharacter (即 title_player_account的子对象)实体上操作, GetTitleData 基于标题操作, GetPublisherDatanamespace 实体上操作。

通常,每个经典 API 都针对一种特定的实体类型进行操作,但实体类型通常是隐式的,不需要根据 API 名称进行操作。 此外,两种类型的实体的等效 API 可能因参数、限制和行为(例如 UpdatePlayerStatisticsUpdateCharacterStatistics)而略有不同。 如果你对此感到困惑,其他人也是一样的。 我们希望在不破坏现有集合兼容性的情况下简化 PlayFab API,进一步实现...

“实体 API”是我们称作的较新的 PlayFab API,它们遵循以下设计目标(也有一些例外)。

  • 处理任意类型的实体。
  • 具有实体“类型”和 ID 的显式参数。
  • 在实体配置文件中对特定资源执行特定操作。
  • 可在多个安全上下文中调用,例如从游戏客户端、游戏服务器、云脚本、后端服务器等,根据调用 API 的实体使用策略定义的权限并进行选择。

我们认为遵循原则会导致 API 减少,API 可以执行更多操作、更加有效地维护和运行,以及让开发人员更容易学习。 如果重新开始的话,了解我们在过去五年中有关开发者如何使用 PlayFab 所有内容,基本上,这就是我们设计所有 PlayFab API 的方式。 当然,PlayFab 最重要的原则之一是尽可能不中断实时标题,这意味着我们必须保持在所有已发布 API 的向后兼容性。

“经典 API”用户的注意事项

为了在保持兼容性的同时实现设计目标,我们引入了这些实体 API,我们通常引入这些实体 API 作为一个单独的集,它们与经典 API 并排存在。 实体 API 可以处理与经典 API 相同的实体,但在大多数情况下,它们对这些实体拥有的一组单独的资源/数据进行操作。 例如,SetObjects 实体 API 和 UpdateUserData 经典 API 均可在 title_player_account 实体下存储数据,但这两个 API“看到”的数据是分开的。 以下是一些实际应用:

缺点

  • 如果游戏已经使用经典 API 来处理玩家(也称为 title_player_account)的数据和清单等,则现有数据不会自动显示在等效实体 API 中。
  • 实体 API 需要一些时间才能具有与经典 API 相当的功能。 在大多数情况下,数据会单独存储,并且需要进行很多后端更改才能支持它们。 可能有一些经典功能永远无法纳入到实体 API 中。

优点

  • 不需要进行任何操作。 如果你的游戏在 PlayFab 经典 API 上运行良好,该游戏将继续工作。
  • 可开始使用实体 API,同时继续在同一组实体上使用经典 API。 在某些情况下,执行此操有明显的好处,即节省空间,例如,在你的游戏中增加一个新的功能,除了现有设置存储在经典的“玩家数据”中,还在一个文件中保存了更多的数据量。

功能概述

实体编程模型是 PlayFab 下一代数据和游戏服务的基础。

支持的实体类型

下表列出了可用的实体类型,它们可用于构建 EntityKey。 实体密钥用于标识大多数较新 API 方法中的实体。

这些值应在 EntityKey.Type 字段中使用。

注意

这些值区分大小写。 其他值/自定义值当前起作用。

命名空间

namespace 是单一实体,指的是工作室中每个游戏的所有全局信息。 这些信息应该是静态的。 对此实体的更改不会实时反映。

ID 字段设置为 GamePublisherId。 若要检索您的 GamePublisherId

  • 登录到 Game Manager
  • 我的内容和标题 页面,选择相应的标题。
  • 选择“标题”页面左角中的齿轮图标,然后选择 “标题设置”
  • 选择 API Features 选项卡。

API功能页上的发布者ID是你的GamePublisherId

游戏

title 是单一实体,指的是该游戏的所有全局信息。 这些信息应该是静态的。 对此实体的更改不会实时反映。

ID 字段设置为你游戏的 TitleId。 若要检索您的 TitleId

  • 登录到 Game Manager
  • 在“我的工作室和游戏”页面找到你的游戏。

“游戏 ID”位于“游戏”名称正下方。

master_player_account

master_player_account 是工作室内的所有游戏之间共享的玩家实体。

应将 ID 字段设置为由任何 LoginResult.PlayFabId 返回的来自经典 API 的 PlayFabId

title_player_account

title_player_account对于大多数开发者而言,以最传统的方式代表玩家。

在客户端 API 中,应将 ID 字段设置为 LoginResult.EntityToken.Id,或者在身份验证 API 中,应设置为 GetEntityTokenResponse.Entity.Id

角色

charactertitle_player_account 的子实体,也是经典 API 中的角色的直接镜像。

ID 字段设置为 result.Characters[i].CharacterId 中的任意 characterId

group 是包含其他实体的实体。 它当前仅限于玩家和角色。

若要创建组,请将 ID 字段设置为 result.Group.Id,或者在列出会员资格时将其设置为 result.Groups[i].Group.Id

game_server

game_server 实体是游戏服务器使用的唯一实体,主要用于匹配和大厅功能。 将来可能会添加方案以支持其他 PlayFab 功能。

此实体为游戏服务器提供自己的标识,这对于唯一标识它们以订阅匹配和大厅的实时更新,以及支持大厅所有者迁移等特定功能非常有用。

若要作为 game_server 实体进行身份验证,请将 API AuthenticateGameServerWithCustomId 作为游戏实体调用,并检索 game_server 实体密钥和令牌对。 将 PlayFab 多人游戏 SDK 与 PFMultiplayerSetEntityToken 配合使用时,请使用此实体密钥。