3

我正在开发一个具有后备功能的 iOS Cocoa 应用程序 - 如果用户没有输入某条数据,则默认使用设备的 UDID。我需要在我们的服务器代码(用 Ruby 编写)中添加一个检查,以识别发送的值是 UDID(用户的默认值)还是他们设置的自定义字符串。

看来我的问题的正确解决方案是正则表达式。我很乐意编写正则表达式,但我需要确定这个正则表达式 100% 保证能够识别 UDID。

我使用以下代码检索 UDID:

[[UIDevice currentDevice] uniqueIdentifier]

在模拟器中,我得到了这个值:

6938CA7D-ECE2-53A4-B293-961A8D07AFB1

由此我可以推断我可以只搜索与模式 8-4-4-4-12 匹配的十六进制字符串。但我想确定这适用于每个 UDID。

我在 Apple 的文档中找不到任何关于此的内容,并且想知道是否有人可以给我一个明确的答案来回答这个问题......谢谢!

4

3 回答 3

2

为什么不发送另一位表明它是 UDID 的数据呢?或者只是使用不同的参数名称 ( UDID=6938...)。

然后,在您的服务器中,如果您真的想要,您可以像这样测试它:

# somewhere outside the controller action, maybe the top of the file
UDID_PATTERN = /\A[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}\Z/

# inside the controller action you're sending info to
udid = params[:UDID]
if udid && (udid =~ UDID_PATTERN)
  # do something with the UDID in place of the other
  # bit of info they could have provided
end
于 2010-12-28T16:19:45.017 回答
2

你说不出来。苹果的文档说:

设备的唯一标识符(有时缩写为 UDID 表示唯一设备标识符)是由各种硬件标识符(如设备序列号)组成的哈希值。

uniqueIdentifieriPhone 模拟器返回与真实 iOS 设备相比不同的值。我使用的所有真正的 iPhone 设备都有 40 个十六进制字符的 UDID。但最好不要做任何假设。

即使存在 UDID 模式,如果用户输入了与该模式匹配的内容怎么办?

于 2010-12-28T16:23:29.993 回答
2

显然,唯一有保证的方法是添加额外的字段来标记您的用户是否输入了预期的数据。

UDID 形式和算法未公布,也未设计用于再次检测。所以确定可能是可能的,但它永远不会是 100%。

于 2010-12-28T16:27:24.667 回答