3

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

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

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

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

编辑 2017 年 11 月 16 日

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

4

3 回答 3

4

这里有一个相关的问题。

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

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

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

于 2017-08-22T09:37:39.780 回答
1

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

在 Windows 10 Creators' Update 中更推荐使用Windows.Services.Store命名空间来获取用户 ID。但是,此命名空间没有提供可用于在测试期间模拟的类。

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

对于单用户应用程序:

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

Windows.Services.Store.StoreContext context = StoreContext.GetDefault();
于 2017-08-17T02:57:41.493 回答
1

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

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

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

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

于 2018-03-27T20:34:17.040 回答