这篇是普及知识来了,纯属消遣时间,有需要的可以遛一遛。

UDID的全名为 Unique Device Identifier :设备唯一标识符。从名称上也可以看出,UDID这个东西是和设备有关的,而且是只和设备有关的,有点类似于MAC地址。我在博客《iOS从生成证书到打包上架-02》提到了真机调试,然后需要把UDID这个东西添加到Provisoning Profile授权文件中,也就是把设备唯一标识符添加进去,以此来识别某一台设备。  UDID是一个40位十六进制序列,我们可以使用iTunes和Xcode来获取这个值。

(1)iTunes获取UDID:
          把我们的手机连上电脑,然后打开iTunes.
            
 
默认这个位置显示的是序列号,只要点击一下序列号的位置,就可以切换为UDID了。
(2)Xcode获取UDID:
把手机连上电脑,然后打开Xcode,选择Window-->Devices,就会显示出当前你连接上的所有设备,其中显示的Identifier就是该设备的UDID:
 
           

      从iOS5之后,苹果就禁止了通过代码访问UDID,在这之前,可以使用[[UIDevice cuurrent] uniqueIdenfier] 这个方法来获取某设备UDID,现在是不可能了。对于为什么要禁止访问UDID,我下面会提到。而在目前的SDK中,苹果提供了一个参数identifierForVendor来替代原来UDID的作用。通过代码实现如下: 
NSUUID *uuid = [UIDevice currentDevice].identifierForVendor;
NSLog(@"uuid 1 = %@",uuid.UUIDString);
 
此时打印出的字符串UUIDString这个东西不是真正的UDID,而是一个有一点像的替代品。如同我上面所说,UDID是只和iOS设备有关的,而这个identifierForVendor是应用和设备两者都有关的,A应用安装到张三这台设备上,就会产生一个identifierForVendor(比如是:1234);A应用安装到李四这台设备上,就会产生另一个identifierForVendor(比如是:5678);B应用安装到张三这台设备上,又是一个全新的identifierForVendor(比如是:9999),B应用安装到李四这台设备上,还是一个全新的identifierForVendor(比如是:7777)。但是无论A应用安装卸载多少次,产生的是都是1234.  所以我们知道,这个identifierForVendor是一种应用加设备绑定产生的标识符,相当于是:Z(identifierForVendor) = X(某应用) + Y(某设备)。 当然,和真正的UDID的区别是显而易见的:也就是说App的开发者没有办法去区分某一台设备了,而是只能识别某个应用在某台设备上。
 
【UUID】
英文名称是:Universally Unique Identifier,翻译过来就是通用唯一标识符。是一个32位的十六进制序列,使用小横线来连接:8-4-4-4-12 。UUID在某一时空下是唯一的。比如在当前这一秒,全世界产生的UUID都是不一样的;当然同一台设备产生的UUID也是不一样的,现在最简单获取UUID的代码如下:
    for (int i = 0; i < 10; i++)
    {
        NSString *uuid = [NSUUID UUID].UUIDString;
        NSLog(@"uuid 2 = %@",uuid);
    }
通过运行程序可以发现,循环10次,每一次打印的值都是不一样的,当然循环的再多,这个值永远不会出现两个一样的值。所以从某种程序上来说,UUID跟你的设备没有什么关系了。
 
       在很早之前,苹果宣称如果第三方应用开发者继续分享或者使用iPhone、Mac、AppleWatch的UDID的话,那么他们的应用将会禁止上架。为什么苹果要在应用中禁止使用呢?那是因为隐私问题。比如我开发了5款App,很多用户都下载了这5款App并使用。如果我能轻易的获取这些用户的UDID,其实我能拼凑出用户的很多信息。由于UDID本身的隐私属性,之前常常用来做第三方统计和其他的目的。当然现在也有人使用MAC地址来识别设备,因为MAC地址也唯一的识别了一台设备并且不会被修改,不知道以后苹果会对此如何操作。
 

iOS UDID和UUID详解的更多相关文章

  1. iOS 单元测试之XCTest详解(一)

    iOS 单元测试之XCTest详解(一) http://blog.csdn.net/hello_hwc/article/details/46671053 原创blog,转载请注明出处 blog.csd ...

  2. iOS学习之UINavigationController详解与使用(一)添加UIBarButtonItem

    http://blog.csdn.net/totogo2010/article/details/7681879 1.UINavigationController导航控制器如何使用 UINavigati ...

  3. IOS—UITextFiled控件详解

    IOS—UITextFiled控件详解 //初始化textfield并设置位置及大小 UITextField *text = [[UITextField alloc]initWithFrame:CGR ...

  4. [转]iOS学习之UINavigationController详解与使用(三)ToolBar

    转载地址:http://blog.csdn.net/totogo2010/article/details/7682641 iOS学习之UINavigationController详解与使用(二)页面切 ...

  5. IOS 友盟使用详解

    IOS 友盟使用详解 这篇博客将会详细介绍友盟的使用,希望对博友们有所帮助. 首先我们在浏览器上搜索友盟. 在这里我们选择官网这个,进去友盟官网后我们按照下图进行选择. 接下来选择如下图 Next 这 ...

  6. iOS原生地图开发详解

    在上一篇博客中:http://my.oschina.net/u/2340880/blog/414760.对iOS中的定位服务进行了详细的介绍与参数说明,在开发中,地位服务往往与地图框架结合使用,这篇博 ...

  7. [转]iOS学习之UINavigationController详解与使用(二)页面切换和segmentedController

    转载地址:http://blog.csdn.net/totogo2010/article/details/7682433 iOS学习之UINavigationController详解与使用(一)添加U ...

  8. iOS中—触摸事件详解及使用

    iOS中--触摸事件详解及使用 (一)初识 要想学好触摸事件,这第一部分的基础理论是必须要学会的,希望大家可以耐心看完. 1.基本概念: 触摸事件 是iOS事件中的一种事件类型,在iOS中按照事件划分 ...

  9. ios新特征 ARC详解

    IOS ARC 分类: IOS ARC2013-01-17 09:16 2069人阅读 评论(0) 收藏 举报   目录(?)[+]   关闭工程的ARC(Automatic Reference Co ...

随机推荐

  1. [Err]1267 - Illegal mix of collations(utf8_general_ci,IMPLICIT) and (utf8_unicode_ci,IMPLICIT) for operation ‘=’

    SELECT * FROM table_a a  where a.id NOT IN (SELECT b.id FROM table_b  b); 先将两个数据表的编码统一,如果table_a的编码为 ...

  2. MAC 上搭建lua环境

    一.下载并安装 (1)最新release版下载地址 http://www.lua.org/ftp/lua-5.3.1.tar.gz (2)编译 Building Lua is implemented ...

  3. chrome和火狐获取资源

    获取网站数据: chrome下获取网站数据可以用如下方式去获取: 而火狐则可以按以下方式获取: 在该目录下找到你想要的数据. 获取本地的数据: chrome下获取本地的数据: firefox下获取本地 ...

  4. HTML5 离线功能介绍

    HTML5 是目前正在讨论的新一代 HTML 标准,它代表了现在 Web 领域的最新发展方向.在 HTML5 标准中,加入了新的多样的内容描述标签,直接支持表单验证.视频音频标签.网页元素的拖拽.离线 ...

  5. (转) mysql数据库引擎:MyISAM和InnoDB(性能优化)

    转自 http://yuwensan126.iteye.com/blog/1138022 Mysql 数据库中,最常用的两种引擎是innordb和myisam.Innordb的功能要比myiasm强大 ...

  6. socket基本操作

    我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览器浏览网页时,浏览器的进程怎么与web服务器通信的?当你用QQ聊天时,QQ进程怎么与服务器或你好友所在的QQ进程通信?这些都得靠so ...

  7. FFmpeg 2.0编译配置

    ./configure --enable-shared  --enable-doc --enable-ffmpeg --enable-ffplay --enable-ffprobe --enable- ...

  8. [Tommas] 测试场景 VS 测试用例 哪个更好?(转)

    分享一篇网上别人的感悟:      6年前,我在一家中型跨国公司工作的时候,我建议与其浪费时间在准备充分的测试用例,还不如编写描述测试场景的文档.所有的人都对我的建议.投以烦恼的目光.他们的脸上清晰地 ...

  9. windows下python配置

    1.下载安装 Pythonpython-2.7.5.msi  http://www.python.org/download/如下载 Python 2.7.5,安装目录为 C:\Python27 2.添 ...

  10. HIbernate学习笔记(九) hibernate事务并发处理与乐观悲观锁

    事务并发处理 一. 数据库的隔离级别:并发性作用. 1.   ReadUncommited(未提交读):没有提交就可以读取到数据(发出了Insert,但没有commit就可以读取到.)很少用 2.   ...