47

是否有任何唯一的设备 ID (UDID) 或任何类似的 ID 可以在 Windows Phone 8 (WP8) 上读出,不会随着硬件更改、应用程序重新安装等而改变?

在较旧的 Windows Phone 版本中,有这样的 ID:WP7:Windows Phone 的设备状态

WP7.1:设备状态类

但它们不再适用于 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);
4

9 回答 9

31

我还没有开始为 Windows Phone 8 进行开发,仍然在 7 上,但是您仍然应该能够使用原始的DeviceExtendedProperties类来拉回设备唯一 ID。

DeviceExtendedProperties.GetValue("DeviceUniqueId")
于 2012-12-20T18:20:49.497 回答
20

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

WMAppManifest.xml->Capabilities选项卡->打开ID_CAP_IDENTITY_DEVICE

于 2013-01-20T19:44:31.937 回答
8

这个 DeviceUniqueId 有一个转折点——它只对一个发布者是唯一的。所以它不是真正的设备范围的唯一标识符,而是一个发布者的唯一设备 ID。我们在处理某个客户项目时注意到,我们试图从不同的帐户中识别同一部手机(客户在两个不同的帐户下发布)。

于 2013-03-12T09:01:07.557 回答
4

您可以通过 DeviceExtendedProperties.GetValue("DeviceUniqueId") 获取自己的 wp8 设备 ID 这是获取 deviceId 作为字符串的简单方法

byte[] id = (byte[])Microsoft.Phone.Info.DeviceExtendedProperties.GetValue("DeviceUniqueId");
 string   deviceID = Convert.ToBase64String(id);
于 2013-12-11T06:54:49.047 回答
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,否则会抛出错误。

于 2014-01-28T08:19:03.207 回答
2

通过在 Windows Phone 8 和 Windows 8 中不提供 DeviceUniqueId,微软试图避免用户跟踪,但随着来自开发社区的压力越来越大,他们又把它带回来了。

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

于 2013-10-28T17:59:09.840 回答
1

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

于 2014-08-03T01:00:29.403 回答
1
string myDeviceID = (byte[])DeviceExtendedProperties.GetValue("DeviceUniqueId");
string DeviceIDAsString = Convert.ToBase64String(myDeviceID);

我已将其用于 windows phone 唯一设备 ID。

于 2015-02-24T07:18:51.837 回答
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 上读取设备信息的更多详细信息,请参见此处

于 2015-07-02T05:48:44.150 回答