将发现与 PlayFab Party 集成

发现是用户找到彼此一起玩游戏的过程。 PlayFab Party 不提供发现机制,但可以与提供用户间通信的任何现有机制一起使用。

基本创建和联接流

PlayFab Party 网络由单个客户端上的用户 创建播发,然后其他用户在不同客户端上 加入

创建网络

将 PlayFab Party 网络与游戏会话配合使用时,第一个注意事项是选择将创建网络的客户端和用户(PartyManager::CreateNewNetwork())。 从 PlayFab Party 的角度来看,哪个用户执行此操作并不重要;任何用户都可以创建网络。 不会为创建者提供网络中的特殊权限。 但是,创建网络的客户端负责:

  • 设置不可变网络配置 (PartyNetworkConfiguration
  • 确定初始邀请 (PartyInvitationConfiguration
  • 将网络播发给其他用户

初始邀请包含一个标识符和一个允许加入网络的用户列表。 用户被指定为title_player_account实体 ID的列表。 或者,列表可以为空,允许任何具有网络描述符和邀请标识符的用户加入。

播发网络

若要加入现有的 PlayFab Party 网络,客户端需要两条信息:

  • 网络描述符
  • 邀请标识符

PlayFab Party 网络由网络描述符 (PartyNetworkDescriptor) 标识。 这是一种大部分不透明的结构,用于编码建立与网络的连接所需的信息。 网络创建完成后,网络描述符将提供给创建客户端(PartyCreateNewNetworkCompletedStateChangePartyNetwork::GetNetworkDescriptor())。 为便于开发,PlayFab Party 提供了在 Web 友好字符串 (PartyManager::SerializeNetworkDescriptor(), PartyManager::DeserializeNetworkDescriptor()) 之间序列化和反序列化网络描述符的方法。

邀请标识符是唯一标识邀请的字符串。 它由客户端在显式创建邀请时或在创建网络时创建初始邀请时提供。 如果客户端未提供邀请标识符,则将唯一生成一个。

若要向其他用户播发新网络,请通过任何适当的通信媒体发送这两条信息。

加入网络

加入网络是一个两步过程。 希望加入网络的客户端必须首先通过向 PartyManager::ConnectToNetwork()提供反序列化网络描述符来连接到网络,然后通过向 PartyNetwork::AuthenticateLocalUser()提供邀请标识符对用户进行身份验证。

方案示例

社交邀请

最简单的方案是单个用户创建游戏会话,并希望通过其共享社交平台邀请其他已知用户。 流可能如下所示:

  • 邀请者使用开放邀请或邀请创建网络,该邀请包含邀请者想要与之一起玩游戏的所有用户。
  • 创建网络后,邀请者会通过社交平台的邀请机制将网络描述符和邀请标识符发送给其他用户。
  • 每个受邀用户都使用网络描述符和邀请标识符连接到网络。

注意

在邀请中指定用户时,将使用用户的title_player_account实体 ID。 这些实体 ID 需要在 PlayFab Party 的带外获取。

大厅

如果你的游戏提供允许在客户端之间发送数据的大厅,则可以将其用作交换网络连接信息的通信媒体。 流可能如下所示:

  • 选择一组用户以一起玩游戏。
  • 其中一个用户被选为创建者。
  • 集中的每个用户都将其title_player_account实体 ID 发送给创建者。
  • 创建者创建网络,在初始邀请配置中指定用户的实体 ID。
  • 网络创建完成后,创建者会将网络描述符和初始邀请标识符发送到应加入的用户集。
  • 每个用户使用网络描述符和邀请标识符连接到网络。

匹配

匹配服务(如 PlayFab 匹配)可用于查找要玩游戏的用户列表。 流可能如下所示:

  • 用户使用服务启动匹配请求。 title_player_account实体 ID必须是请求的一部分,因为匹配结果必须包含每个用户的实体 ID。
  • 用户会收到一个匹配结果,其中包含应为网络一部分的用户集。
  • 预先确定的算法用于选择哪个用户将成为创建者。
  • 创建者创建网络,在初始邀请配置中指定其他匹配用户的实体 ID。
  • 网络创建完成后,创建者使用带外通信介质将网络描述符和初始邀请标识符发送给其他匹配的用户。
  • 每个匹配的用户都使用网络描述符和邀请标识符连接到网络。

注意

需要带外通信介质才能将来自创建者的连接信息发送给其他匹配的用户。