适用于iOS5的应用程序的UUID

UUID for app on iOS5

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
UIDevice uniqueIdentifier Deprecated - What To Do Now?

如我所料,您知道,UIDevice中的uniqueIdentifier在ios5中已被否决。我在为IO5寻找一个基本相同的功能。

我从文档中了解到,苹果希望我们(开发人员)创建自己的UUID(我猜是使用CFUUIDCreate),并将其存储在NSUserDefaults中。然而,这让我有点发抖,一点也不觉得省钱。在这种情况下,有一个UUID感觉有点毫无意义。

我需要一个UUID的原因是因为我在认证过程中将包括UUID在内的大量信息发送到我的服务器,如果服务器可以"猜测"下一次启动或重新安装应用程序或其他应用程序实现我的库时用户是谁,我希望能够跳过一些步骤。江户记1〔2〕似乎对我没有帮助。

我也快速地看了一下Gekitz,但据我所知,它仅仅基于电话中以太网"卡"的MAC地址。这不合适,因为我有一种模糊的感觉,认为MAC地址是可变的。UIDevice中的uniqueIdentifier

An alphanumeric string unique to each device based on various hardware details.

现在我编写了这个代码,它检索一个UUID。但是一旦我在xcode中清理并在手机上重新安装应用程序,我就会得到一个新的uuid。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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,只要在重新安装后相同。


到目前为止,Mac似乎是唯一已知的识别设备的"稳定"方法。

看看EricaSadun的UIDevice(Hardware)类,你会发现唯一有用的识别工具是mac。

她还有一个UIDevice(IOKit_Extensions)类,提供IMEI和序列号。但是,iokit是私有API。埃莉卡写道:

As iPhone evangelist Matt Drance tweeted,"IOKit is not public on iPhone. Lack of headers and docs is rarely an oversight."

所以使用IOKit可能会被拒绝。

据我所知,如果用户不破解设备,就无法更改Mac(然后他可以做任何他想做的事情)。所以我的建议是忽略越狱者,只使用基于Mac的UUID。

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