如何在iOS上检索UDID?

时间:2010-11-24 18:21:37

标签: ios cocoa-touch udid

我想知道是否有可能找到用户iPhone的UDID。有人可以解释一下吗?

10 个答案:

答案 0 :(得分:67)

注意:Apple will no longer accept apps that access the UDID of a device starting May 1, 2013

相反,您必须使用iOS 6+中的新方法identifierForVendoradvertisingIdentifier来访问此方法。有关详细信息,请参阅related post here


旧方式(已弃用并将导致App Store拒绝)

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

从iOS7开始,uniqueIdentifier属性不再可用。

请参阅UIDevice参考。

答案 1 :(得分:11)

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

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

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

备选方案1(NSUUID类):

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

备选方案2(UIDevice类):

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

备选方案3(ASIdentifierManager类,需要AdSupport框架):

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

但它们都是字母数字,而典型设备唯一标识符只是数字。所以3个API是无用的,旧的[[UIDevice currentDevice] uniqueIdentifier]仍然适用于iOS6,但需要多长时间?

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

#pragma GCC diagnostic ignored "-Wdeprecated-declarations"

希望它有所帮助!

答案 2 :(得分:6)

在IOS5及更高版本中,使用此功能查找UDID

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

答案 3 :(得分:3)

值得一提的是,identifierForVendor对于设备来说并不是唯一的,它可以并且最终会发生变化。

Apple说这是identifierForVendor

  

此属性的值对于来自的应用程序是相同的   在同一设备上运行的同一供应商。返回不同的值   对于来自不同供应商的同一设备上的应用程序,以及   不论供应商如何,都可以在不同的设备上使用。

     

如果值为nil,请稍后再次获取该值。有时候是这样的,   例如,在设备重新启动之后但在用户之前   已解锁设备。

     

此应用程序(或其他应用程序)中此属性的值保持不变   iOS设备上安装了来自同一供应商的应用程序。 价值   当用户从中删除所有该供应商的应用程序时更改   设备,然后重新安装其中一个或多个。价值可以   在使用Xcode安装测试版本或安装应用程序时也会更改   在使用ad-hoc分发的设备上。因此,如果您的应用程序存储   这个属性的值在任何地方,你应该优雅地处理   标识符更改的情况。

但更糟糕的是,根据this AVG Blog,似乎苹果似乎也在取消使用MAC地址作为唯一标识符的最后手段。

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

答案 4 :(得分:2)

  

在IOS5及更高版本中,使用此功能查找UDID

     

NSString * uuidString = nil;

     

CFUUIDRef uuid = CFUUIDCreate(NULL);   ...

我认为您正在展示如何生成唯一标识号,而不是获取设备的唯一ID。

答案 5 :(得分:2)

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


备选方案1 (NSUUID类):

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

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

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

备选方案1 生成随机UUID ,而备选方案2 提供已修复的UID ,但不会更改。

答案 6 :(得分:2)

最好的办法就是这样做

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

答案 7 :(得分:1)

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

答案 8 :(得分:1)

这非常简单。转到Xcode窗口并选择设备,或者您可以在管理器中找到它。enter image description here

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

答案 9 :(得分:0)

记住在IOS 5中不推荐使用UDID。在iOS 7中,Apple现在总是在查询MAC时返回固定值,以明确阻止 MAC作为ID 方案的基础。因此,您现在应该使用-[UIDevice identifierForVendor]或创建每个安装的UUID。希望它对某人有所帮助。