XR-112: 在初始激活和恢复期间建立用户和控制器 *

版本 1.1, 2021/5/1

游戏必须建立一个或多个活动用户以充当此游戏中的一个或多个主要用户,并在从挂起和约束模式下恢复时处理用户。 游戏在 GDK 中使用简化或高级用户模型来执行此操作。

GDK 简化用户模型游戏

GDK 中的简化用户模型代表游戏处理默认用户获取。 标题仍然负责确保将控制器分配给用户,并使用该控制器进行游戏输入。 如果未向默认用户分配任何控制器,则标题应该使用 XUserFindContro使用ForUserWithAsync 来参与系统对话框以选择控制器并开始接受播放器输入。

GDK 高级用户模型、ERA、UWP 多用户应用程序

在初始激活时,游戏可以选择根据其游戏设计和首选项(使用启动该游戏的用户或通过明确提示用户)来确定初始用户。

标题必须指示活动用户,才能对该用户的配置文件执行第一个与配置文件相关的操作(例如保存进度或设置)。

使用高级用户模型,ERA、UWP 多用户应用程序 (MUA) 游戏的所有 Microsoft 游戏开发工具包 (GDK) 游戏都必须为帐户选择器提供一个入口点,以更改活动用户。

当某一游戏从挂起或约束模式下恢复时,该游戏必须恢复之前用户的会话或获取新用户,从而确认用户/控制器配对并相应地作出反应。

详细信息

在初始激活期间建立用户

GDK 简化的用户模型

初始用户是通过调用 XUserAddAsync(silent) 向标题提供的,并且将总是返回启动用户的单一结果。

GDK 高级用户模型、ERA、UWP 多用户应用程序

如果游戏正在使用启动了该游戏的用户:

  • 对于 GDK,活动用户可以通过调用 XUserAddAsync(silent) 来确定。 如果系统返回的消息指示不存在任何默认值,则游戏必须使用不带 silent 选项的 XUserAddAsync 来提示选择用户。 这将为用户显示帐户选取器。

  • 对于 ERA 和 UWP,可以从应用激活上下文的推荐用户中找到活动用户 (CoreApplicationContext.CurrentUser)。 如果应用激活上下文尚未提供推荐的用户,并且游戏采用档案相关的操作,则游戏必须启动帐户选取器,并将基于该用户的档案选择设置活动用户。

如果提示选择用户:

  • 游戏会显示参与提示,并且必须显示帐户选取器。 用户基于所选内容。

  • 对于“GDK”,账户选择器是使用 XUserAddAsync 调用的

  • 对于 ERA 和 UWP,使用 ShowAccountPickerAsync 调用帐户选取器。

如果用户选择取消退出登录,则游戏必须通知用户在他们继续时将不保存其进度。

通过启动游戏来选择或标识用户后,在执行任何档案相关操作之前,游戏会显示玩家代号。  没有有关游戏如何显示或者在哪里显示谁是活动用户的要求。 最佳实践包括在应用的主屏幕上或者游戏的游戏菜单上显示用户的玩家图片和显示名称。

在初始激活期间建立控制器

当游戏启动时要有一个已登录的用户,游戏需要尊重账户选择器或平台设置的控制器和用户绑定。 在游戏过程中或游戏外,只要在账户选择器中选择了玩家,Xbox 平台就会将控制器与玩家绑定。

如果游戏正在使用启动了该游戏的用户,则游戏应使用分配给该用户的关联游戏板来推动游戏和互动。

从挂起或约束模式恢复

GDK 简化的用户模型

Xbox 平台将确保最初启动游戏的用户仍在积极登录。 片头可以通过 UDA 注册更改通知; 如果有更改,则使用新绑定的控制器来驱动游戏。

从暂停或受约束状态恢复时,需要根据高级用户模型中的以下指南相应地处理游戏中的任何其他用户。

GDK 高级用户模型、ERA、UWP 多用户应用程序

当游戏从挂起模式下恢复或者退出约束模式时,该游戏必须确认用户/控制器配对并相应地做出反应:

  • 如果没有更改用户/控制器的配对,则该游戏必须继续。
  • 在 ERA 或 UWP 中,如果某一游戏之前的活动用户仍处于登录状态,但位于一个新的 User 对象上(发生此情况的原因通常是此用户在游戏处于挂起状态时注销并重新登录),游戏则必须使用新的已登录 User 对象来替代已注销的 User 对象。 必须使用户可以像从未注销一样继续游戏。
  • 如果所有预期用户都与某一有效但不同的控制器配对,则该游戏必须更新,并使用新的系统控制器配对。
  • 如果预期用户没有有效控制器,或者具有多个有效控制器,则该游戏必须使用帐户选取器为该用户建立一个活动控制器。
  • 如果预期玩家未登录,则必须从游戏中删除该玩家,或者重新建立一个用户和活动控制器。 游戏通常通过显示帐户选取器来执行此操作。 如果作为重新建立用户的一部分选择了一个新用户,则在按用户保存游戏状态时,游戏必须使用该新用户的状态来玩游戏。

其他资源

有关使用 GDK 的玩家身份信息,请阅读 用户部分

认证测试用例

下表显示了如果使用 GDK 简化用户模型或 GDK 高级用户模型、ERA 和 UWP 多用户应用程序,则 XR-112 的测试用例适用于您的游戏。

测试用例 适用于 GDK 简化用户模型 适用于 GDK 高级用户模型、ERA、UWP MUA
112-02 初始用户和控制器
112-03 未登录用户
112-04 活动用户指示
112-05 对帐户选取器的访问
112 06 处理档案更改
112-07 约束模式期间的用户更改
112-08 挂起期间的用户更改

112-02 初始用户和控制器

测试步骤

  1. 登录到档案 A 并且启动该游戏。
  2. 验证活动用户能否控制标题。
  3. 在未登录配置文件时重复步骤 [1],然后验证标题提示可建立活动用户。
  4. 建立活动用户并验证用户是否可控制标题。

预期结果
标题必须将活动用户设置为启动标题的控制器/用户配对,或者显示参与提示以识别控制器和用户,或显示要登录的帐户选取器。

通过示例

  1. 标题将活动用户设置到启动标题的控制器/用户配对。
  2. 该游戏显示一个参与提示以便标识控制器和用户。
  3. 该游戏显示帐户选取器以便登录。

失败示例

  1. 标题不允许用户使用所使用的第一个控制器控制标题。
  2. 在未登录用户启动时,标题不会提示用户建立活动用户。

112-03 未登录用户

测试步骤

  1. 确认没有用户登录。
  2. 启动游戏并且进入支持用户数据保存的每个模式。
  3. 确认每个模式都向用户提供在发生任何数据丢失前登录的机会。
  4. 取消登录机会,并且确认该游戏提供一个警告,指示将不保存进度。

预期结果
如果游戏处于通常将保存用户数据或游戏状态的模式,则游戏必须向用户提供登录机会。 游戏必须通知用户如果其在未登录的情况下继续玩游戏,将不会保存其进度

通过示例

  1. 在访问通常会保存用户数据或游戏状态时将提示未登录的用户登录。
  2. 如果用户继续处于未登录的模式下,则通知用户将不保存进度。

失败示例

  1. 在处于通常保存用户数据或游戏状态的模式中时,如果用户继续处于未登录的模式下,将不通知用户将不保存进度。
  2. 用户会收到通知,指出在发生数据丢失后他们将不能保存其进度。

112-04 活动用户指示

测试步骤

  1. 登录到之前没有见到游戏并且没有关联的存档数据的一个档案。
  2. 启动游戏。
  3. 确认在执行任何档案相关操作之前游戏在 UI 内标识活动用户。 “档案相关操作”的示例包括更改用户的已保存游戏或首选项、将数据保存到用户的档案、奖励成就、撰写用户的统计数据,或者用户数据或状态的任何其他本地或云使用或操作。
  4. 创建一个保存。
  5. 重新启动该游戏并且确认在执行任何档案相关操作之前游戏在 UI 内标识活动用户。
  6. 与 Xbox Live 断开连接。
  7. 重新启动该游戏并且确认在执行任何档案相关操作之前游戏在 UI 内标识活动用户。

预期结果
游戏必须在第一个档案相关操作之前指示当前用户上下文。

通过示例

  1. 该游戏在执行任何档案相关操作之前在游戏内显示用户的玩家代号和/或玩家图片。
  2. 不使用用户档案的游戏不指示活动用户。
  3. 游戏为支持多个用户的游戏模式显示多个活动用户。

失败示例

  1. 该游戏在执行任何档案相关操作之前不指示游戏的活动用户。

112-05 对帐户选取器的访问

测试步骤

  1. 登录到某一档案并且启动游戏。
  2. 确认标题允许活动用户访问标题中的帐户选取器,并选择其他配置文件。

预期结果
标题必须允许用户访问标题中的帐户选取器,以更改活动用户。

通过示例

  1. 标题允许用户访问标题中的帐户选取器。

失败示例

  1. 标题不允许用户访问标题中的帐户选取器。

112 06 处理档案更改

测试步骤

  1. 登录到某一档案并且启动游戏。
  2. 访问帐户选取器并选择不同的档案。
  3. 确认该游戏相应地做出反应并且将活动用户的上下文切换到新档案。
  4. 对存在对帐户选取器的访问的游戏中的每个位置重复步骤 [1]-[4]。

预期结果
游戏必须允许用户无缝地更改为另一用户的上下文。

通过示例

  1. 游戏通知用户更改活动用户可能会导致数据丢失,并提示用户在继续使用帐户选取器之前进行确认。
  2. 该游戏会相应地更新到新的活动用户的上下文。

失败示例

  1. 游戏没有相应地更新到新的活动用户的上下文。

112-07 约束模式期间的用户更改

配置:安装该游戏,然后使用“xbapp list”返回该游戏的应用程序用户模型 ID (AUMID) 和程序包全名 (PFN)。

测试步骤

  1. 登录到档案 A 并且启动该游戏。
  2. 在该游戏中的不同位置,按 Xbox 按钮来约束该游戏。
  3. 通过运行“xbapp query [PFN]”确认该游戏已进入约束状态。
  4. 在该游戏受到约束时,注销档案 A,然后登录到档案 B。
  5. 通过从主页中选择相应磁贴恢复该游戏。
  6. 确认该游戏相应地对新的活动用户做出反应。

预期结果:当一个游戏从约束模式下恢复时,该游戏必须确认所有以前参与的用户仍登录到该主机。

通过示例

  1. 应用程序在恢复时自动将活动用户上下文切换到档案 B。
  2. 游戏自动从游戏中删除档案 A,或者重新建立一个新用户并且使用该新用户的状态来玩游戏。

失败示例

  1. 游戏不会更新以便作为活动用户从上下文中删除档案 A。
  2. 在选择了一个新的档案后,游戏继续使用档案 A 的状态来玩游戏。

112-08 挂起期间的用户更改

配置:安装该游戏,然后使用“xbapp list”返回该游戏的应用程序用户模型 ID (AUMID) 和程序包全名 (PFN)。

测试步骤

  1. 登录到档案 A 并且启动该游戏。
  2. 在该游戏内的不同位置,通过使用“xbapp suspend [PFN]”挂起该游戏。
  3. 等待至少 30 秒,使游戏完全挂起,并且使挂起中断任何 HTTP 请求。
  4. 通过运行“xbapp query [PFN]”确认该游戏已进入已挂起状态。
  5. 在该游戏被挂起时,注销档案 A,然后登录到档案 B。
  6. 通过从主页中选择相应磁贴恢复该游戏。
  7. 确认该游戏相应地对新的活动用户做出反应。
  8. 使用新的活动用户进入游戏,然后确认用户能够继续玩。

预期结果

  1. 当一个游戏从挂起模式下恢复时,该游戏必须确认所有以前参与的用户仍登录到该主机。

通过示例

  1. 应用程序在恢复时自动将活动用户上下文切换到档案 B。
  2. 游戏自动从游戏中删除档案 A,或者重新建立一个新用户并且使用该新用户的状态来玩游戏。

失败示例

  1. 游戏不会更新以便作为活动用户从上下文中删除档案 A。
  2. 在选择了一个新的档案后,游戏继续使用档案 A 的状态来玩游戏。