StoreContext User属性在单用户UWP应用程序

时间:2017-08-16 18:20:22

标签: uwp windows-store-apps windows-10 windows-store xbox-one

我正在为Windows 10和Xbox One设备上的UWP(通用Windows平台)开发应用程序。该应用是single user application。我试图在运行时确定有效登录用户的唯一标识符 - 只是一个没有任何个人身份信息的ID。 StoreContext class的文档表明我应该能够通过检查默认User对象上的StoreContext属性来确定这一点;具体来说,NonRoamableId属性似乎是合适的。但是,在我在(调试,部署,Windows,Xbox)中运行应用程序的每个上下文中,StoreContext的User属性始终为null。这是预期的吗?我无法找到任何其他方法来确定此信息。

值得注意的是:我了解UserWatcher类及其查询系统用户的方法。但是,我想避免使用它,原因如下:

  1. 使用这些查询方法向应用程序公开的属性不足以确定哪个User是与当前StoreContext关联的属性,这意味着此类解决方案容易出错。
  2. 以这种方式查询用户信息会导致权限弹出,如果应用需要阅读个人身份信息,这是有道理的,但由于我只是在寻找程序化的唯一标识符,因此我们不会这样做。似乎应该是必要的。
  3. 我正在开发针对Windows 10 Creators'更新SDK(10.0.15063)。

    编辑11/16/2017

    这看起来可能是一个现在修复的UWP错误。如果没有代码更改,我现在会在应用启动时看到附加到User的非空LaunchActivatedEventArgs对象。相应地接受了答案。

3 个答案:

答案 0 :(得分:3)

A related question here.

可以从OnLaunched / Activated事件参数获取使用MS帐户登录的活动用户。

protected override void OnLaunched(LaunchActivatedEventArgs e)
{
   Windows.System.User active_user = e.User;
}

这需要在包清单中添加用户帐户信息功能。

答案 1 :(得分:1)

  

StoreContext类的文档表明我应该能够通过检查默认StoreContext对象上的User属性来确定这一点。具体来说,NonRoamableId属性似乎是合适的。

建议使用Windows.Services.Store命名空间在Windows 10 Creators中获取用户ID'更新。但是,此命名空间不提供可用于在测试期间进行模拟的类。

因此,您应该发布应用程序以存储应用程序并将其下载到开发设备进行测试,以便获得有效的StoreContext

对于单用户应用程序:

  

在单用户应用程序(即仅在启动应用程序的用户的上下文中运行的应用程序)中,使用静态GetDefault方法获取可用于访问Windows Store相关的StoreContext对象用户的数据。

Windows.Services.Store.StoreContext context = StoreContext.GetDefault();

答案 2 :(得分:0)

我知道我在这里的答案很晚,但其他人也可能会发现这个问题。 StoreContext上的User属性不是设计用于检索用户的方法。实际上,从UWP获取有关当前登录到商店的用户的详细信息是不可能的。

User属性允许使用" StoreContext.GetForUser(...)API的多用户应用程序的开发人员创建StoreContext。使用此方法时,User属性将是创建它时提供的用户。

StoreContext.GetDefault()将始终具有null用户属性。

多用户模型专为Xbox One设计,可以同时登录多个用户。