如何在iOS上检索UDID?

Oh *_*Boy 38 cocoa-touch udid ios

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

Jac*_*kin 67

注意:Apple将不再接受从2013年5月1日开始访问设备的UDID的应用.

相反,您必须使用新方法identifierForVendoradvertisingIdentifier在iOS 6+中访问它.有关详细信息,请参阅此处的相关帖


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

NSString *udid = [[UIDevice currentDevice] uniqueIdentifier];
Run Code Online (Sandbox Code Playgroud)

从iOS7开始,该uniqueIdentifier物业已不再可用.

参见UIDevice参考文献.

  • 请注意,这已在[iOS 5]中弃用(http://developer.apple.com/library/IOs/#documentation/UIKit/Reference/UIDevice_Class/DeprecationAppendix/AppendixADeprecatedAPI.html) (18认同)

DZe*_*Bot 11

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

NSString *udid = [[UIDevice currentDevice] uniqueIdentifier];
Run Code Online (Sandbox Code Playgroud)

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

备选方案1(NSUUID类):

NSString *udid = [[NSUUID UUID] UUIDString];
Run Code Online (Sandbox Code Playgroud)

备选方案2(UIDevice类):

NSString *udid = [[[UIDevice currentDevice] identifierForVendor] UUIDString];
Run Code Online (Sandbox Code Playgroud)

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

NSUUID *UUID = [[ASIdentifierManager sharedManager] advertisingIdentifier];
NSString *udid = [UUID UUIDString];
Run Code Online (Sandbox Code Playgroud)

但它们都是字母数字,而典型设备唯一标识符只是数字.因此,3个API是无用的,旧的[[UIDevice currentDevice] uniqueIdentifier]仍可在iOS6中运行,但需要多长时间?

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

#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你!

  • 不,UDID是字母数字. (3认同)

rav*_*986 6

在IOS5及更高版本中,使用此命令查找UDID

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

  • 请注意,这是一个生成的id,因此后续调用`CFUUIDCreate`将创建不同的ID.典型的模式是:尝试从`NSUSerDefaults`加载ID,如果`nil`然后使用上面的代码生成它并将其存储在`NSUserDefaults`中. (8认同)
  • 值得重复的是:这不是设备的UDID - 它是生成的UUID,每次调用都会生成一个新的UUID.如果你想要一个唯一的标识符,这种方法是可以的.如果你想要**设备的UDID**这是没用的. (8认同)