为iOS设备创建唯一标识符

Create an unique identifier for iOS devices?

本文关键字:唯一 标识符 创建 iOS      更新时间:2023-10-16

使用Xcode可以发现iOS设备标识符。我需要每个下载的应用程序都有一个唯一的标识符。我曾想过生成随机数,但它们可能不止一次生成相同的数字!有人有主意吗?

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

我找到了一种非常简单的方法来实现这一点,方法如下:

命令+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;
}

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

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

您可以创建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];

尝试这个

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

使用此:[[UIDevice currentDevice] identifierForVendor]

有关更多信息,请查看此答案