iOS5应用程序的UUID

11

可能是重复问题:
UIDevice uniqueIdentifier过时了,现在该怎么办?

正如您所知道的,UIDevice中的uniqueIdentifier在iOS5中已经被弃用。我正在寻找一个在iOS5上基本具有相同功能的替代方法。

从文档中我所理解的是苹果希望我们(开发者)使用CFUUIDCreate来创建自己的UUID,并将其存储在NSUserDefaults中。然而,这让我感到有些不安全,并且完全没有意义。在这种情况下拥有一个UUID感觉毫无意义。

我需要UUID的原因是,在认证过程中,我会将包括UUID在内的一些信息发送到我的服务器,并希望能够跳过一些步骤,如果服务器“猜测”出下次启动或重新安装应用程序时用户是谁,或者其他应用程序实现了我的库。然而,CFUUIDCreate似乎无法帮助我解决这个问题。

我也简要地查看了gekitz,但据我所理解,它仅基于手机中以太网“卡”的MAC地址。这并不合适,因为我有一种模糊的感觉,即MAC地址是可以更改的。UIDevice中的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基于设备,难以被篡改,并且让我作为接收者有一些依赖和信任?这个UUID不必基于设备,可以基于应用程序作为应用程序UUID,只要在重新安装后保持相同即可。

为什么使用CFUUIDCreate生成的UUID,存储在NSUserDefaults中,不能满足您的身份验证需求?每次安装后都会发送相同的值(直到被删除并重新安装)。这在开发过程中可能很烦人,但用户并不经常删除他的应用程序,对吧? - DarkDust
此外,为什么MAC地址会改变?在PC上,您可以使用某些工具进行调整,但只要您不这样做,MAC地址就永远不会改变。 - DarkDust
1
@DarkDust 这不是一个可能的重复问题。在发布我的问题前,我已经阅读过那篇文章了。您已经在评论中回答了您的第二个评论。下次安装该应用程序时,我需要相同的UUID,而不是为该安装生成新的UUID。我确实经常删除应用程序,并且也是用户。但是,无论用户的习惯如何,这个SO问题都不是关于它们的。我的要求是一个唯一但每次安装都相同的UUID。 - Paul Peelen
@DarkDust,如果你不想改变MAC地址的话,它是不会改变的。但是,作为用户,如果你想改变MAC地址,是可以做到的。很抱歉,但你的论点并不成立。我在寻找答案,而不是有人质疑我的需求。希望你能帮我回答这个问题。 - Paul Peelen
是的,我理解并感激您的建议,但我已经考虑过需求了。我的这个项目中存在的一个大问题是它涉及到支付,而当涉及到金钱(即使是虚拟货币)时,总是那些“不重要”的细节变得重要起来。我看到Flurry有关于检测设备是否越狱的统计数据,那么如何实现呢? - Paul Peelen
显示剩余2条评论
1个回答

7
到目前为止,MAC地址似乎是唯一已知的“稳定”设备识别方式。查看Erica Sadun的UIDevice(Hardware)类别,您会注意到唯一有用的识别信息是MAC地址。她还有一个UIDevice(IOKit_Extensions)类别,提供IMEI和序列号。但是,IOKit是私有API。Erica写道:“正如iPhone布道者Matt Drance所推特的那样,“IOKit在iPhone上不是公共的。缺少头文件和文档很少是疏忽。”因此,使用IOKit可能会被拒绝。据我所知,没有办法让用户在不越狱设备的情况下更改MAC(而且他可以随意做任何事情)。因此,我的建议是忽略越狱者,只需使用基于MAC的UUID即可。 警告!MAC地址API将无法在iOS 7中使用。

正如我在聊天中提到的那样,私有库有点不太行。苹果不会允许这样做。我必须使用Mac地址。感谢你的帮助! - Paul Peelen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接