簡體   English   中英

在Windows Phone 8下獲取唯一設備ID(UDID)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM