2012-03-11 84 views
5

使用Xcode可以发现iOS设备标识符。我需要下载的每个应用都有唯一的标识符。我想在生成随机数字,但他们可能会不止一次生成相同的数字!任何人有想法?为iOS设备创建唯一标识符?

+2

各种解决方案,试试这个线程 http://stackoverflow.com/questions/6993325/uidevice-uniqueidentifier-deprecated-what-to-do-now – 2012-03-11 15:35:21

回答

4

我发现一个非常简单的方法来做到这一点,方法如下:

COMMAND + ñ并选择Cocoa Touch Class

给你的班级命名NSString+UUID,然后点击下一步。

然后,替换的代码NSString+UUID.h有:

@interface NSString (UUID) 

+ (NSString *)uuid; 

@end 

而且在NSString+UUID.m有:

@implementation NSString (UUID) 

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

@end 

现在,当你需要获得UUID(即:其存储在使用NSUserDefaults的你应用程序负载):

-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{ 

    NSString *userIdentifierKey = @"user-identifier" 
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 

    if ([defaults objectForKey:userIdentifierKey] == nil) { 

     NSString *theUUID = [NSString uuid]; 

     [defaults setObject:theUUID forKey:userIdentifierKey]; 
     [defaults synchronize]; 

    } 

    // additional application setup... 

    return YES; 
} 
4

在UIDevice类中,苹果已经提供了方法uniqueIdentifier,但现在已经废弃了(对于iOS5),在方法的documentation中,您会发现如何使用uniqueIdentifier。

0

试试这个

- (NSString *)getDeviceID 
{ 
    NSString *uuid = [self gettingString:@"uniqueAppId"]; 
    if(uuid==nil || [uuid isEqualToString:@""]) 
    { 
     CFUUIDRef theUUID = CFUUIDCreate(kCFAllocatorDefault); 
     if (theUUID) 
     { 
      uuid = NSMakeCollectable(CFUUIDCreateString(kCFAllocatorDefault, theUUID)); 
      [self savingString:@"uniqueAppId" data:uuid]; 
      [uuid autorelease]; 
      CFRelease(theUUID); 
     } 
    } 
    return uuid; 

// this is depreciated 
// UIDevice *device = [UIDevice currentDevice]; 
// return [device uniqueIdentifier]; 
} 
3

iOS6提供了一个新的替换[[[UIDev冰currentDevice] identifierForVendor] UUIDString]

该属性的值是该来自相同的设备上运行的 同一供应商的应用程序是相同的。对于来自不同供应商的同一设备上的应用以及供应商在不同设备上应用的 ,返回不同的值 。

参见:https://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIDevice_Class/Reference/UIDevice.html#//apple_ref/doc/uid/TP40006902-CH3-SW49

1

您可以创建UIApplication的,的UIDevice的类别或您prefere像这样(ARC例子)

@interface UIApplication (utilities) 
- (NSString*)getUUID; 
@end 

@implementation UIApplication (utilities) 

- (NSString*)getUUID { 

    NSUserDefaults *standardUserDefault = [NSUserDefaults standardUserDefaults]; 

    static NSString *uuid = nil; 

    // try to get the NSUserDefault identifier if exist 
    if (uuid == nil) { 

     uuid = [standardUserDefault objectForKey:@"UniversalUniqueIdentifier"]; 
    } 

    // if there is not NSUserDefault identifier generate one and store it 
    if (uuid == nil) { 

     uuid = UUID(); 
     [standardUserDefault setObject:uuid forKey:@"UniversalUniqueIdentifier"]; 
     [standardUserDefault synchronize]; 
    } 

    return uuid; 
} 

@end 

UUID()这个函数

NSString* UUID() { 

    CFUUIDRef uuidRef = CFUUIDCreate(NULL); 
    CFStringRef uuidStringRef = CFUUIDCreateString(NULL, uuidRef); 
    CFRelease(uuidRef); 
    return (__bridge NSString *)uuidStringRef; 
} 

这会生成一个存储在NSUserDefault中的唯一标识符,以便在应用程序需要时重用 - 此标识符r将独特的与应用程序相关的安装不会安装到设备上,但可以用于例如追踪订购了APN服务的设备号码等。

这之后您可以使用它以这样的方式

NSString *uuid = [[UIApplication sharedApplication] getUUID]; 
0

使用此:[[UIDevice currentDevice] identifierForVendor]

欲了解更多信息,看看已经上所提供的这个answer