2017-08-16 35 views
3

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

注意:我知道UserWatcher类及其在系统上查询用户的方法。然而,我想避免使用此的原因如下:

  1. 通过使用这些查询方法暴露于该应用的性质不足以确定哪个User是与当前StoreContext相关联的一个,这意味着,这样的解决方案将容易出错。
  2. 以这种方式查询用户信息会导致权限弹出,这对于应用程序是否需要读取个人身份信息是有意义的,但由于我只是寻找一个程序化的唯一标识符,所以看起来并不像它应该是必要的。

我正在针对Windows 10 Creators的更新SDK(10.0.15063)进行开发。

编辑2017年11月16日

这看起来可能是一个UWP错误,现在是固定的。无需更改代码,我现在可以在应用启动时看到一个非空User对象附加到LaunchActivatedEventArgs。相应地接受了答案。

+1

您需要关注[this](https://docs.microsoft.com/en-au/windows/uwp/monetize/in-app-purchases-and-trials#testing)才能正常工作。确保您已完成“将应用程序与商店关联”,并且您只需从商店下载应用程序一次即可安装有效的许可证。一旦安装完成,您可以从VS调试您的应用程序,并且用户不会使用此时的数据填充。 –

+0

谢谢,贾斯汀。不幸的是,在这种情况下,我确信我已经完成了这些说明 - 所有其他StoreContext调用都正常工作(包括相关产品查找,试用许可激活等)。 –

+1

嗯,有趣。我想知道,您的测试帐户是否为MSFT帐户?此外,它可能是因为*“当没有特定用户上下文激活多用户应用程序时,此属性返回null”*。请参见[this](https://docs.microsoft.com/en-us/uwp/api/windows.applicationmodel.activation.launchactivatedeventargs)。 –

回答

2

A related question here.

活跃用户与MS帐户登录可以从OnLaunched /激活的事件参数来获得。

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

这需要增加用户帐户信息在包清单能力。

+0

欣赏答案。不过,我也试过这个。我的应用程序已经声明了“用户帐户信息”属性,但是在LaunchActivatedEventArgs和StoreContext中,User属性始终为空。 –

1

为StoreContext类文档建议我应该能够通过检查默认StoreContext对象的用户属性,以确定这一点;具体来说,NonRoamableId属性看起来是合适的。

更推荐使用Windows.Services.Store命名空间在Windows 10 Creators'Update中获取用户标识。然而,这个命名空间并没有提供你可以用来在测试过程中模拟的类。

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

对于单用户应用:

在单用户的应用程序(即,运行只在启动了的应用程序的用户的上下文中的应用程序),使用静态GetDefault方法来得到一个StoreContext对象,您可以使用该对象访问用户的Windows Store相关数据。

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

感谢您的答案。然而,正如我在问题中指出的那样,即使运行在通过Store发布的发布版本上,StoreContext的User属性在我的测试中一直是''''''',而不仅仅是在本地开发期间。 –

+0

(我正在使用获取您建议的'''StoreContext''的方式)。 –

相关问题