【问题标题】:StoreContext User property is always null in single-user UWP applicationStoreContext User 属性在单用户 UWP 应用程序中始终为空
【发布时间】:2018-03-28 04:34:17
【问题描述】:

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

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

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

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

2017 年 11 月 16 日编辑

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

【问题讨论】:

  • 您需要准确地关注this 才能使其正常工作。确保您已完成“将应用程序与商店关联”,并且您只需从商店下载该应用程序一次即可安装有效的许可证。安装后,您只需从 VS 调试您的应用程序,从此时起用户将不会填充数据。
  • 谢谢,贾斯汀。不幸的是,在这种情况下,我确信我已经完成了这些说明——所有其他 StoreContext 调用都正常工作(包括相关产品查找、试用许可证激活等)。
  • 嗯,很有趣。我想知道,您的测试帐户是 MSFT 帐户吗?另外,也可能是因为“在没有特定用户上下文的情况下激活多用户应用程序时,此属性返回 null”。见this
  • 有同样的想法,但应用是单用户应用...

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


【解决方案1】:

A related question here.

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

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

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

【讨论】:

  • 欣赏答案。但是,我也试过这个。我的应用已经声明了“用户帐户信息”属性,但在LaunchActivatedEventArgsStoreContext 中,User 属性始终为空。
【解决方案2】:

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

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

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

对于单用户应用程序:

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

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

【讨论】:

  • 感谢您的回答。然而,正如我在问题中指出的那样,StoreContext 的 User 属性在我的测试中始终为null,即使在通过 Store 发布的发布版本上运行,而不仅仅是在本地开发期间。
  • (我正在使用获取您建议的StoreContext的方式)。
【解决方案3】:

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

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

StoreContext.GetDefault() 总是有一个 null User 属性。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-29
    • 1970-01-01
    • 1970-01-01
    • 2014-12-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多