【问题标题】:How can I recognize whether a string is a UDID for an iOS device?如何识别字符串是否是 iOS 设备的 UDID?
【发布时间】:2010-12-29 07:14:54
【问题描述】:

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

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

我使用以下代码检索 UDID:

[[UIDevice currentDevice] uniqueIdentifier]

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

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

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

我在 Apple 的文档中找不到任何关于此的信息,我想知道是否有人可以给我一个明确的答案...谢谢!

【问题讨论】:

  • 次要评论:如果多个用户提供相同的字符串怎么办?
  • 与 iPhone、cocoa 或 IOS 无关,这是一个 Ruby 问题,对吧?
  • 真正的问题是软件行为设计。 UDID 只识别设备,而不是人。无法使用 UDID 可靠地识别人员。而且使用 UDID 可能会导致很多问题,因为用户无法更改 UDID。
  • @VdesmedT 在这个编辑标签中我没有看到任何与 Ruby 有任何关系,以便用 Objective-c 和可可替换 Ruby。事实上,它与 Ruby 没有任何关系,而是与 Cocoa 和 Objective-c 有关。由于它是一个 iOS 应用程序,因此它也与 iOS 相关。不确定问题是否已更改,但我看不出您是如何错过的。
  • 实际上我指定我正在寻找一种方法来在我的服务器代码中检测到这一点,它是基于 Ruby 的;我更期待正则表达式的 Ruby 语法出现在答案中。

标签: objective-c regex cocoa udid


【解决方案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

【讨论】:

  • 将此标记为答案;确实,除了明确标记它之外,没有真正可靠的方法,正如另一位发帖人指出的那样,设备产生的 UDID 似乎与模拟器不同,这是另一个怪癖,似乎证明这些 UDID 不是很可预测。但是提供的正则表达式对于识别与我在 Ruby 代码中发布的模式匹配的字符串是有效的。
  • 对于这么多有效的 UDID,给定的模式失败了。现在一天也有没有连字符的 UDID。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    你说不出来。苹果的documentation 说:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-26
      • 2010-10-28
      • 2013-01-25
      • 2013-06-22
      • 1970-01-01
      • 2013-12-11
      相关资源
      最近更新 更多