我正在开发一个具有后备功能的iOS Cocoa应用程序 - 如果用户没有输入某个数据,则默认使用设备的UDID。我需要在我们的服务器代码(用Ruby编写)中添加一个检查,以识别发送的值是UDID(用户的默认值)还是他们设置的自定义字符串。
似乎我的问题的正确解决方案是正则表达式。我很乐意写正则表达式,但我需要确定这个正则表达式是100%保证识别UDID。
我使用以下代码检索代码中的UDID:
[[UIDevice currentDevice] uniqueIdentifier]
在模拟器中,我得到了这个值:
6938CA7D-ECE2-53A4-B293-961A8D07AFB1
由此我可以推断我可以只搜索与模式8-4-4-4-12相匹配的一串十六进制字符。但我想确定这适用于每个UDID。
我在Apple的文档中找不到任何关于此的内容,并且想知道是否有人可以给我一个明确的答案来回答这个问题...谢谢!
答案 0 :(得分:2)
你无法分辨。 Apple的documentation说:
设备的唯一标识符(有时缩写为唯一设备标识符的UDID)是由各种硬件标识符(例如设备序列号)组成的哈希值。
与真实iOS设备相比,iPhone模拟器为uniqueIdentifier
返回不同的值。我使用的所有真正的iPhone设备都有40个十六进制字符的UDID。但最好不做任何假设。
即使存在UDID模式,如果用户输入了与该模式匹配的内容,该怎么办?
答案 1 :(得分:2)
显然,唯一有保障的方法是添加额外字段,以标记用户是否输入了预期数据。
UDID表单和算法未发布,并且不能再次检测。因此,确定可能是可能的,但它绝不是100%。
答案 2 :(得分:1)
为什么不发送另一位数据表明它是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