唯一设备标识符

时间:2011-06-23 11:45:39

标签: iphone objective-c ipad

每个Apple设备(iPad / iPhone / iPod)是否只有一个唯一标识符用于其使用范围?以下代码是否总是返回该标识符?

[[UIDevice currentDevice] uniqueIdentifier];

Apple是否允许在已部署的应用程序中使用此方法?

2 个答案:

答案 0 :(得分:3)

UDID(uniqueidentifier)是终身的,但是,不确定苹果是否很高兴您调用该方法来检索它。

答案 1 :(得分:1)

Apple宣布将于2013年5月开始拒绝使用UDID跟踪用户行为的应用程序

这是UDID的替代方案:

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