在Windows Phone 8下获取唯一的设备ID(UDID)
是否有任何唯一的设备ID(UDID)或我可以在Windows Phone 8(WP8)上读取的任何类似的ID,这些ID不会随着硬件更改,应用程序重新安装等而改变?
在较旧的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")
我有这个问题返回空值。 然后记住它需要打开。
在WMAppManifest.xml
– > Capabilities
选项卡 – >打开ID_CAP_IDENTITY_DEVICE
这个DeviceUniqueId有一个转折点 – 它只对一个发布者是唯一的。 所以它不是真正的设备范围的唯一标识符,而是一个发布者的唯一设备ID。 我们注意到当我们在一些客户项目上工作时,我们试图从不同账户识别同一个电话(客户在两个不同账户下发布)。
您可以通过DeviceExtendedProperties.GetValue(“DeviceUniqueId”)获取您自己的wp8设备ID以下是将deviceId作为string获取的简单方法
byte[] id = (byte[])Microsoft.Phone.Info.DeviceExtendedProperties.GetValue("DeviceUniqueId"); string deviceID = Convert.ToBase64String(id);
通过在Windows Phone 8和Windows 8中不提供DeviceUniqueId,Microsoft试图避免用户跟踪,但是随着Dev社区的压力越来越大,他们又把它们带回来。
在Windows 8.1中,Microsoft已经引入了一个新的AdvertisingId API,并且可能会在随后的Windows Phone 8.1 / 9版本中使用类似的Id来识别跨应用程序的唯一用户。
我用这个:
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手机唯一的设备ID。
上面的答案适用于Windows Phone 7和8 Silverlight。 但是,由于SDK没有这个dll库(Microsoft.Phone),它们将不能用于Windows Phone RT(通用)或商店应用程序。
这是如何获得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设备信息的更多细节可以在这里find