刚刚看到UIDevice uniqueIdentifier属性在iOS 5中已弃用,在iOS 7及更高版本中不可用.似乎没有替代方法或财产可用或即将出现.
我们的许多现有应用程序都严格依赖此属性来唯一标识特定设备.我们如何处理这个问题呢?
2011 - 2012年文件中的建议是:
特别注意事项
不要使用uniqueIdentifier属性.要创建特定于应用程序的唯一标识符,可以调用该
CFUUIDCreate函数创建一个UUID,并使用NSUserDefaults该类将其写入默认数据库.
但是,如果用户卸载并重新安装应用程序,则此值将不同.
我正在写一个iphone应用程序,它使用REST与我的服务器通信.主要问题是,我需要以某种方式识别用户.不久前,我们被允许使用UDID,但现在不再允许了.那我应该用什么呢?我需要在iphone上使用某种标识符,因此用户将删除应用程序,再次安装它,并且他将获得相同的ID.
我已经使用以下方法大约一个月了,没有问题。即使卸载应用程序,设备ID仍保持不变。最近,我注意到我的设备ID发生了变化。我最近在Xcode6上进行了很多该应用程序的构建。这可能是原因吗?我希望我确切知道它何时改变。这让我感到惊讶。当应用程序在应用程序商店上架时,我有什么需要担心的吗?也许这只是一个Xcode构建问题?我只是在寻找一种确保唯一设备ID的简单方法。我会使用advertiseIdentifer,但我听说将其用于其他目的,否则广告将被应用商店拒绝。这是代码:
+ (NSString *)getUserID
{
NSString *Appname = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleName"];
NSString *retrieveuuid = [SSKeychain passwordForService:Appname account:@"user"];
if(retrieveuuid == NULL)
{
CFUUIDRef newUniqueId = CFUUIDCreate(kCFAllocatorDefault);
retrieveuuid = (__bridge_transfer NSString*)CFUUIDCreateString(kCFAllocatorDefault, newUniqueId);
CFRelease(newUniqueId);
[SSKeychain setPassword:retrieveuuid forService:Appname account:@"user"];
}
NSLog(@"%@", retrieveuuid);
return retrieveuuid;
}
Run Code Online (Sandbox Code Playgroud)