问题描述
|
每个Apple设备(iPad / iPhone / iPod)在其使用范围内是否只有一个唯一的标识符?以下代码将始终返回该标识符吗?
[[UIDevice currentDevice] uniqueIdentifier];
苹果公司是否允许在已部署的应用程序中使用此方法?
解决方法
UDID(uniqueidentifier)是终生的,但是,不确定苹果是否高兴您调用该方法来检索它。
, 苹果公司宣布,自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];