UDID和UUID的区别

45

一些人说 UDID (唯一设备标识符),而有些人则说UUID (通用唯一标识符)。它们是相同的吗?它们之间有什么区别呢?


1
重复的问题被修改了吗?这个重复的问题与任何相关内容都没有关系,而且它声称拥有的答案被埋藏起来,并作为一个附加标记了 "(*)"。是否可以删除重复的标签?这个问题浪费了我好几分钟的时间... - Mars
5个回答

99
UUID (通用唯一识别码) 是基于应用程序的。它标识设备上的应用程序。只要用户不完全删除应用程序,该标识符就会在应用程序启动之间保持不变,并且至少允许您使用设备上的特定应用程序识别相同的用户。不幸的是,如果用户完全删除然后重新安装应用程序,则ID将更改。 UDID (唯一设备标识符) 由40个十六进制字符序列组成,可唯一标识iOS设备。此值可以通过iTunes检索,或者使用UIDevice-uniqueIdentifier找到。派生自硬件详细信息,如MAC地址。

我怎么可以获取UUID?UUID有多少个字符,它主要被用在哪里? - Rahul Sharma
UUID是一个128位的字符,由32个小写十六进制数字表示。您可以参考这篇SO帖子https://dev59.com/4mYq5IYBdhLWcg3wmRua来获取UUID。 - Rugmangathan
1
@Rugmangathan:如何以编程方式获取UDID? - Jayprakash Dubey
@JayprakashDubey,不,你不能再获取UDID了,相反你可以使用identifierForVendor()。更多信息请参考这篇SO帖子https://dev59.com/ylwZ5IYBdhLWcg3wROeN#31652454。 - Rugmangathan
4
UUID不是基于每个应用程序的,它是用于创建“唯一”标识符的标准。identifierForVendor()是你所指的,它返回一个UUID,但advertisingIdentifier也是一个UUID。 - Mars
显示剩余2条评论

9
您最好先仔细阅读这篇文章 - http://nshipster.com/uuid-udid-unique-identifier/

UUID (通用唯一识别码):由RFC 4122定义的一串128位比特序列,可以保证在空间和时间上的唯一性。

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


这应该是正确的答案。 - Mamouneyya

5
自从iOS 5开始,苹果已经弃用了UIDevice uniqueIdentifier,这意味着传统的获取每个iOS设备唯一标识的方式现在不再适用,即[[UIDevice currentDevice] uniqueIdentifier]在iOS 5及以上版本中将无法使用。
因此,为了替代UUID,我们可以使用Apple的CFUUID类来创建设备的唯一标识。但是,我们真的需要记住,这个内置类将创建随机数,所以它们将在每次调用时返回不同的ID。不要使用NSUserDefaults进行存储,最好的方法是使用Keychain。
因此,在这里我向您提供了使用它作为设备唯一键的最佳方法。
- (NSString *)createNewUUID {

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

UDID:

http://whatsmyudid.com/

enter image description here


2
作为一个小提示,您附加的图片标签上写着“获取UUID”,但实际上它是获取UDID。我并不期望有修复,只是想记录下来,以便其他读者知道。 - Spencer D
1
你需要明白UUID不是UDID。 - Yi Jiang
1
上面的图片是错误的,它显示的是UDID而不是UUID。UDID是每个设备的唯一字符串([[UIDevice currentDevice] uniqueIdentifier])。UUID是随机数,在每次创建时都会给你一个随机字符串(CFUUIDRef theUUID = CFUUIDCreate(NULL);)。 - huync
1
图片是正确的,作者所写的红色注释是错误的。 - early

5
苹果公司显然开始在iOS5中删除对UDID(唯一设备标识符)的访问。无论如何,现在您为身份验证所能做的最好的方法就是使用UUID(通用唯一标识符)。这必须按照每个应用程序的基础进行。也就是说,不再有办法识别设备,但您可以识别设备上的应用程序。只要用户不完全删除应用程序,则此标识符将在应用程序启动之间保持不变,并且至少让您识别在设备上使用特定应用程序的相同用户。不幸的是,如果用户彻底删除然后重新安装应用程序,则标识符将更改,但这是未来任何人能做到的最好的事情。

1

UDID是唯一设备标识符,应用于iTunes,用于管理您的苹果开发证书中的设备。可以通过以下代码在iOS5 SDK中获取:

[UIDevice currentDevice] uniqueIdentifier];

define is:

@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设备上,以上方法将返回不同设备相同的值。

有许多方法可以获取唯一标识符


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