windows phone 获取udid

Windows phone SDK中获取udid的方法是:

 byte[] DeviceUniqueId = DeviceExtendedProperties.GetValue("DeviceUniqueId") as byte[];

  

由于udid在windows phone SDK的API中获取的返回值是一20字节byte数组,若直接转为ASCII码会出现各种符号,在用http get方法向服务器传送时url难免会出现解析错误的问题。

所以想到将这20字节数组直接拼成一数字字符串,将数组的每一元素不够三位数的前面补0,得到一字符串方法如下:

private static string GetUserId()
        {
            StringBuilder sb = new StringBuilder();

            byte[] DeviceUniqueId = DeviceExtendedProperties.GetValue("DeviceUniqueId") as byte[];

            if (DeviceUniqueId != null)
            {
                //return MD5.GetMd5String(DeviceUniqueId);

                foreach (byte b in DeviceUniqueId)
                {
                    if (b < 10)         //0-9
                    {
                        sb.Append("00");
                    }
                    else if (b < 100)   //10-99
                    {
                        sb.Append("0");
                    }

                    sb.Append(b);
                }
            }

            return sb.ToString();
        }

  得到到是一60字节长度的字符串。

采用此种方法获得的udid有过长的缺点,实际在使用的时候也遇到了由于udid过长导致与服务器通信时遇到些特殊问题,但是由于版本已经发出去了,无法再更改。如果可以修改的话可以使用另外一种方式,MD5,将从设备获得的byte数组求MD5,得到的序列号也几乎是唯一的。长度几乎是上述方法的一半(32)。

另外还可以做一些优化,在第一次计算得到udid的字符串后,使用独立存储存起来,以后直接读取即可,减少MD5的计算次数。

原文地址:https://www.cnblogs.com/dokaygang128/p/2530033.html