UWP/C# 应用如何登录 XBox 用户并显示玩家代号?

How can a UWP/C# app sign in an XBox user and display gamertag?

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

Because your game uses Xbox Live, it must:
· Create at least one active user and sign the user into Xbox.
· Display the user’s Xbox gamertag as the primary display and profile name.

Please add this behavior and resubmit your game.

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

post上"Accessing Raw Gamer Profile Picture" 似乎表明我可以通过执行以下操作来处理登录问题:

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

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

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

简而言之,我需要一个非常简单的 C#/XAML 示例,展示如何执行检查应用程序是否 运行ning 在 Xbox 上的最低要求,登录用户,然后在适当的地方显示用户的玩家代号,这样我就满足了Microsoft Store的要求。

更新: 我做了以下事情:

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

在项目中,我在Section 6 of these instructions

之后创建了一个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;
    }
}

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

App Policies: 10.13.5 Xbox Live Active User and Gamertag

Notes To Developer

Because your game uses Xbox Live, it must: · Create at least one active user and sign the user into Xbox. · Display the user’s Xbox gamertag as the primary display and profile name. Please add this behavior and resubmit your game. You can view the Xbox Live documentation for more information. Your game may not appear in the Creators Collection until this has been resolved.

Tested Devices: Windows 10 Desktop, Windows 10 Xbox

关于我在这里做错了什么有什么想法吗?

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

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

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

如果您使用 UWP for Xbox 提交游戏,则它还必须能够在 Windows10 上登录才能通过证书。 签名规则围绕平台,例如UWP,因此必须能够在桌面和 Xbox 上登录 Xbox Live。

因此取消限制它到 Xbox 的限制并且它应该通过(前提是您还通过了其他 Xbox Live 证书以显示用户 gamertag and/or 头像)

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

希望对您有所帮助。

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

在不使用 "Xbox Live"(并显示玩家代号) 的情况下获得 Xbox 批准的应用程序,您需要通过 "Concept Approval" process. You can get started by filling out the ID@XBOX application

或者,您可以 通过将 "Xbox Live" 集成到您的 UWP 应用程序中来 [=​​35=] 通过执行以下 显示玩家代号 [=39] 来获得批准=] 在您的应用中:

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

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

在您的项目中,在 Section 6 of these instructions 之后创建了一个 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,登录,select 您的游戏,select "Services",select "Xbox Live",然后单击"Authorize Xbox Live Accounts for your Test Environment" 以便您可以在本地进行测试。

此外,请务必点击 "Xbox Live" 部分中的 "Test" 按钮。