StoreContext User 属性 在单用户 UWP 应用程序中始终为 null

StoreContext User property is always null in single-user UWP application

我正在开发一个适用于 Windows 10 和 Xbox One 设备的 UWP(通用 Windows 平台)应用程序。该应用程序是一个 single user application. I'm trying to determine at runtime a unique identifier for the active signed-in user -- just an ID without any personally identifiable information. The documentation for the StoreContext class 建议我应该能够通过检查默认 StoreContext 对象上的 User 属性 来确定这一点;具体来说,NonRoamableId 属性 似乎是合适的。但是,在每个上下文中,我 运行 应用程序在(调试、部署、Windows、Xbox)中,StoreContext 的 User 属性 一直是 null .这是预期的吗?我找不到任何其他方法来确定此信息。

注意:我知道 UserWatcher class 及其在系统上查询用户的方法。但是,我想避免使用它,原因如下:

  1. 通过使用这些查询方法向应用程序公开的属性不足以确定哪个 User 是与当前 StoreContext 关联的那个,这意味着这样的解决方案容易出错。
  2. 以这种方式查询用户信息会导致权限弹出窗口,如果应用程序需要读取个人身份信息,这是有意义的,但由于我只是在寻找一个程序化的唯一标识符,所以这似乎不是喜欢它应该是必要的。

我正在针对 Windows 10 Creators' Update SDK (10.0.15063) 进行开发。

编辑 2017 年 11 月 16 日

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

The documentation for the StoreContext class suggests that I should be able to determine this by examining the User property on the default StoreContext object; specifically, the NonRoamableId property seems appropriate.

更推荐使用Windows.Services.Store命名空间获取Windows10 创意者更新中的用户ID。但是,此命名空间未提供可在测试期间用于模拟的 class。

所以你应该发布你的应用程序来存储和下载应用程序到你的开发设备进行测试,这样你就可以得到一个有效的StoreContext

对于单用户应用程序:

In a single-user app (that is, an app that runs only in the context of the user that launched the app), use the static GetDefault method to get a StoreContext object that you can use to access Windows Store-related data for the user.

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

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

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

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

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

用户 属性 允许 multi-user 应用程序的开发人员使用“StoreContext.GetForUser(...) API 创建 StoreContext。当这个方法,则用户 属性 将是创建时提供的用户。

StoreContext.GetDefault() 将始终有一个空用户 属性.

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