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的计算次数。

你可能感兴趣的:(windows phone)