2012-11-09 43 views
2

因此,有關於獲取Windows 8設備的唯一標識符的各種帖子,如this one。但是,也認識到當各種系統組件改變時標識符會改變。 From the docs爲Windows 8獲取穩定的唯一設備ID

硬件漂移是應用程序不應該按原樣使用ASHWID字節流的原因。如果少數硬件組件發生更改或關閉,則API會返回一個不同的ASHWID。該應用程序有可能會錯誤地將相同設備標識爲新的設備。以下是可能會導致硬件漂移一些可能出現的情況:

  • 在接近一天結束的時候,用戶想要做最後直到她回家的電池,讓她關閉藍牙和Wi-Fi,同時保持3G/4G用於與雲連接。
  • 用戶插入USB 3G數據卡。
  • 底層OS/System on Chip電源管理可能會關閉某些內核。

這是一個很糟糕的事態。文檔建議查看ASHWID(特定於應用程序的硬件ID)並加權各種組件,這些組件不太可能改變和忽略(賦予權重0)可變的事物,如是否存在碼頭。但是,我沒有看到關於如何識別組件的任何文檔。我的標識符只是一個數字列表。

有沒有更好的方式來獲得一個穩定的唯一設備ID(如果它是封裝特定的,只要每個設備/軟件包組合都是唯一的就可以)? 或者,有人可以指示我有關如何識別由HardwareIdentification.GetPackageSpecificToken生成的令牌中的組件的文檔嗎?

UPDATE:

摸索出的組件的一部分。但仍然對獲得穩定身份證的更好方法感興趣。

字節流由四個字節的多個組組成。前兩個字節包含組件的類型,接下來的兩個字節包含該值。使用下表來識別每個組件的類型:

+0

本文給出了一個基於代碼的解決方案來檢查硬件轉移https://code.msdn.microsoft.com/windowsapps/How-to-use-ASHWID-to-3742c83e –

回答

1

您是否嘗試過使用Receipts API。文檔表明它在「收據」元素下具有設備標識符「ReceiptDeviceId」。僅當用戶登錄到商店時,API的唯一問題才起作用。

+0

絕對是一個有趣的想法。我可以保證我的用戶將在線,因爲我的應用程序需要互聯網連接,但我不能保證他們將登錄到商店... – Endophage

+0

我已經研究了這一點,它似乎'ReceiptDeviceId'是每個不同運行我的應用程序。你知道這個值是否與已發佈的應用程序一致,甚至可能是在同一設備上安裝(與使用'CurrentAppSimulator'類相比)? – earthling

+0

從我所看到的情況來看,它對於已發佈的應用程序而言是不變的。 currentappsimulator每次調用都會隨機返回一個。 – darkphantum