在Windows Phone 8下获取唯一设备ID(UDID)

时间:2012-12-20 15:24:05

标签: c# windows-phone-7 windows-phone-8

是否有任何唯一的设备ID(UDID)或我可以在Windows Phone 8(WP8)上读取的任何类似的ID,这些ID不随硬件更改,应用重新安装等而改变。

在较旧的Windows Phone版本中,有以下ID: WP7:Device Status for Windows Phone

WP7.1:DeviceStatus Class

但它们不再适用于SDK 8.0。

为什么我问: 这个想法是用户在第一次启动应用程序时获得一些免费信用,我想避免用户只是重新安装应用程序以获得新的免费信用。使用电子邮件或电话号码注册可以解决这个问题,但如果可以,我不希望在第一次注册时打扰用户。

--- --- /// SOLUTION ----------

我可以确认DeviceExtendedProperties.GetValue(“DeviceUniqueId”)在WP 8.0中仍然有效。当我阅读以下文字时有点困惑:

  

在Windows Phone OS 7.0中,此类用于查询特定于设备的   属性。在Windows Phone OS 7.1中,大多数属性都在   不推荐使用DeviceExtendedProperties,以及新的DeviceStatus   应该使用类来代替。但是,在适当的情况下,您可以   仍然使用以下任何未弃用的属性。

MSDN:DeviceExtendedProperties Class

我可以运行以下代码,删除应用程序并重新安装它并获得相同的ID:

byte[] myDeviceID = (byte[])Microsoft.Phone.Info.DeviceExtendedProperties.GetValue("DeviceUniqueId");
string DeviceIDAsString = Convert.ToBase64String(myDeviceID);
MessageBox.Show(DeviceIDAsString);

9 个答案:

答案 0 :(得分:31)

我还没有开始为Windows Phone 8开发,仍然是7,但您仍然可以使用原始DeviceExtendedProperties类来撤回设备唯一ID。

DeviceExtendedProperties.GetValue("DeviceUniqueId")

答案 1 :(得分:20)

我在返回null值时遇到了这个问题。然后记得它需要打开。

WMAppManifest.xml - > Capabilities标签 - >开启ID_CAP_IDENTITY_DEVICE

答案 2 :(得分:8)

此DeviceUniqueId有一个扭曲 - 它仅对一个发布者是唯一的。因此,它不是设备范围内的唯一标识符,而是一个发布商的唯一设备ID。我们注意到,当我们处理某个客户项目时,我们尝试从不同的帐户识别同一部手机(客户在两个不同的帐户下发布)。

答案 3 :(得分:4)

您可以通过DeviceExtendedProperties.GetValue(“DeviceUniqueId”)获取您自己的wp8设备ID 以下是将deviceId作为字符串

的简单方法
byte[] id = (byte[])Microsoft.Phone.Info.DeviceExtendedProperties.GetValue("DeviceUniqueId");
 string   deviceID = Convert.ToBase64String(id);

答案 4 :(得分:2)

由于未在Windows Phone 8和Windows 8中提供DeviceUniqueId,Microsoft试图避免用户跟踪,但是由于Dev社区的压力越来越大,他们又将其重新启用。

在Windows 8.1中,Microsoft引入了一个新的AdvertisingId API,并且还可能带来类似的ID来识别后续Windows Phone 8.1 / 9版本中应用程序中的唯一用户。

答案 5 :(得分:2)

我用过这个:

    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,否则会引发错误。

答案 6 :(得分:1)

我发现这是一个新的HostInformation.PublisherHostId属性 更多信息在 http://msdn.microsoft.com/en-us/library/windowsphone/develop/windows.phone.system.analytics.hostinformation.publisherhostid.aspx ..

答案 7 :(得分:1)

string myDeviceID = (byte[])DeviceExtendedProperties.GetValue("DeviceUniqueId");
string DeviceIDAsString = Convert.ToBase64String(myDeviceID);

我已将此用于Windows Phone唯一设备ID。

答案 8 :(得分:0)

以上答案适用于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上阅读设备信息的更多详细信息,请参见here

相关问题