电脑游戏的 Xbox 服务网络流量疑难解答
如果 GDK 游戏已设置为使用 Xbox 服务,但似乎未与 Xbox 服务交互,则检查游戏生成的网络流量有助于确定问题发生的位置。
使用 Fiddler 检查网络流量
若要查看从游戏到 xboxlive.com 的网络流量以及来自 xboxlive.com 的响应,你需要安装 Fiddler。
预期的网络流量
安装 Fiddler 后,可以将游戏的网络流量与 Xbox 服务功能的预期网络流量进行比较。
登录的预期网络流量
如果你的游戏已成功登录用户,则应看到一个数据包 userpresence.xboxlive.com ,如下所示:
POST https://userpresence.xboxlive.com/users/xuid(2814616665093727)/devices/current/titles/current HTTP/1.1
其中 xuid(XXXXXX) 是登录测试帐户的 Xbox 用户 ID。
如果看不到此数据包,请尝试以下操作:
- 验证为项目设置的值(在 microsoftgame.config 或引擎的 IDE 中,例如,如果使用引擎,则为 UE)是否与合作伙伴中心中项目的值匹配。
- 验证计算机是否已设置为在合作伙伴中心为项目指定的沙盒。
可以通过打开 GDK 命令提示符并运行 XBLPCSandbox.exe 来检查计算机上的当前沙盒。如果沙盒不匹配,可以通过运行 XBLPCSandbox.exe [沙盒名称]在同一 GDK 命令提示符中设置它,例如:
XBLPCSandbox.exe XDKS.1
- 确保测试帐户已登录。 执行此操作的一种简单方法是打开 Xbox 应用并查看测试帐户是否已显示。
用于查询和设置成就的预期网络流量
如果游戏已成功请求有关测试帐户的成就状态的信息,应看到一个数据包 achievements.xboxlive.com,如下所示:
GET https://achievements.xboxlive.com/users/xuid(2814616665093727)/achievements?titleId=1794603332&orderBy=title HTTP/1.1
如果请求成功,则数据包将具有一个响应,其中列出了游戏的测试用户的成就的当前状态。
如果游戏已成功更新测试帐户的成就,应会看到一个数据包 achievements.xboxlive.com,如下所示:
POST https://achievements.xboxlive.com/users/xuid(2814616665093727)/achievements/00000000-0000-0000-0000-00006af77944/update HTTP/1.1
...
{"action":"progressUpdate","serviceConfigId":"00000000-0000-0000-0000-00006af77944","titleId":1794603332,"userId":"2814616665093727","achievements":[{"id":"1","percentComplete":100}]}
如果看不到这些数据包或未获得预期的响应:
- 确保测试帐户已登录。 执行此操作的一种简单方法是打开 Xbox 应用并查看测试帐户是否已显示。
- 验证成就是否发布到合作伙伴中心的沙盒。
- 如果使用的是引擎(如 UE),请确保存在任何特定于引擎的配置文件,并具有正确的值。 例如,在 UE 中,确保 WinGDKEngine.ini 和 Achievements.json 存在,并且具有设置 Unreal 以使用 GDK 联机子系统以及游戏管理的成就和基于事件的统计信息部分中注明的值。
云保存的预期网络流量
云保存调用不一定会立即生成网络特征,而是导致游戏服务进程将数据包发送到类似于以下内容的 titlestorage.xboxlive.com:
PUT https://titlestorage.xboxlive.com/connectedstorage/users/xuid(2814616665093727)/scids/00000000-0000-0000-0000-00006AF77944/lock HTTP/1.1
若要在 Fiddler 中查看来自游戏服务进程的网络流量,需要在具有管理员权限的命令行界面中使用以下命令将 winhttp 重定向到 Fiddler:
netsh winhttp set proxy localhost:8888
若要清除重定向,请使用以下命令:
netsh winhttp reset proxy