目录
先决条件
要在 XBOX 服务客户端应用中处理用户特权,请为您的游戏配置 XBOX 服务身份验证。 有关详细信息,请参阅身份验证和登录概述以及 XBOX 服务用户特权概述。特权和增值销售的客户端处理与玩家体验
客户端应用受 XBOX 要求 (XR) 的约束,需要特权来控制游戏的 一部分,例如 XR-045:XBOX 服务和账户特权。 有关详细信息,请参阅策略和 XBOX 要求。 对于由特权控制的游戏,您可以使用 API。XUserCheckPrivilege 用于确定玩家是否拥有特定特权。XUserResolvePrivilegeWithUiAsync 显示一个用户界面 (UI),帮助玩家解决与指定特权相关的问题。 该 UI 会解释玩家为什么没有该特权。 例如,受XPRIVILEGE_MULTIPLAYER_SESSIONS 特权约束的游戏具有以下流程。
- 玩家看到启动多人游戏会话的选项,并通过在 UI 中选择相应的选项来 尝试开始比赛。
- 游戏使用
XUserCheckPrivilegeAPI 检查”提示”。- 如果存在,则假定玩家拥有该特权并继续。
- 如果不存在,请转到下一步。
[!NOTE] 当 XToken 中缺少某个特权而导致某项功能的访问被拒绝时,XBOX 服务 API 会返回状态代码 403 (
HTTP_E_STATUS_FORBIDDEN)。 XBOX 服务的所有终结点都会按需强制执行基于特权的访问控制。 - 为响应失败代码,游戏随后使用您尝试解决的特权对应的相应
特权 ID 调用
XUserResolvePrivilegeWithUiAsync。此函数调用 XBOX 服务查看玩家是否拥有该特权, 然后告诉玩家操作失败的原因或向 玩家显示解决问题的 UI。此 API 调用可能会产生以下结果。- 显示与玩家的执行状态相关的 UI,该状态是由 XBOX 服务策略和执行审核员发布的。
- 显示与其家长控制相关的 UI。
- 推广适用的订阅服务,例如 XBOX Game Pass Essential 订阅。
- 将结果(成功或失败及原因)返回给游戏。
[!NOTE] 如果无法访问 XBOX 服务或网络,
XUserResolvePrivilegeWithUiAsync将失败。 此失败必须被视为玩家不具备该特权。 - 从
XUserResolvePrivilegeWithUiAsync返回时:- 如果返回失败,游戏必须允许玩家继续选择按钮, 因为(例如)玩家的封禁可能失效,或家长控制可能更改。
- 如果返回成功,则玩家已被修正,您的游戏可能会再次尝试该操作。
玩家的令牌将包含由
XUserResolvePrivilegeWithUiAsync执行的修正所需的特权。
特权是宏观级别的检查,用于回答”我可以吗?“的问题。
有关哪些特权适用于您的游戏的更多信息,请参阅 策略和 XBOX 要求主题中的 XR-015。
示例代码
使用以下代码示例,确保在游戏中访问多人游戏功能之前检查玩家的多人游戏特权。应用侧特权处理的最佳实践
在游戏中处理用户特权时,请确保采用以下最佳实践。应用中解决特权的频率
对于特权检查,要求是每次启动时确保一次玩家具有相应的特权并解决它们。 我们建议对每个逻辑会话和离散操作进行检查。 您对会话的定义可能因应用程序的用途而有很大差异。 以下是最佳实践的示例。- 对于媒体流式传输应用,例如视频播放器,每次选择 播放 按钮(流开始)时或播放列表开始时(对于多个流,例如音乐播放列表)解析特权检查。
- 对于消息应用,在发送第一条消息时检查一次特权。
- 对于使用第三方匹配服务的多人游戏,每次会话(比赛)开始时解析特权检查。
切勿假定用户的订阅层级
从历史上看,来自 XBOX 360 的声明提供了有关玩家订阅层级的信息(例如 XBOX Game Pass Essential 状态)。 此声明随着 XBOX One 系列及更高版本的推出已被弃用。 请确保使用特权做出决策。用户的层级或他们如何获得特权,对应用来说必须是不透明的。离线模式
如果XUserCheckPrivilege 返回服务已关闭或无法访问,则将此结果视为特权检查返回了失败。
这样,您的游戏就有了保持符合 XR 要求的故障保护机制。
定位正确的玩家
如果特权检查未指定其他玩家,我们建议始终引用操作玩家。 如果您的游戏支持指定用户,请使用当前指定的用户。 例如,有三位玩家登录:Bill、Bob 和 Beth。 您的游戏支持在”活跃玩家”之间切换以指定使用谁的推荐、历史记录和设置。 Beth 启动了您的应用。 在您的游戏运行时,活跃玩家切换为 Bob。 Bob 拥有单独的配置文件、推荐集和历史记录。 调用XUserCheckPrivilege 为 Bob 启动特权检查。
无 UI 或 UI 失去焦点时进行检查
在某些情况下,您的游戏无法显示模态窗口,因此特权检查的 UX 会被阻止。 例如,当游戏在后台播放音乐时,或者当 Skype 应用在后台运行时的 来电期间。 但是,您的游戏仍必须检查特权。我们建议调用XUserCheckPrivilege。
XUserCheckPrivilege 返回用户的当前权限状态,或返回适用的失败,而不是显示 UI。
您的游戏可以按其特权定义影响玩家,并在您的游戏重新获得焦点时通知玩家
特权检查结果。
相反,您的游戏可以根据需要向玩家显示非模态错误信息或其他 UX。
当适合向玩家显示阻塞 UX 时,再次调用 XUserResolvePrivilegeWithUiAsync 以显示合适的 UX,例如增值销售或执行状态。
在游戏中测试基于特权的访问控制
特权是基于以下输入计算的。- 玩家的有效订阅权益
- 设备的有效特权权益
- 客户端平台的有效特权权益
- 当前游戏的有效特权权益
- 可以将游戏与一组特权打包在一起,使所有游戏玩家自动获得这些特权,以便在运行的游戏中使用。如果您的游戏需要此功能,请联系您的 Microsoft 账户经理。
- 家长控制,供家长决定为其家庭中的孩子添加或删除哪些特权
- XBOX 审核员可能会为已被识别为滥用服务的玩家或设备禁止特权
管理和检查玩家特权和权限
可以通过两种方式访问玩家隐私设置。- 在 PC 上:转到 https://aka.ms/XboxPrivSettings。
- 在 XBOX 上:转到 Settings -> General -> Online safety & family -> Privacy & online safety -> XBOX privacy
使用 XUserCheckPrivilege 检查的特权
XUserPrivilege::CrossPlay
- 描述:允许玩家在以下场景中与未登录 XBOX 服务的其他真实世界玩家参与游戏会话:同一会话中的同步玩家对玩家游戏、异步回合制游戏、团队游戏、用户发起的匹配、发送或接受邀请、加入正在进行的会话。
- 要求:XR-045 - XBOX 服务和账户特权
- 特权 ID:185
- PC 上的设置:You can play with people outside of XBOX services
- XBOX 上的设置:You can join cross-network play
XUserPrivilege::Sessions
- 描述:允许玩家在共享环境中的互联单人体验中参与,或者在游戏是混合免费游玩和付费多人游戏并使用此特权来控制这些体验的 XBOX 主机场景中。单人体验不得具有特权 252 或 254(分别为通信和多人游戏)所涵盖的任何功能。使用此特权是游戏功能,需要平台批准。
- 要求:XR-045 - XBOX 服务和账户特权
- 特权 ID:189
- PC 上的设置:You can join multiplayer games
- XBOX 上的设置:You can join multiplayer games
XUserPrivilege::Multiplayer
- 描述:允许玩家在以下场景中与真实世界用户(非机器人)加入在线多人游戏会话:同一会话中的同步玩家对玩家游戏、异步回合制游戏、团队游戏、用户发起的匹配、发送或接受邀请、加入正在进行的会话。请注意,此特权不适用于在同一设备上运行的本地多人游戏。
- 要求:XR-045 - XBOX 服务和账户特权
- 特权 ID:254
- PC 上的设置:You can join multiplayer games
- XBOX 上的设置:You can join multiplayer games
XUserPrivilege::UserGeneratedContent
- 描述:允许玩家在线查看其他用户的 UGC、下载其他用户的 UGC 或在线分享他们自己的 UGC。这不限制以前下载的 UGC 的使用。
- 要求:XR-045 - XBOX 服务和账户特权
- 特权 ID:247
- PC 上的设置:You can see and upload community creations
- XBOX 上的设置:You can see and upload community creations
XUserPrivilege::SocialNetworkSharing
- 描述:仅限 XBOX 主机:允许玩家在 XBOX network 之外分享信息,包括游戏进度、Kinect 生成的内容、游戏剪辑等。
- 要求:XR-045 - XBOX 服务和账户特权
- 特权 ID:220
- XBOX 上的设置:You can share outside of XBOX
XUserPrivilege::Communications
- 描述:允许玩家通过语音或文本与任何其他 XBOX 服务用户通信。
- 要求:XR-045 - XBOX 服务和账户特权
- 特权 ID:252
- PC 上的设置:Others can communicate with voice, text or invites
- XBOX 上的设置:Others can communicate with voice, text or invites
使用 XblPrivacyCheckPermissionAsync 检查的权限
当需要针对多个用户检查权限时,游戏还可以使用 XblPrivacyBatchCheckPermissionAsync;当针对非 XBOX 服务用户检查权限时,可以使用 XblPrivacyCheckPermissionForAnonymousUserAsync。XblPermission::CommunicateUsingText
- 描述:检查玩家是否可以向目标用户发送包含文本内容的消息。如果玩家已将目标用户静音,此值不会改变。请改用 CommunicateUsingVoice。例如,如果您将通信设置为仅限朋友,而目标不是朋友,则此值将为 false。例如,如果目标玩家已阻止您,则此值将为 false。例如,如果您将通信设置设为已阻止,则此值将为 false。
- 要求:XR-015 - 管理玩家通信
- 检查其他 XBOX 服务用户时
- PC 上的设置:Others can communicate with voice, text or invites
- XBOX 上的设置:Others can communicate with voice, text or invites
- 检查匿名用户时
- PC 上的设置:You can communicate outside of XBOX services with voice & text
- XBOX 上的设置:You can communicate outside of XBOX with voice & text
- 检查其他 XBOX 服务用户时
XblPermission::CommunicateUsingVoice
- 描述:检查玩家是否可以使用语音与目标用户通信。如果玩家已将目标用户静音,则此值将为 false。
- 要求:XR-015 - 管理玩家通信
- 检查其他 XBOX 服务用户时
- PC 上的设置:Others can communicate with voice, text or invites
- XBOX 上的设置:Others can communicate with voice, text or invites
- 检查匿名用户时
- PC 上的设置:You can communicate outside of XBOX services with voice & text
- XBOX 上的设置:You can communicate outside of XBOX with voice & text
- 检查其他 XBOX 服务用户时
测试订阅提供的特权
您可以使用 Partner Center 创建具有 XBOX Game Pass Essential 订阅的测试账户。 使用这些账户来测试通过 XBOX Game Pass Essential 订阅提供的特权的特权逻辑。 您可以在开发客户端上使用测试账户购买其他订阅。该订阅必须发布到您的账户或设备被授权的开发沙盒中,并且开发客户端上的账户必须在同一沙盒中处于活跃状态。
测试正在运行的游戏提供的特权
如果您想设置游戏以在玩家进入游戏时自动颁发特权,请联系您的 Microsoft 账户经理。 测试此场景需要为 XBOX 服务身份验证配置游戏,并在玩家登录的情况下运行游戏。测试被家长控制删除的特权
要测试可以通过使用家长控制删除的特权(例如XPRIVILEGE_COMMUNICATIONS)的特权逻辑,请在客户端设备上设置家庭账户。
家长或监护人可以使用该设备限制其家庭中孩子的特权。
玩家也可以在自己的账户上限制特权。
我们建议使用此方法来测试需要限制用户特权的场景。
Partner Center 目前不提供创建测试账户家庭的方法。
要检查的特权 ID
您的游戏必须检查以下特权 ID。有关详细信息,请参阅 XR-045:XBOX 服务和账户特权。
有关可用特权的详细信息,请参阅 XUserPrivilege。
特权计算逻辑
对同时登录到主机或其他设备的每个玩家独立计算特权。 从用户、设备、当前正在运行的游戏和平台的有效权益中添加特权。 然后根据家长控制、XBOX 服务策略和执行状态以及每个用户的访客状态,为每个玩家移除特权。 有效权益可能来自用户购买的订阅、同时登录的其他用户购买的订阅,或直接与设备关联的订阅。 有效权益也可能来自促销优惠,例如”免费多人游戏周末”活动。由设备类型产生的特权权益
某些类型的设备(如 XBOX One 系列主机和 XBOX Series 主机、Windows PC 或移动设备)会自动为从该平台连接到 XBOX 服务的任何玩家授予一组特权。由订阅产生的有效特权权益
订阅产品可能会为适用的用户提供一组特权。 以下场景是玩家有效获得基于订阅的特权的方式。- 玩家已购买该订阅产品。
- 同一设备上的另一位活跃玩家已购买该订阅产品。
- 该订阅产品与玩家当前使用的设备关联。
促销权益
促销权益在有限的时间内为满足某些动态条件的用户添加特权。 例如,促销活动可能会在周末期间向某些用户提供多人游戏特权。 历史上的促销活动(例如”免费 XBOX Game Pass Essential 周末”)遵循促销权益的模式。您的服务和游戏无需直接了解此类促销活动。
为受赞助的访客账户删除的特权
受赞助的访客是登录 XBOX 服务的访客账户。 受赞助的访客只有在客户端设备上至少存在一位其他活跃玩家时才存在, 例如仅有一位玩家登录的分屏多人游戏。 这些账户是经过身份验证的用户,会像其他经过身份验证的用户一样获得令牌。 受赞助的访客确实拥有特权,但无论受赞助访客的有效权益或当前正在运行的游戏如何,某些特权都会对访客玩家保留。 要检查受赞助访客的特权,请调用XUserCheckPrivilege。这不会尝试解决。
您无需显示解决 UI,也无需调用 XUserResolvePrivilegeWithUiAsync,因为受赞助的访客无法被”解决”。与活跃的 XBOX 账户不同,受赞助的访客没有任何购买途径、招致执行操作或以其他方式拥有独特特权或限制。
如果玩家当前未登录(这是”纯访客”的情况),则不会为该用户颁发令牌。
这意味着不会为设备上的任何玩家计算有效特权。
XR-045 要求您的游戏使用 XPRIVILEGE_SOCIAL_NETWORK_SHARING 或 XUserPrivilege::SocialNetworkSharing 检查特权 220。这是为访客删除的特权之一。
在线安全和 Microsoft 执行
XBOX 服务策略和执行审核员可能会从滥用用户或设备中删除特权。家长控制
无论孩子的订阅或当前正在运行的游戏如何,家长都可以从其家庭中的孩子账户中删除特权。 这通过 XBOX 主机或 Xbox.com 上的 XBOX Family Settings 应用进行管理。XBOX Game Pass Essential 订阅者的特权
特定订阅的特权权益政策是动态的,会随时间变化。 请记住,即使订阅者有权获得某项特权,该订阅者也可能因家长控制更改或执行政策而失去该特权。特权并不能准确反映用户的当前订阅。
XPRIVILEGE_MULTIPLAYER_SESSIONS 或 XUserPrivilege::Multiplayer 检查特权 254。这是 XBOX Game Pass Essential 订阅者有权获得的特权之一。
合作伙伴订阅和特权
可以配置合作伙伴订阅以提供一组 XBOX 服务特权。 只有当玩家登录到与订阅明确关联的游戏时,合作伙伴订阅才用于计算玩家的特权。 要设置合作伙伴订阅,请联系您的 Microsoft 账户经理。 合作伙伴订阅可以在发布前在开发沙盒中进行测试。 只有被授权使用这些开发沙盒的用户和设备才能购买这些订阅。免费游玩游戏和多人游戏特权
对于专门配置为以免费游玩 (F2P) 模式运行的游戏,必须像往常一样检查XPRIVILEGE_MULTIPLAYER_SESSIONS / XUserPrivilege::Multiplayer 特权。但是,通过此设置,无论用户是否拥有 XBOX Game Pass Essential 订阅,都将拥有多人游戏特权。仅当玩家被封禁/阻止或以某种方式受到年龄限制时,才会拒绝此特权。使用此特权是游戏功能,需要平台批准。请与您的 Microsoft 经理或开发者合作伙伴经理 (DPM) 合作,为您的游戏启用此功能。
混合游戏和多人游戏特权
对于专门配置为以混合模式运行的游戏(即包含需要付费订阅的多人游戏场景,但也包含可以免费游玩的场景的游戏),特权检查过程略有不同。 对于需要付费订阅的内容,必须检查XPRIVILEGE_MULTIPLAYER_SESSIONS / XUserPrivilege::Multiplayer 特权。但是,对于免费多人游戏场景,将改为检查 XPRIVILEGE_SESSIONS / XUserPrivilege::Sessions 特权。仅当玩家被封禁/阻止或以某种方式受到年龄限制时,才会拒绝此特权。Multiplayer 特权也会因这些原因被拒绝,但还要求授予付费订阅。使用此特权是游戏功能,需要平台批准。请与您的 Microsoft 经理或 DPM 合作,为您的游戏启用此功能。
