为iOS设备创建唯一标识符?

时间:2012-03-11 15:24:44

标签: iphone c++ ios random

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

7 个答案:

答案 0 :(得分:4)

在UIDevice类中,apple提供了方法uniqueIdentifier,但现在已弃用(对于iOS5),在方法的documentation中,您将找到如何使用uniqueIdentifier。

答案 1 :(得分:4)

我找到了一个非常简单的方法,这里是如何:

COMMAND + N 并选择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;
}

答案 2 :(得分:3)

试试这个UIDevice-with-UniqueIdentifier-for-iOS-5,它会将设备的 mac地址用作唯一标识符。

答案 3 :(得分:3)

iOS6提供了新的替换[[[[UIDevice currentDevice] identifierForVendor] UUIDString]

  

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

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

答案 4 :(得分:1)

您可以创建一个UIApplication,UIDevice类别或者您喜欢这样的类别(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中的唯一标识符,以便在应用程序需要时重复使用 - 此标识符将独立于应用程序安装而不是设备,但可用于跟踪订阅的设备数量APN服务等...

之后你可以这样使用它:

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

答案 5 :(得分: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];
}

答案 6 :(得分:0)

使用此:[[UIDevice currentDevice] identifierForVendor]

有关详细信息,请查看此answer