3 回答
TA贡献1794条经验 获得超7个赞
首先,UDID 仅在iOS 5中被弃用。这并不意味着它已经消失了。
其次,你应该问自己是否真的需要这样的东西。如果用户获得新设备并在其上安装您的应用程序该怎么办?相同的用户,但UDID已更改。同时,原始用户可能已经售出了他的旧设备,所以现在一个全新的用户安装你的应用程序,你认为它是基于UDID的不同的人。
如果您不需要UDID,请使用CFUUIDCreate()
创建唯一ID并在首次启动时CFUUIDCreateString()
将其保护为用户默认值(用于首先将UUID转换为字符串)。它将在备份和恢复后继续存在,甚至在原始用户切换到新设备时也会出现。它在很多方面都是UDID的更好选择。
如果你真的需要一个唯一的设备标识符(听起来不像你那样),请按照Suhail的回答中的指示寻找MAC地址。
TA贡献1862条经验 获得超7个赞
我正在更新我的应用程序,该应用程序仅基于支持iOS 4.3及更高版本的 Unique Identifier工作。所以,
1)我无法使用,[UIDevice currentDevice].uniqueIdentifier;
因为它已不再可用
2)我无法使用,[UIDevice currentDevice].identifierForVendor.UUIDString
因为它仅在iOS 6.0及更高版本中可用,并且无法用于较低的iOS版本。
3)mac地址不是一个选项,因为它在iOS-7中是不允许的
4)OpenUDID不久前已被弃用,并且还存在iOS-6问题。
5)iOS-5及以下版本也没有广告标识符
最后这就是我所做的
a)将SFHFKeychainUtils添加到项目中
b)生成的CFUUID密钥字符串
CFUUIDRef cfuuid = CFUUIDCreate(kCFAllocatorDefault); udidString = (NSString*)CFBridgingRelease(CFUUIDCreateString(kCFAllocatorDefault, cfuuid));
c)将其保存到Key Chain Utils ,否则它将生成一个新的Unique Every Time
最终守则
+ (NSString *)GetDeviceID { NSString *udidString; udidString = [self objectForKey:@"deviceID"]; if(!udidString) { CFUUIDRef cfuuid = CFUUIDCreate(kCFAllocatorDefault); udidString = (NSString*)CFBridgingRelease(CFUUIDCreateString(kCFAllocatorDefault, cfuuid)); CFRelease(cfuuid); [self setObject:udidString forKey:@"deviceID"]; } return udidString;}+(void) setObject:(NSString*) object forKey:(NSString*) key{ NSString *objectString = object; NSError *error = nil; [SFHFKeychainUtils storeUsername:key andPassword:objectString forServiceName:@"LIB" updateExisting:YES error:&error]; if(error) NSLog(@"%@", [error localizedDescription]);}+(NSString*) objectForKey:(NSString*) key{ NSError *error = nil; NSString *object = [SFHFKeychainUtils getPasswordForUsername:key andServiceName:@"LIB" error:&error]; if(error) NSLog(@"%@", [error localizedDescription]); return object;}
- 3 回答
- 0 关注
- 626 浏览
添加回答
举报