10

可能重复:
不推荐使用 UIDevice uniqueIdentifier - 现在该怎么办?

我希望您知道,在 iOS5uniqueIdentifier中已弃用 in。UIDevice我正在寻找与 iOS5 基本相同的功能。

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

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

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

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

目前我写了这段代码,它检索一个 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,该设备“难以”篡改并为我作为接收者提供一些可以依赖和信任的东西?这个不一定要基于设备,可以基于app作为App UUID,只要重新安装后一样。

4

1 回答 1

7

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

看看Erica Sadun 的UIDevice(Hardware)类别,您会注意到唯一有用的识别是 MAC。

她还有一个UIDevice(IOKit_Extensions)提供 IMEI 和序列号的类别。但是,IOKit 是私有 API。埃里卡写道

正如 iPhone 传播者 Matt Drance 所发推文所说,“IOKit 在 iPhone 上并不公开。缺少标题和文档很少是疏忽。”

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

据我所知,用户无法在不越狱设备的情况下更改 MAC(然后他可以做任何他想做的事情)。所以我的建议是忽略越狱者,简单地使用基于 MAC 的 UUID。

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

于 2011-10-18T08:44:18.243 回答