【问题标题】:UUID for app on iOS5 [duplicate]iOS5上应用程序的UUID [重复]
【发布时间】:2011-12-09 20:24:48
【问题描述】:

可能重复:
UIDevice uniqueIdentifier Deprecated - What To Do Now?

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

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

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

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

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

目前我编写了这段代码,它检索一个 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 UUID,只要重新安装后相同即可。

【问题讨论】:

  • 为什么来自CFUUIDCreate 的UUID 与NSUserDefaults 一起存储不能满足您的身份验证用例?每个安装将始终发送相同的值(直到它被删除并重新安装)。开发时可能会很烦人,但用户不会经常删除他的应用程序,不是吗?
  • 另外,为什么 MAC 会改变?它可以在 PC 上更改,您可以使用一些工具对其进行调整,但只要您不这样做,MAC 就永远不会改变。
  • @DarkDust 这不可能是重复的。在发布自己的帖子之前,我也已阅读该帖子。您已经在评论本身中回答了您的第二条评论。下次安装应用程序时,我需要相同的 UUID,而不是用于该安装的新 UUID。我确实经常删除应用程序,而且我也是用户。但是,这个 SO 问题与用户习惯无关,无论他们是什么。我的要求是一个唯一但每次安装都相同的 UUID。
  • @DarkDust 它不会,如果你不希望它不会。但是,作为用户,您可以根据需要更改 MAC 地址。我很抱歉这么说,但你的论点不成立。我正在寻找答案,而不是质疑我要求的人。希望你能帮我解答。
  • 我注意到它后来不是重复的,但不能“收回”。另外,我质疑您的要求并不是为了好玩,而是为了理解为什么您已经知道的解决方案还不够。恐怕到目前为止,MAC似乎是您唯一可以依靠的东西。 MAC 不会在 iOS 设备上更改,除非您在越狱设备上且用户明确更改它(我知道在非越狱设备上无法更改它)。当然,不值得关心那些做这种奇怪事情的少数人。

标签: ios5 uuid uidevice


【解决方案1】:

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

看看Erica Sadun's UIDevice(Hardware) category,你会发现唯一有用的就是MAC。

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

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

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

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

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

【讨论】:

  • 正如我在聊天中提到的,私有库有点禁忌。苹果不允许。我将不得不使用 Mac 地址。谢谢你的帮助!
猜你喜欢
  • 2013-05-19
  • 1970-01-01
  • 2011-09-10
  • 2012-03-31
  • 2012-01-18
  • 1970-01-01
  • 2012-01-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多