UDID 和 UUID 之间的区别 [重复]

Posted

技术标签:

【中文标题】UDID 和 UUID 之间的区别 [重复]【英文标题】:Differences between UDID and UUID [duplicate] 【发布时间】:2014-02-19 05:54:25 【问题描述】:

有人说 UDID (Unique Device IDentifier) 有人说 UUID (Universally Unique IDentifier)。它们是否相同?它们之间有什么区别?

【问题讨论】:

是否修改了重复的问题?重复的问题没有提出任何相关的问题,它声称拥有的答案被掩埋并添加为标有“(*)”的事后思考。是否可以删除重复的标签?这浪费了我 5 分钟的时间...... 【参考方案1】:

UUID(通用唯一标识符)基于每个应用。标识设备上的应用程序。只要用户没有完全删除应用程序,那么这个标识符就会在应用程序启动之间持续存在,并且至少可以让您识别使用设备上特定应用程序的同一用户。不幸的是,如果用户完全删除然后重新安装应用程序,那么 ID 将会改变。

UDID(唯一设备标识符) 唯一标识 ios 设备的 40 个十六进制字符序列。此值可以通过 iTunes 检索,或使用 UIDevice -uniqueIdentifier 找到。源自 MAC 地址等硬件详细信息。

【讨论】:

如何获取 UUID?以及 UUID 中有多少个字符以及它基本使用的位置 UUID 是 128 位字符,UUID 用 32 位小写十六进制数字表示。您可以通过参考此 SO Post ***.com/questions/14352418/… 来获取 UUID @Rugmangathan : 如何以编程方式获取 UDID? @JayprakashDubey,不,您不能再获得 UDID,而是可以使用 identifierForVendor()。有关更多信息,请关注此 SO 帖子 ***.com/a/31652454/2849567 UUID 不是基于每个应用程序,它是用于创建“唯一”ID 的标准。 identifierForVendor() 是你指的,它返回一个UUID,但advertisingIdentifier 也是一个UUID。【参考方案2】:

你最好通过这个- http://nshipster.com/uuid-udid-unique-identifier/

UUID(通用唯一标识符):由RFC 4122定义的可保证跨时空唯一性的128位序列。

UDID(唯一设备标识符):由 40 个十六进制字符组成的序列,用于唯一标识 iOS 设备(设备的社会安全号码,如果您愿意的话)。该值可以通过 iTunes 检索,或使用 UIDevice -uniqueIdentifier 找到。源自 MAC 地址等硬件详细信息。

【讨论】:

【参考方案3】:

Apple 显然开始在 iOS5 中删除对 UDID(唯一设备标识符)的访问权限。无论如何,您现在可以为识别目的做的最好的事情就是使用 UUID(通用唯一标识符)。这必须基于每个应用程序。也就是说,无法再识别设备,但您可以识别设备上的应用程序。只要用户没有完全删除应用程序,那么这个标识符就会在应用程序启动之间持续存在,并且至少可以让您识别使用设备上特定应用程序的同一用户。不幸的是,如果用户完全删除然后重新安装应用程序,那么 ID 将会改变,但这是任何人都可以做的最好的事情。

【讨论】:

【参考方案4】:

从 iOS 5 开始,Apple 已弃用 UIDevice uniqueIdentifier ,这意味着获取每个 iOS 设备的唯一 id 的传统方式现在无法使用,即。 [[UIDevice currentDevice] uniqueIdentifier] 在 iOS 5 及更高版本中失败。

因此,对于 UUID 的替代方案,我们可以使用 Apple 的 CFUUID 类来为设备创建唯一 id。但是,我们真的需要记住,这个内置类将创建随机数,因此它们将在每次调用时返回不同的 id。不要使用 NSUserDefaults 来存储它,最好的方法是使用 Keychain。

因此,我在这里为您提供使用它的最佳方式,以便将其用作您设备的唯一密钥。

- (NSString *)createNewUUID 

    CFUUIDRef theUUID = CFUUIDCreate(NULL);
    CFStringRef string = CFUUIDCreateString(NULL, theUUID);
    CFRelease(theUUID);
    return [(NSString *)string autorelease];

UDID:

http://whatsmyudid.com/

【讨论】:

作为一个小提示,您附加的图片标记为“获取 UUID;”但是,它实际上是在获取 UDID。我并不期待修复,只是想记下它,以便其他读者知道。 你需要了解 UUID 不是 UDID。 上图不正确,显示的是UDID,而不是UUID。 UDID 是每个设备的唯一字符串 ([[UIDevice currentDevice] uniqueIdentifier])。 UUID 是随机数,每次创建时都会给你一个随机字符串 (CFUUIDRef theUUID = CFUUIDCreate(NULL);)。 图片是正确的,作者的红色注释是错误的。【参考方案5】:

UDID,即Unique Device Identifier,应用在iTunes中,管理你苹果开发证书中的设备。可以通过以下代码在iOS5 SDK中获得:

[UIDevice currentDevice] uniqueIdentifier];

定义为:

@property(nonatomic,readonly,retain) NSString    *uniqueIdentifier  __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_NA,__MAC_NA,__IPHONE_2_0,__IPHONE_5_0);  // a string unique to each device based on various hardware info.

UUID,即通用唯一标识符,一种用于软件构造的标识符标准,由开放软件基金会 (OSF) 标准化,作为分布式计算环境 (DCE) 的一部分 (wiki)。

您可以通过以下代码获取UUID:

-(NSString*) uuid   
    CFUUIDRef puuid = CFUUIDCreate( nil );  
    CFStringRef uuidString = CFUUIDCreateString( nil, puuid );  
    NSString * result = (NSString *)CFStringCreateCopy( NULL, uuidString);  
    CFRelease(puuid);  
    CFRelease(uuidString);  
    return [result autorelease];  

但是,在 iOS7 设备中,上述方法会为不同的设备返回相同的值。

有很多方法可以在link中获取唯一标识符

【讨论】:

以上是关于UDID 和 UUID 之间的区别 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

ios堆栈溢出中的uuid,udid和设备令牌有啥区别

UUID的介绍

iOS开发中的UDID和UUID详解

iOS----------关于UDID和UUID的一些理解

为啥PostgreSQL UUID-OSSP可能产生重复值

uuid是啥意思