检索iOS设备标识符

时间:2012-12-20 12:40:29

标签: iphone ios uniqueidentifier

有没有办法在iOS SDK中获取iOS设备标识符? 我想访问Xcode在管理器 - 设备部分中显示的标识符,例如:21xb1fxef5x2052xec31x3xd3x48ex5e437xe593

6 个答案:

答案 0 :(得分:12)

看起来您仍然可以在iOS 6下访问UDID,但它已被弃用,因为iOS 5.0并且您不应该使用它(无论如何您都会收到警告)

[UIDevice currentDevice].uniqueIdentifier

如果您需要唯一标识符,则应使用:

[UIDevice currentDevice].identifierForVendor

或者如果它与某种广告有关,那么:

// from  AdSupport.framework
[ASIdentifierManager sharedManager].advertisingIdentifier

然而,这两个新属性仅在iOS> = 6.0下可用,而且advertisingIdentifier也不是唯一的(我从中得到了很多重复)。

如果你不支持iOS<我认为你可以做类似的事情。 6:

UIDevice *device = [UIDevice currentDevice];
NSString *ident = nil;
if ([device respondsToSelector:SEL(identifierForVendor)]) {
    ident = [device.identifierForVendor UUIDString];
} else {
    ident = device.uniqueIdentifier;
}

但我不确定苹果在审核期间会如何回应。

您还可以使用某些第三方解决方案,例如openUDIDsecureUDID 。不推荐使用开放且安全的UDID - 使用供应商/广告标识符。


更新

另一种可能性是使用MAC地址作为唯一哈希的基础,例如,您可以使用ODIN1中的代码 - source is here

从iOS7开始,MAC地址不再可用。 (一个人可以读它,但它总是一样的虚拟地址02:00:00:00:00:00)。

答案 1 :(得分:7)

来自Apple Documentation

  

基于各种硬件的每个设备唯一的字母数字字符串   细节。 (只读)(在iOS 5.0中不推荐使用。使用   此类的identifierForVendor属性或   ASIdentifierManager类的advertisingIdentifier属性   相反,或者使用NSUUID类的UUID方法   创建一个UUID并将其写入用户默认数据库。)

答案 2 :(得分:2)

NSString* identifier = nil;
if( [UIDevice instancesRespondToSelector:@selector(identifierForVendor)] ) {
  // iOS 6+
  identifier = [[[UIDevice currentDevice] identifierForVendor] UUIDString];
} else {
  // before iOS 6, so just generate an identifier and store it
  identifier = [[NSUserDefaults standardUserDefaults] objectForKey:@"identiferForVendor"];
  if( !identifier ) {
    CFUUIDRef uuid = CFUUIDCreate(NULL);
    identifier = (__bridge_transfer NSString*)CFUUIDCreateString(NULL, uuid);
    CFRelease(uuid);
    [[NSUserDefaults standardUserDefaults] setObject:identifier forKey:@"identifierForVendor"];
  }
}

答案 3 :(得分:0)

您可以找到唯一的设备标识符

[[UIDevice currentDevice] uniqueIdentifier]

答案 4 :(得分:0)

+ (NSString *)uuid
{
    NSString *uuidString = nil;
    CFUUIDRef uuid = CFUUIDCreate(NULL);
    if (uuid) {
        uuidString = (NSString *)CFUUIDCreateString(NULL, uuid);
        CFRelease(uuid);
    }
    return [uuidString autorelease];
}

即使在模拟器上也能100%工作......

答案 5 :(得分:-1)

是的。

[[UIDevice currentDevice] uniqueIdentifier]

编辑: 但是,这在iOS 5中已弃用。此标识符不应再在iOS 5中使用。有关详细信息,请阅读this SO帖子。