主要研究UIDevice 类。
获取UUID并存储
UDID被弃用,使用UUID来作为设备的唯一标识。获取到UUID后,如果用NSUserDefaults存储,当程序被卸载后重装时,再获得的UUID和之前就不同了。使用keychain存储可以保证程序卸载重装时,UUID不变。但当刷机或者升级系统后,UUID还是会改变的。但这仍是目前为止最佳的解决办法了,如果有更好的解决办法,欢迎留言。
#import尖括号(Foundation/Foundation.h)
@interface UUID : NSObject
+(NSString *)getUUID;
@end
#import "UUID.h"
#import 尖括号(Foundation/Foundation.h)
#import"KeychainItemWrapper.h"
@implementation UUID
+(NSString *)getUUID
{
KeychainItemWrapper *keychainItem = [[KeychainItemWrapperalloc]
initWithIdentifier:@"UUID"
accessGroup:@"YOUR_BUNDLE_SEED.com.yourcompany.userinfo"];
NSString *strUUID = [keychainItemobjectForKey:(id)CFBridgingRelease(kSecValueData)];
//首次执行该方法时,uuid为空
if ([strUUID isEqualToString:@""])
{
CFUUIDRef uuidRef = CFUUIDCreate(kCFAllocatorDefault);
strUUID = (NSString *)CFBridgingRelease(CFUUIDCreateString (kCFAllocatorDefault,uuidRef));
[keychainItem setObject:strUUIDforKey:(id)CFBridgingRelease(kSecValueData)];
}
return strUUID;
}
@end