2014-09-29 101 views
0

如何唯一標識表面(平板電腦)?我如何獲得平板電腦的ID?有一種使用`HardwareIdentification.GetPackageSpecificToken(null)的方法。問題是,它改變了簡單的硬件更改,如禁用藍牙。有沒有辦法爲平板電腦獲得獨一無二的ID?WindowsRT表面(平板電腦)識別

+0

你的意思是用asp.net標記問題嗎?如果是這樣,你想做什麼? – 2014-09-29 09:39:48

+0

重要的是你需要多長時間ID,但對於大多數目的(僅限於平板電腦,而不是電話),您可以使用['EasClientDeviceInformation.Id'](http://msdn.microsoft.com/zh-cn/library /windows/apps/windows.security.exchangeactivesyncprovisioning.easclientdeviceinformation.aspx)。此屬性爲您提供「MachineID,User SID和Package Family Name」組合的SHA256散列的一半。這將永遠不會改變(只要您的套餐系列名稱保持不變,它應該),但它會因用戶而異,因此它不會唯一標識單個設備。 – 2014-09-29 19:18:12

+0

感謝@ NateDiamond.is有一種方法來識別兩個平板電腦,儘管它被多個用戶使用 – 2014-09-30 07:47:19

回答

0

您可以使用HardwareIdentification.GetPackageSpecificToken(null),看到http://msdn.microsoft.com/en-us/library/windows/apps/jj553431.aspx

這功能爲您提供了大量的信息,你可以過濾,只要你喜歡。例如:

using System.Runtime.InteropServices.WindowsRuntime;

public static string GetMachineId() 
{ 
    var hardwareToken = 
     HardwareIdentification.GetPackageSpecificToken(null).Id.ToArray(); 
    var count = hardwareToken.Length/4; 
    ulong id = 0ul; 
    for (int i = 0; i < count; i++) 
    { 
     switch (BitConverter.ToUInt16(hardwareToken, i * 4)) 
     { 
      case 1: 
       // processor 
      case 2: 
       // memory 
      case 9: 
       // system BIOS 
       id = (id << 12)^BitConverter.ToUInt16(hardwareToken, i * 4 + 2); 
       break; 
     } 
    } 
    return Convert.ToBase64String(BitConverter.GetBytes(id)); 
} 

但是,請記住,這個功能和底層API,不能在所有連接到互聯網的設備保證絕對的唯一性。您通常會將其與關於用戶的信息結合起來。

另一種方法是在本地(非漫遊)存儲中生成並存儲GUID,並將其用作機器ID。根據你的具體需求,這可能是一個更好的解決方案。

UPDATE

的GUID方法相當簡單。剛開始使用

StorageFile file = await ApplicationData.Current.LocalFolder.CreateFileAsync(
    "installationId", 
    CreationCollisionOption.FailIfExists); 

using (Stream fileStream = await file.OpenStreamForWriteAsync()) 
{ 
    await fileStream.WriteAsync(installationId.ToByteArray(), 0, 16) 
    await fileStream.FlushAsync(); 
} 

在隨後的運行中生成新的GUID的應用程序使用

Guid installationId = Guid.NewGuid(); 

運行,那麼存儲在本地文件中的第一次,你發現該文件是存在的,閱讀它。

此方法的一個可能的缺點是,當應用程序被卸載並隨後重新安裝時,將會生成一個新的GUID。

+0

@KrisVandermotton .as我在我的問題中說過,這種方法不會解決我的問題,因爲packagespecificToken是針對您關閉的小硬件更改你的藍牙 – 2014-09-30 08:29:27

+0

@MigaraKulasekara正如我在我的回答中所說的,你可以過濾這些信息。當添加或刪除網絡適配器或藍牙連接時,我顯示的功能不會更改其輸出。 – 2014-09-30 08:32:24

+0

謝謝@ KrisVandermotten,你能解釋一下GUID的方法嗎? – 2014-09-30 08:49:27