见苹果文档,从iOS 5.0开始,UIDevice中uniqueIdentifier属性不再有效:
Deprecated in iOS 5.0
uniqueIdentifier
Do not use the uniqueIdentifier property. To create a unique identifierspecific to your app, you can call the CFUUIDCreate function to create a UUID,and write it to the defaults database using the NSUserDefaults class.
对于许多和设备UDID有关联的应用(尤其是企业应用),这真是一场灾难。然而面对苹果如此强势的做法,我们别无选择。只能如苹果所说的,用CFUUIDCreate函数替代uniqueIdentifier,然后把它保存到程序的defaults数据库中。
我不知道有多少人开始着手更新老的uniqueIdentifier代码,但我在github发现了一个第3方开源库:UIDevice-with-UniqueIdentifier-for-iOS-5,它为我们解决了许多麻烦:
https://github.com/gekitz/UIDevice-with-UniqueIdentifier-for-iOS-5
它实际上包括了2个Category:
NSString+MD5Addition 和 UIDevice+IdentifierAddition
直接将4个.m文件和.h文件拷贝到项目中,然后直接import即可。
根据readme文件所述,有两种Identifier,分别用[[UIDevice currentDevice]uniqueDeviceIdentifier] 和 [[UIDevice currentDevice]uniqueGlobalDeviceIdentifier]来生成。
前者在同一app中唯一,后者在不同的app中仍然唯一。
对于前者,它使用“mac地址+bundleIdentifier”方案生成MD5值作为Identifier:
- (NSString *) uniqueDeviceIdentifier{
NSString *macaddress = [[UIDevice currentDevice] macaddress];
NSString *bundleIdentifier = [[NSBundle mainBundle]bundleIdentifier];
NSString *stringToHash = [NSStringstringWithFormat:@"%@%@",macaddress,bundleIdentifier];
NSString *uniqueIdentifier = [stringToHash stringFromMD5];
return uniqueIdentifier;
}
后者则使用“mac地址”生成的MD5值作为Identifier(因为Mac地址本身就是一个GUID):
- (NSString *) uniqueGlobalDeviceIdentifier{ NSString *macaddress = [[UIDevice currentDevice] macaddress]; NSString *uniqueIdentifier = [macaddress stringFromMD5]; return uniqueIdentifier; }
如果你想和iOS 4.0保持兼容,那么可以这样写:
// IOS 5.0:uniqueIdentifier is deprecated
#if __IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_5_0
return[[UIDevicecurrentDevice]uniqueDeviceIdentifier];
#endif
return[[UIDevicecurrentDevice]uniqueIdentifier];
转载:http://blog.csdn.net/kmyhy/article/details/7819878
-----------------------------------------------------------------
UDID替代品
苹果开始拒绝在App开发中使用UDID,幸好,我们有UDID的替代品。
1.使用MAC地址替代UDID
George Kitz实现的开源代码,可以根据不同设备的MAC地址,声称设备的唯一标识,github下载(115下载),使用起来相当简单。
2.针对不同用户创建UUID
有报道称,使用MAC地址可能会产生一些潜在的隐私问题,如果你并不需要用户设备的唯一标识,而只需要区分不同用户,你可以使用CFUUIDCreate()自己创建UUID。
现在,扩展一下NSString类:
@interface NSString (UUID)
+ (NSString *)uuid;
@end
@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
#define UUID_USER_DEFAULTS_KEY @"UUID"
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if ([defaults objectForKey:UUID_USER_DEFAULTS_KEY] == nil) {
[defaults setObject:[NSString uuid] forKey:UUID_USER_DEFAULTS_KEY];
[defaults synchronize];
}
...
原文地址:http://oleb.net/blog/2011/09/how-to-replace-the-udid/