5

有没有办法在 iOS SDK 中获取 iOS 设备标识符?我想访问由 Xcode 在Organizer - Devices部分提供的标识符,例如:21xb1fxef5x2052xec31x3xd3x48ex5e437xe593

4

6 回答 6

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;
}

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

您还可以使用一些 3rd 方解决方案,例如openUDIDsecureUDID。不推荐使用开放和安全的 UDID - 将标识符用于供应商/广告。


更新

另一种可能性是使用 MAC 地址作为唯一哈希的基础,例如,您可以使用来自ODIN1的代码-源代码在这里

自 iOS7 起,MAC 地址不再可用。(可以阅读它,但它总是相同的虚拟地址 02:00:00:00:00:00)。

于 2012-12-20T12:46:16.397 回答
7

苹果文档

基于各种硬件细节的每个设备唯一的字母数字字符串。(只读)(iOS 5.0 已弃用。酌情使用此类的 identifierForVendor 属性或 ASIdentifierManager 类的 adsIdentifier 属性,或使用 NSUUID 类的 UUID 方法创建 UUID 并将其写入用户默认数据库。)

于 2012-12-20T12:51:40.277 回答
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"];
  }
}
于 2013-11-29T09:24:31.343 回答
0

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

[[UIDevice currentDevice] uniqueIdentifier]
于 2012-12-20T12:59:20.820 回答
0
+ (NSString *)uuid
{
    NSString *uuidString = nil;
    CFUUIDRef uuid = CFUUIDCreate(NULL);
    if (uuid) {
        uuidString = (NSString *)CFUUIDCreateString(NULL, uuid);
        CFRelease(uuid);
    }
    return [uuidString autorelease];
}

它可以 100% 工作,即使在模拟器上也是如此......

于 2013-04-04T13:23:44.960 回答
-1

就在这里。

[[UIDevice currentDevice] uniqueIdentifier]

编辑:但是这在 iOS 5 中已被弃用。此标识符不应再在 iOS 5 中使用。阅读此 SO帖子了解更多详细信息。

于 2012-12-20T12:45:06.323 回答