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

5

是否可以通过使用Xcode来发现iOS设备标识符。我需要每个下载的应用程序都有一个唯一的标识符。我考虑过生成随机数字,但可能会多次生成相同的数字!有人有想法吗?


2
已经在stackoverflow上提供了各种解决方案,可以尝试查看这个帖子: https://dev59.com/WWw05IYBdhLWcg3w11W0 - Nik Burns
7个回答

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

4

在UIDevice类中,苹果提供了uniqueIdentifier方法,但现在它已经过时(对于iOS5),在方法的文档中,您可以找到如何使用uniqueIdentifier的说明。


3

3

你知道MAC地址在Wi-Fi和蜂窝网络连接之间是否保持不变,还是当用户从一种网络切换到另一种网络时会发生变化吗? - Crashalot

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

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

0
使用以下代码:[[UIDevice currentDevice] identifierForVendor] 欲了解更多信息,请查看answer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接