[英]Get Unique Device ID (UDID) under Windows Phone 8
是否有任何唯一的設備ID(UDID)或任何類似的ID,我可以在Windows Phone 8(WP8)上讀取,不會隨硬件更改,應用程序重新安裝等而改變?
在較舊的Windows Phone版本中,存在以下ID:WP7: Windows Phone的設備狀態
WP7.1: DeviceStatus類
但是它們不再適用於SDK 8.0。
為什么我問:想法是用戶在第一次啟動應用程序時獲得一些免費信用,我想避免用戶只是重新安裝應用程序以獲得新的免費信用。 使用電子郵件或電話號碼注冊可以解決這個問題,但如果可以,我不希望在第一次注冊時打擾用戶。
- -/// - -解 - - - - -
我可以確認DeviceExtendedProperties.GetValue(“DeviceUniqueId”)仍然可以在WP 8.0中運行。 當我閱讀以下文字時有點困惑:
在Windows Phone OS 7.0中,此類用於查詢特定於設備的屬性。 在Windows Phone OS 7.1中,不推薦使用DeviceExtendedProperties中的大多數屬性,而應使用新的DeviceStatus類。 但是,在適當的情況下,您仍然可以使用以下任何未棄用的屬性。
MSDN:DeviceExtendedProperties類
我可以運行以下代碼,刪除應用程序並重新安裝它並獲得相同的ID:
byte[] myDeviceID = (byte[])Microsoft.Phone.Info.DeviceExtendedProperties.GetValue("DeviceUniqueId");
string DeviceIDAsString = Convert.ToBase64String(myDeviceID);
MessageBox.Show(DeviceIDAsString);
我還沒有開始為Windows Phone 8開發,仍然在7,但您仍然應該能夠使用原始的DeviceExtendedProperties類來撤回設備唯一ID。
DeviceExtendedProperties.GetValue("DeviceUniqueId")
我有這個問題,返回null值。 然后記得它需要打開。
在WMAppManifest.xml
- > Capabilities
選項卡 - >打開ID_CAP_IDENTITY_DEVICE
這個DeviceUniqueId有一個扭曲 - 它只對一個發布者是唯一的。 因此,它不是設備范圍內的唯一標識符,而是一個發布商的唯一設備ID。 我們注意到,當我們處理一些客戶項目時,我們嘗試從不同的帳戶識別相同的電話(客戶在兩個不同的帳戶下發布)。
您可以通過DeviceExtendedProperties.GetValue(“DeviceUniqueId”)獲取您自己的wp8設備ID以下是將deviceId作為字符串獲取的簡單方法
byte[] id = (byte[])Microsoft.Phone.Info.DeviceExtendedProperties.GetValue("DeviceUniqueId");
string deviceID = Convert.ToBase64String(id);
由於未在Windows Phone 8和Windows 8中提供DeviceUniqueId,微軟試圖避免用戶跟蹤,但是由於Dev社區的壓力越來越大,他們又將其重新帶回來。
在Windows 8.1中,Microsoft引入了一個新的AdvertisingId API,並且還可能帶來類似的ID來識別后續Windows Phone 8.1 / 9版本中的應用程序中的唯一用戶。
我用過這個:
private static String getDeviceId()
{
byte[] id = (byte[])Microsoft.Phone.Info.DeviceExtendedProperties.GetValue("DeviceUniqueId");
return BitConverter.ToString(id).Replace("-", string.Empty);
}
但關鍵是檢查WMAppManifest中的ID_CAP_IDENTITY_DEVICE,否則會引發錯誤。
我發現這是一個新的HostInformation.PublisherHostId屬性更多信息,請訪問http://msdn.microsoft.com/en-us/library/windowsphone/develop/windows.phone.system.analytics.hostinformation.publisherhostid.aspx ..
string myDeviceID = (byte[])DeviceExtendedProperties.GetValue("DeviceUniqueId");
string DeviceIDAsString = Convert.ToBase64String(myDeviceID);
我用過這個用於windows phone的獨特設備ID。
上面的答案適用於Windows Phone 7和8 Silverlight。 但是,它們不適用於Windows Phone RT(通用)或商店應用程序,因為SDK沒有此dll庫(Microsoft.Phone)。
這是您在Windows Phone 8.1 RT(通用/商店應用程序)上獲取設備ID和名稱(以及可能的其他信息)的方式。
private string GetHardwareId()
{
var token = HardwareIdentification.GetPackageSpecificToken(null);
var hardwareId = token.Id;
var dataReader = Windows.Storage.Streams.DataReader.FromBuffer(hardwareId);
byte[] bytes = new byte[hardwareId.Length];
dataReader.ReadBytes(bytes);
return BitConverter.ToString(bytes);
}
有關在Windows RT上閱讀設備信息的更多詳細信息,請訪問此處
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.