【问题标题】:Get Unique Device ID (UDID) under Windows Phone 8在 Windows Phone 8 下获取唯一设备 ID (UDID)
【发布时间】:2012-12-08 03:48:34
【问题描述】:

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

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

WP7.1:DeviceStatus Class

但它们不再适用于 SDK 8.0。

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

---///---解决方案---------

我可以确认 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);

【问题讨论】:

  • 据我了解,移动操作系统不提供 UDID 的压力很大,因为它具有跟踪用户的能力。因此,注册选项可能是一个更好的主意。否则,在未来,UDID 将不再可用。 This has already happened in iOS.
  • 我知道。苹果也有同样的问题,他们通过使用vendor ID 来“缓解”这个问题。所以我认为微软做了类似的事情?没有?
  • 老实说,我不确定Windows Phone 8,因为我没有针对它进行开发。但原则上,我们应该尽量不要使用静态标识符,除非它们存储在服务器上。欧盟一直在谈论有关避免在移动设备上跟踪用户的立法。

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


【解决方案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);
}

有关在 Windows RT 上读取设备信息的更多详细信息,请参阅here

【讨论】:

    【解决方案2】:
    string myDeviceID = (byte[])DeviceExtendedProperties.GetValue("DeviceUniqueId");
    string DeviceIDAsString = Convert.ToBase64String(myDeviceID);
    

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          【解决方案5】:

          我用过这个:

              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】:

            通过在 Windows Phone 8 和 Windows 8 中不提供 DeviceUniqueId,Microsoft 试图避免用户跟踪,但随着来自开发社区的压力越来越大,他们再次将其恢复。

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

            【讨论】:

            • 您好 Prabh Arora,感谢您分享有用的信息。我有一个关于 AdvertisingId 的查询,用户可以随时重置或更改此 AdvertisingId,因为在 iOS 用户的情况下可以这样做。请回复。提前致谢。
            • 我只是做了更多的研发,发现了这篇文章,en.kioskea.net/faq/… 用户可以选择阻止开发人员获取他的 AdvertisingId,所以所有我们都回到第一方。如果您发现任何其他替代方法可以使用任何其他独特功能进行跟踪,请回复。
            【解决方案7】:

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

            【讨论】:

            • 这听起来很重要。你能详细说明一下吗?这是否意味着某部手机可能会根据尝试读取它的应用程序(链接到发布商)而获得不同的 ID?
            • 这意味着来自同一发布者的两个不同的应用程序将从给定的设备中检索相同的 DeviceUniqueId 值,但由第二个发布者编写的应用程序将检索不同的 DeviceUniqueId。
            • 请您提供出版商的例子吗?
            【解决方案8】:

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

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

            【讨论】:

            • 没错!如果没有该功能,上述解决方案将无法工作。
            【解决方案9】:

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

            DeviceExtendedProperties.GetValue("DeviceUniqueId")
            

            【讨论】:

            • 好的,我可以确认一下。编辑了我的问题。
            • 还应在 WMAppMenifest.xml 中检查 ID_CAP_IDENTITY_DEVICE
            猜你喜欢
            • 1970-01-01
            • 2015-11-15
            • 1970-01-01
            • 1970-01-01
            • 2014-06-12
            • 1970-01-01
            • 2015-02-20
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多