首页 文章

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

提问于
浏览
47

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

在较旧的Windows Phone版本中有这样的ID:WP7:Device Status for Windows Phone

WP7.1:DeviceStatus Class

但是它们不再适用于SDK 8.0 .

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

  • -/// - -解 - - - - -

我可以确认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 回答

  • 2

    我还没有开始为Windows Phone 8开发,仍然在7,但你仍然应该能够使用原来的DeviceExtendedProperties类来撤回设备唯一ID .

    DeviceExtendedProperties.GetValue("DeviceUniqueId")
    
  • 0

    我有这个问题,返回null值 . 然后记得它需要打开 .

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

  • 4

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

  • 8

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

    byte[] id = (byte[])Microsoft.Phone.Info.DeviceExtendedProperties.GetValue("DeviceUniqueId");
     string   deviceID = Convert.ToBase64String(id);
    
  • 2

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

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

  • 1

    我用过这个:

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

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

    我用过这个用于windows phone的独特设备ID .

  • 1

    上面的答案适用于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);
    }
    

    我发布了一篇博客文章here解释了这些差异,有关在Windows RT上阅读设备信息的更多细节可以找到here

相关问题