4

我正在尝试将 UWP 应用程序(用 C#/XAML 编写)重新提交到 Microsoft 商店,以便除了以前支持的 Windows 桌面和 Windows Phone 之外,它还支持“Windows 10 Xbox”。我可以部署(使用 Visual Studio 2017)并在我的 Xbox One 控制台上以开发人员模式运行该应用程序,没有任何问题。当我提交到商店时,我收到以下错误:

由于您的游戏使用 Xbox Live,它必须:
· 创建至少一个活跃用户并将该用户登录到 Xbox。
· 将用户的 Xbox 玩家代号显示为主要显示和个人资料名称。

请添加此行为并重新提交您的游戏。

我正在寻找一个最小的 C#/XAML 示例,向我展示如何解决这个提交问题。

“访问原始玩家资料图片”上的帖子 似乎表明我可以通过执行以下操作来处理登录:

if (App is running on Xbox)
{
    XboxLiveUser user = new XboxLiveUser();
    SignInResult result = await user.SignInAsync(); 
}

但我不确定这是否正确,或者我将如何确定该应用程序正在 Xbox 上运行。

另外,我想知道我应该如何以及在哪里显示用户的玩家代号。我可以在 XAML 中的任何位置显示它吗?或者,我需要调用一些特殊的 Xbox api 来显示它吗?

简而言之,我需要一个非常简单的 C#/XAML 示例来说明如何执行检查应用程序是否在 Xbox 上运行、登录用户,然后在适当的位置显示用户的玩家代号的最低要求,以便我满足 Microsoft Store 要求。

更新: 我做了以下事情:

使用 Nuget 包管理器,我安装了 Microsoft.Xbox.Live.SDK.WinRT.UWP\

在项目中,我按照这些说明的第 6 节创建了一个 xboxservices.config 文件

我在屏幕左上角创建了一个 TextBlock 控件,并将其传递给以下函数以显示玩家代号:

public static async void InitializeXboxGamer(TextBlock gamerTagTextBlock)
{
    if (Windows.System.Profile.AnalyticsInfo.VersionInfo.DeviceFamily.Contains("Xbox"))
    {
        XboxLiveUser user = new XboxLiveUser();
        SignInResult result = await user.SignInSilentlyAsync(Window.Current.Dispatcher);
        if (result.Status == SignInStatus.UserInteractionRequired)
        {
            result = await user.SignInAsync(Window.Current.Dispatcher);
        }
        gamerTagTextBlock.Text = user.Gamertag;
        gamerTagTextBlock.Visibility = Windows.UI.Xaml.Visibility.Visible;
    }
    else
    {
        gamerTagTextBlock.Visibility = Windows.UI.Xaml.Visibility.Collapsed;
    }
}

但是,这仍然未能通过提交测试,并出现以下错误:

应用策略:10.13.5 Xbox Live 活跃用户和玩家代号

开发者须知

由于您的游戏使用 Xbox Live,它必须: · 创建至少一个活跃用户并将该用户登录到 Xbox。· 将用户的 Xbox 玩家代号显示为主要显示和个人资料名称。请添加此行为并重新提交您的游戏。您可以查看 Xbox Live 文档以了解更多信息。在解决此问题之前,您的游戏可能不会出现在创作者收藏中。

测试设备:Windows 10 桌面版、Windows 10 Xbox

关于我在这里做错了什么的任何想法?

4

3 回答 3

4

经过大量研究并查看了上述有用的答案,我发现了以下两种方法可以让 Microsoft Store 批准 Windows 通用应用程序在 Xbox One 上运行。第二种方法(见下文)展示了如何通过在应用程序中显示玩家代号来执行此操作。

在不使用“Xbox Live”(并显示玩家代号)的情况下获得适用于 Xbox 的应用程序,您需要完成“概念批准”流程。您可以通过填写ID@XBOX 申请开始

或者,您可以通过执行以下操作将“Xbox Live”集成到您的 UWP 应用程序中以在您的应用程序中显示玩家代号,从而获得该应用程序的批准

确保您的项目(右键单击您的项目->应用程序)设置为“Windows 10 Creators Update (10.0; Build 15063)”的最低版本和“Windows 10 Fall Creators Update (10.0; Build 16299) 的目标版本" -- 否则,当您在下面添加 NuGet 包时,不会出现对“Microsoft.Xbox.Services.winmd”的引用。

在 Visual Studio 中,使用 Nuget 包管理器添加 Microsoft.Xbox.Live.SDK.WinRT.UWP

在您的项目中,按照这些说明的第 6 节创建了一个 xboxservices.config 文件。

创建一个 TextBlock 控件以显示玩家代号。在我的例子中,我将它放在应用程序屏幕的左上角,并将其传递给以下函数以显示玩家代号:

public static async void InitializeXboxGamer(TextBlock gamerTagTextBlock)
{
    try
    {
        XboxLiveUser user = new XboxLiveUser();
        SignInResult result = await user.SignInSilentlyAsync(Window.Current.Dispatcher);
        if (result.Status == SignInStatus.UserInteractionRequired)
        {
            result = await user.SignInAsync(Window.Current.Dispatcher);
        }
        gamerTagTextBlock.Text = user.Gamertag;
        gamerTagTextBlock.Visibility = Windows.UI.Xaml.Visibility.Visible;
    }
    catch (Exception ex)
    {
        // TODO: log an error here
    }
}

我在 MainPage() 构造函数的末尾调用了这个函数。

您必须在所有受支持的平台(包括 Windows 10)上调用此函数才能获得商店批准。

然后,转到 developer.windows.com,登录,选择您的游戏,选择“服务”,选择“Xbox Live”,然后单击“为您的测试环境授权 Xbox Live 帐户”,这样您就可以在本地进行测试了。

此外,请务必单击“Xbox Live”部分中的“测试”按钮。

于 2018-01-21T22:23:18.920 回答
0

您可以使用以下代码段检查 Xbox 作为设备类型:

if ( Windows.System.Profile.AnalyticsInfo.VersionInfo.DeviceFamily.Contains( "Xbox" ) )
{
   //do your Xbox specific actions
}

应用程序通常会在游戏主菜单的一角显示用户玩家标签和图片

于 2018-01-15T08:36:08.840 回答
0

如果您使用 UWP for Xbox 提交游戏,则它还必须能够在 Windows 10 上登录才能通过 Cert。签名规则与平台有关,例如 UWP,因此必须能够在桌面和 Xbox 上登录 Xbox Live。

因此,删除将其限制在 Xbox 上的限制,它应该会通过(前提是您还通过了其他 Xbox Live 证书以显示用户的玩家代号和/或头像)

如果您不需要/使用 Xbox live,请不要按照上面的建议添加它。

希望有帮助。

于 2018-01-16T15:44:22.717 回答