每个Apple设备(iPad / iPhone / iPod)是否只有一个唯一标识符用于其使用范围?以下代码是否总是返回该标识符?
[[UIDevice currentDevice] uniqueIdentifier];
Apple是否允许在已部署的应用程序中使用此方法?
答案 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];