转自: http://blog.sina.com.cn/s/blog_5971cdd00102vqgy.html
简介:
UDID被弃用,使用UUID来作为设备的唯一标识。获取到UUID后,如果用NSUserDefaults存储,当程序被卸载后重装时,再获得的UUID和之前就不同了。使用keychain存储可以保证程序卸载重装时,UUID不变。但当刷机或者升级系统后,UUID还是会改变的。但这仍是目前为止最佳的解决办法了,如果有更好的解决办法,欢迎留言。
(我整理的解决办法的参考来源:http://blog.k-res.net/archives/1081.html)
给大家两个类:
UUID.h中的代码:
<pre name="code" class="objc">#import <Foundation/Foundation.h>
@interface UUID : NSObject
+(NSString *)getUUID;
@end
UUID.m中的代码:
#import "UUID.h"
#import <Foundation/Foundation.h>
#import "KeychainItemWrapper.h"
@implementation UUID
+(NSString *)getUUID
{
KeychainItemWrapper *keychainItem = [[KeychainItemWrapper alloc]
initWithIdentifier:@"UUID"
accessGroup:@"YOUR_BUNDLE_SEED.com.yourcompany.userinfo"];
NSString *strUUID = [keychainItem objectForKey:(id)CFBridgingRelease(kSecValueData)];
//首次执行该方法时,uuid为空
if ([strUUID isEqualToString:@""])
{
CFUUIDRef uuidRef = CFUUIDCreate(kCFAllocatorDefault);
strUUID = (NSString *)CFBridgingRelease(CFUUIDCreateString (kCFAllocatorDefault,uuidRef));
[keychainItem setObject:strUUID forKey:(id)CFBridgingRelease(kSecValueData)];
}
return strUUID;
}
@end
第二个类是苹果官方的一个Demo里封装的,Demo的下载地址: