UWP / C#app如何登录XBox用户并显示gamertag?

时间:2018-01-15 05:38:28

标签: c# uwp win-universal-app xbox-one xbox-live

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

  

因为您的游戏使用Xbox Live,所以必须:
     ·创建至少一个活动用户并将用户签名到Xbox中      ·将用户的Xbox gamertag显示为主显示和配置文件名称。

     

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

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

The post on "Accessing Raw Gamer Profile Picture" 似乎表明我可以通过这样的方式来处理登录:

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

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

另外,我想知道我应该如何以及在哪里显示用户的gamertag。我可以在XAML的任何地方显示它吗?或者,是否需要调用一些特殊的Xbox API来显示它?

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

更新 我做了以下事情:

使用Nuget Package Manager,我安装了Microsoft.Xbox.Live.SDK.WinRT.UWP \

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

之后创建了一个xboxservices.config文件

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

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 Active User和Gamertag

     

开发人员须知

     

因为您的游戏使用Xbox Live,所以它必须:·创建至少一个   活跃用户并将用户签入Xbox。 ·显示用户的Xbox   将gamertag作为主要显示和配置文件名称。请加上这个   行为并重新提交您的游戏。您可以查看Xbox Live   文档以获取更多信息。你的游戏可能不会出现在   创作者收藏直到这个问题得到解决。

     

经过测试的设备:Windows 10桌面,Windows 10 Xbox

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

3 个答案:

答案 0 :(得分:3)

经过大量研究,并回顾上面的有用答案后,我发现了以下两种方式,以使Windows应用程序获得Microsoft Store批准,以便在Xbox One上运行。第二种方法(见下文)显示了如何通过在应用程序中显示gamertag来实现这一目的。

在不使用" Xbox Live"的情况下获取适用于Xbox的应用程序(并显示玩家代号),您需要完成"Concept Approval"过程。您可以填写ID@XBOX application

开始

或者,您可以通过在您的UWP应用程序中集成" Xbox Live" 来批准应用程序,方法是执行以下以显示游戏广告应用程式:

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

在Visual Studio内部,使用Nuget Package Manager添加Microsoft.Xbox.Live.SDK.WinRT.UWP

在您的项目中,在Section 6 of these instructions之后创建了一个xboxservices.config文件。

创建一个TextBlock控件来显示gamertag。在我的情况下,我将它放在应用程序屏幕的左上角,并将其传递给以下函数以显示gamertag:

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您的测试环境的实时帐户"这样你就可以在本地测试了。

另外,请务必点击"测试" " Xbox Live"中的按钮部分。

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:0)

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

因此,删除将其限制为Xbox的限制,它应该通过(前提是您还传递其他Xbox Live证书以显示用户gamertag和/或头像)

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

希望有所帮助。