2011-10-18 53 views
10

可能重复:
UIDevice uniqueIdentifier Deprecated - What To Do Now?UUID的应用程序上的iOS5

正如我希望你知道的,在uniqueIdentifier在在iOS5中已被弃用。我在寻找与iOS5基本相同的功能。

我从文档中了解到,苹果希望我们(开发人员)创建我们自己的UUID(使用CFUUIDCreate我猜),并将其存储在NSUserDefaults中。但是,这让我有些颤抖,完全没有感觉到保存。在这种情况下,感觉有点没有意义拥有UUID。

我需要一个UUID的原因是因为我在auth过程中向我的服务器发送了一堆信息,包括UUID,并希望能够跳过一些步骤,如果服务器可以“猜测”下次是谁的用户该应用程序启动或重新安装或其他应用程序实现我的库。 CFUUIDCreate似乎没有帮助我。

我也快速浏览了gekitz,但据我了解,它仅基于手机中以太网“卡”的MAC地址。这是不合适的,因为我有一种模糊的感觉,即MAC地址是可以改变的。在中的uniqueIdentifier

基于各种硬件细节的每个设备唯一的字母数字字符串。

当前我写了这个代码,它检索一个UUID。但只要我在XCode中清理并重新安装手机上的应用程序,我就会得到一个新的UUID。

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
NSString *UUID = @""; 

if (![defaults valueForKey:@"UUID"]) 
{ 
    CFUUIDRef UUIDRef = CFUUIDCreate(kCFAllocatorDefault); 
    CFStringRef UUIDSRef = CFUUIDCreateString(kCFAllocatorDefault, UUIDRef); 
    UUID = [NSString stringWithFormat:@"%@", UUIDSRef]; 

    [defaults setObject:UUID forKey:@"UUID"]; 
} 
else { 
    UUID = [defaults valueForKey:@"UUID"]; 
} 

[deviceInformation setObject:UUID forKey:@"UUID"]; 

概括起来讲,我的问题是:
是否有创建基于这是“硬”的篡改,并给了我作为接收器的小设备的UUID的一些可靠的方法需要依赖和信任的东西?这并不一定要根据设备,可能是基于应用程序作为应用程序UUID,只要其重新安装后相同。

+0

为什么来自'CFUUIDCreate'的UUID与'NSUserDefaults'一起存储,不能满足您的验证用例?每次安装将始终发送相同的值(直到它将被删除并重新安装)。开发时可能很烦人,但用户不会经常删除他的应用程序,是吗? – DarkDust

+0

另外,为什么MAC会发生变化?它可以在PC上进行更改,您可以使用某种工具对其进行调整,但只要您不这样做,MAC就不会改变。 – DarkDust

+1

@DarkDust这不是一个可能的重复。在我发布自己的帖子之前,我已经阅读过这篇文章。您已经在评论中回复了您的第二条评论。下次安装应用程序时,我需要相同的UUID,而不是该安装的新UUID。我确实删除了应用程序,我也是用户。但是,这个SO问题并不是关于用户的习惯,而不管它们是什么。我的要求是一个唯一的UUID,但每个安装都是一样的。 –

回答

7

到目前为止,MAC似乎是唯一已知的“稳定”识别设备的方式。

看看Erica Sadun's UIDevice(Hardware) category,你会注意到唯一有用的识别是MAC。

她还有一个UIDevice(IOKit_Extensions)类别,它提供了IMEI和序列号。但是,IOKit是私有API。 Erica wrote

正如iPhone传教士Matt Drance在Twitter上发表的推文:“IOKit在iPhone上没有公开,缺少头文件和文档很少是疏忽。

因此使用IOKit可能会使您遭到拒绝。据我所知,没有办法让用户在不越狱设备的情况下改变MAC(然后他可以做任何他想做的事)。所以我的建议是忽略jailbreakers并简单地使用基于MAC的UUID。

警告! MAC地址API在iOS 7中将不起作用。

+0

正如我在聊天中提到的,私人库很有点不,不。苹果不会允许它。我将不得不使用Mac地址。 Thnx为你提供帮助! –

相关问题