2017-08-16 65 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''的方式)。 –

相關問題