我如何检索iOS上的UDID?

我想知道是否有可能找出用户的iPhone的UDID。 有人能发光吗?

注意: 从2013年5月1日起,Apple将不再接受访问设备UDID的应用程序 。

相反,您必须在iOS 6+中使用新的方法identifierForVendoradvertisingIdentifier来访问它。 有关更多详细信息,请参阅相关文章


旧的方式(不推荐,将导致App Store拒绝)

 NSString *udid = [[UIDevice currentDevice] uniqueIdentifier]; 

从iOS7起,uniqueIdentifier属性不再可用。

请参阅UIDevice参考。

就像有人说,在iOS5中,这已被弃用:

 NSString *udid = [[UIDevice currentDevice] uniqueIdentifier]; 

苹果现在有3个API来获取设备的UUID (通用唯一标识符):

备选scheme1(NSUUID类):

 NSString *udid = [[NSUUID UUID] UUIDString]; 

scheme2(UIDevice类):

 NSString *udid = [[[UIDevice currentDevice] identifierForVendor] UUIDString]; 

备选scheme3(ASIdentifierManager类,安装AdSupport框架):

 NSUUID *UUID = [[ASIdentifierManager sharedManager] advertisingIdentifier]; NSString *udid = [UUID UUIDString]; 

但是,它们都是字母数字的,而设备唯一标识符只是数字。 所以这3个API是没用的,旧的[[UIDevice currentDevice] uniqueIdentifier]仍然在iOS6中工作,但多久?

如果“已弃用”警告错误,只需添加:

 #pragma GCC diagnostic ignored "-Wdeprecated-declarations" 

希望能帮助到你!

在IOS5及以上版本中,使用这个来查找UDID

 NSString *uuidString = nil; CFUUIDRef uuid = CFUUIDCreate(NULL); if (uuid) { uuidString = (__bridge NSString *)CFUUIDCreateString(NULL, uuid); CFRelease(uuid); } NSLog(@"UDID: [%@]", uuidString); 

值得一提的是,identifierForVendor对于一个设备来说并不是唯一的,它最终会改变。

苹果说这个关于identifierForVendor :

对于来自同一设备上运行的同一供应商的应用程序,此属性的值是相同的。 对于来自不同供应商的同一设备上的应用程序以及不同设备上的应用程序,不pipe供应商是什么,都会返回不同的值。

如果该值为零,稍后再等待并获取该值。 例如,在设备重新启动之后但在用户解锁设备之前,会发生这种情况。

此应用程序(或来自同一供应商的另一个应用程序)安装在iOS设备上时,此属性中的值保持不变。 当用户从设备上删除所有供应商的应用程序并随后重新安装其中一个或多个应用程序时,该值会更改。 在使用Xcode安装testing版本时或者在使用ad-hoc分发的设备上安装应用程序时,该值也可能会发生变化。 因此,如果您的应用程序在任何位置存储此属性的值,则应优雅地处理标识符更改的情况。

但更糟糕的是,苹果公司似乎也在消除使用MAC地址作为唯一标识符的最后手段,根据这个AVG博客 。

那么现在要做什么,如果我们想要唯一标识设备 – 例如。 用于许可,设置或其他目的?

在IOS5及以上版本中,使用这个来查找UDID

NSString * uuidString = nil;

CFUUIDRef uuid = CFUUIDCreate(NULL); …

我想你正在展示如何生成一个唯一的识别号码,而不是得到一个设备的唯一ID。

我不能评论,但我想警告别人。 在DZenBot的回答中,所有的方法都没有给出相同的结果:


备选scheme1 (NSUUID类):

 NSString *udid = [[NSUUID UUID] UUIDString]; 

备选scheme2 (UIDevice类)(适用于iOS 6.0及更高版本):

 NSString *udid = [[[UIDevice currentDevice] identifierForVendor] UUIDString]; 

scheme1生成随机UUID,scheme2给出不会改变的固定UID

最好的办法就是这样做

 NSString *udid = [[[UIDevice currentDevice]identifierForVendor]UUIDString]; 

如何使用[OpenUDID] lib https://github.com/ylechelle/OpenUDID

这很简单。 转到Xcode窗口并select设备,或者您可以在pipe理器中find它。 在这里输入图像说明

http://www.raywenderlich.com/2915/ios-code-signing-under-the-hood/organizerudid

请记住,UDID在IOS 5中已弃用。在iOS 7中,Apple在查询MAC时总是返回一个固定值,以便专门阻止MAC作为IDscheme的基础。 所以你现在真的应该使用- [UIDevice identifierForVendor]或创build一个安装的UUID。 希望这会有助于某人。