基础 DRM 与许可证检查
PC 上的 XStore 包含基础 DRM 检查:游戏在允许进行游戏之前会验证是否有活跃许可证。该检查通过XStoreQueryGameLicenseAsync 在启动时运行。
如果未找到许可证:
- 向玩家显示商店 UI 以进行购买或登录。
- 未取得活跃许可证前,不要让游戏继续进行。
- 通过你的服务的许可证令牌验证许可证。
- 在游戏过程中定期重新调用
XStoreQueryGameLicenseAsync;如果许可证丢失则撤销。
开放式与限制式授权
两种 PC 授权模型:- 开放式授权 — 玩家可以使用任何拥有许可证的 Microsoft Store 账号运行游戏。适用于共享 PC。
- 限制式授权 — 玩家必须使用拥有许可证的 Microsoft 账户登录。用于希望获得更强反盗版保护的游戏。
用于服务端验证的许可证令牌
如果你的游戏服务器需要确认玩家拥有该游戏(例如在授予游戏内资产之前),请使用 许可证令牌:- 客户端调用
XStoreQueryLicenseTokenAsync获取短期签名令牌。 - 客户端将令牌发送到你的服务。
- 你的服务使用 Microsoft 公钥验证令牌的签名。
- 你的服务信任令牌中关于许可证状态的声明。
商店账号不匹配的场景
一个常见的 PC 问题:玩家使用一个 Microsoft 账户登录 Windows/XBOX 应用,但使用不同的账号登录 Microsoft Store。 XStore API 会遵循商店的登录账号,这可能导致:- 尽管登录 XBOX 的玩家在另一个账号上拥有该游戏,游戏仍显示 “购买 (buy)”。
- 购买针对错误账号成功完成。
- 检测不匹配 — 将
XUserGetId与XStoreQueryGameLicenseAsync信息进行比较。 - 显示 UI 解释不匹配并提供切换选项。
- 如果玩家无法切换,提供跳转到 XBOX 应用以修复商店账号的选项。
商店操作的沙盒切换
XBOX 服务沙盒(通过XblPCSandbox.exe 设置)并不能完全控制 PC 上商店使用的沙盒。商店操作需要额外的步骤:
- 切换 XBOX 服务沙盒。
- 在新的沙盒上下文中重新启动 Microsoft Store 应用。
- 通过
XStoreQueryGameLicenseAsync验证是否返回开发沙盒数据。
PC 商务测试清单
提交前:- 使用一无所有的测试账号进行测试 — 验证购买/试玩/登录流程。
- 使用拥有基础游戏的测试账号进行测试 — 验证不会出现“购买”提示。
- 测试商店账号不匹配的场景 — 使用一个账号登录 Windows,使用另一个账号登录商店。
- 测试试玩 → 购买流程 — 验证试玩许可证无需重启即可切换为完整许可证。
- 测试离线启动 — PC 游戏必须能在合理的缓存许可证时间窗内离线启动和游玩(不接触商店)。
- 测试沙盒切换 — 确认切换后商店调用返回开发沙盒中的产品。
相关 API 文档
- XStore API 参考 —
XStoreQueryGameLicenseAsync、XStoreQueryLicenseTokenAsync - XUser API 参考 —
XUserGetId、XUserIsStoreUser
