Windows Phone 8.1 中的设备唯一标识符

28

如何在Windows Phone 8.1中获取设备唯一标识?使用DeviceExtendedProperties.GetValue("DeviceUniqueId")的旧方法不适用于Windows Universal应用程序。


有什么例子吗?我在这里也问了这个问题:http://stackoverflow.com/questions/36004003/windows-phone-device-unique-id - Glenn Strycker
2个回答

32
private string GetDeviceID()
{
    HardwareToken token = HardwareIdentification.GetPackageSpecificToken(null);
    IBuffer hardwareId = token.Id;

    HashAlgorithmProvider hasher = HashAlgorithmProvider.OpenAlgorithm("MD5");
    IBuffer hashed = hasher.HashData(hardwareId);

     string hashedString = CryptographicBuffer.EncodeToHexString(hashed);
     return hashedString;
}
希望这能帮到你!

为什么选择MD5呢?为什么不选择其他算法呢? - Apoorva
9
我会把"MD5"替换成HashAlgorithmNames.Md5,使句子更加通俗易懂,但不改变原意。 - Alexander.Ermolaev
你可以用Convert.ToBase64String替换CryptographicBuffer.EncodeToHexString,这样会生成更短但仍可读的字符串。 - Grigory

23
请注意,当您编写通用应用程序时,它不仅可以安装在手机上。虽然在手机上技术上硬件配置相同,但在其他设备上可能会有所变化,因此其ID也会发生变化。我认为没有这样的通用方法可以获得ID。(更多信息请参见这里)。
您可以查看HardwareIdentification类及其方法GetPackageSpecificToken
HardwareToken myToken = HardwareIdentification.GetPackageSpecificToken(null);
IBuffer hardwareId = myToken.Id;

还有一个关于如何使用应用程序特定硬件 ID (ASHWID) 实现每个设备的应用逻辑的指导


2
如果您想使用它,必须记住,当您更改应用程序签名证书时,此ID将会更改。 - Johniak
@Johniak 谢谢你指出这一点。 - Romasz
@Romasz HardwareIdentification.GetPackageSpecificToken依赖于包的ID/名称。是否有其他ID在同一设备上安装的所有应用程序中都相同? - Kinjan Bhavsar
@KinjanBhavsar 我不确定这个。 - Romasz
@Romasz,您能否确认每个设备的硬件ID都是唯一的(即如果我在两个设备上安装相同的应用程序,我会得到不同的硬件ID)?另外,如果两个设备相同,我们也会得到不同的硬件ID吗? - Kinjan Bhavsar
@KinjanBhavsar 我不知道。 - Romasz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接