【问题标题】:How can I retrieve the UDID on iOS?如何在 iOS 上检索 UDID?
【发布时间】:2019-03-29 17:03:21
【问题描述】:

我想知道是否可以找出用户 iPhone 的 UDID。有人能解释一下吗?

【问题讨论】:

  • 这不是真正的答案,但与您的问题相关。 Apple 已弃用 iOS 5 中的 UDID 访问权限techcrunch.com/2011/08/19/apple-ios-5-phasing-out-udid
  • @Kye:那么 AdHoc 和推送通知是如何执行的,我相信苹果会有办法解决这个问题!
  • @Karthikeyan - 推送通知不使用 UDID

标签: ios cocoa-touch udid


【解决方案1】:

注意:Apple will no longer accept apps that access the UDID of a device starting May 1, 2013.

相反,您必须使用 iOS 6+ 中的新方法 identifierForVendoradvertisingIdentifier 来访问它。详情请参阅related post here


旧方式(已弃用,将导致 App Store 拒绝)

NSString *udid = [[UIDevice currentDevice] uniqueIdentifier];

从 iOS7 开始,uniqueIdentifier 属性不再可用。

请参阅UIDevice 参考。

【讨论】:

  • 请注意,这已在 iOS 5 中被弃用
  • 另一个注意事项是,如果您仍然想要类似于上面未提及的 UDID 的东西,请考虑检索设备的唯一 MAC 地址。
  • @AlbertRenshaw: 你能告诉我解决办法在 ios 7 上获取 mac,我只是在 ios 6 上获取 mac 地址。谢谢
【解决方案2】:

正如一些人所说,在 iOS5 中,这已被弃用:

NSString *udid = [[UIDevice currentDevice] uniqueIdentifier];

Apple 现在有 3 个 API 来获取设备的 UUID(通用唯一标识符):

备选方案 1(NSUUID 类):

NSString *udid = [[NSUUID UUID] UUIDString];

备选方案 2(UIDevice 类):

NSString *udid = [[[UIDevice currentDevice] identifierForVendor] UUIDString];

替代方案 3(ASIdentifierManager 类,需要 AdSupport 框架):

NSUUID *UUID = [[ASIdentifierManager sharedManager] advertisingIdentifier];
NSString *udid = [UUID UUIDString];

但它们都是字母数字的,典型的设备唯一标识符只是数字。所以这 3 个 API 没用,旧的 [[UIDevice currentDevice] uniqueIdentifier] 在 iOS6 中仍然有效,但能持续多久?

如果“已弃用”警告困扰您,只需添加:

#pragma GCC diagnostic ignored "-Wdeprecated-declarations"

希望对你有帮助!

【讨论】:

  • 不,UDID 是字母数字的。
  • 第二种替代方法很有用
  • 同意,对于 Gajendra K Chauhan,备选方案 1 每次被调用时都会返回不同的值。
【解决方案3】:

IOS5及以上,用这个找UDID

NSString *uuidString = nil;
CFUUIDRef uuid = CFUUIDCreate(NULL);
if (uuid) {
    uuidString = (__bridge NSString *)CFUUIDCreateString(NULL, uuid);
    CFRelease(uuid);
}
NSLog(@"UDID: [%@]", uuidString);

【讨论】:

  • 对我很有帮助很简单,在ios5或ios 6中使用
  • 请注意这是一个生成的id,所以后续调用CFUUIDCreate会创建不同的id。典型的模式是:尝试从NSUSerDefaults加载ID,如果是nil然后用上面的代码生成它并存储在NSUserDefaults中。
  • 值得重复:这不是设备的UDID——它是一个生成的UUID,每次调用都会生成一个新的。如果你想要一个唯一的标识符,这个方法是可以的。如果你想要设备的 UDID,这是没用的。
【解决方案4】:

可能值得一提的是,identifierForVendor 对于设备来说并不是唯一的,它可以并且最终会改变。

Apple 这么说 identifierForVendor:

对于来自 同一供应商在同一设备上运行。返回不同的值 对于来自不同供应商的同一设备上的应用程序,以及 不同设备上的应用程序,无论供应商如何。

如果该值为 nil,则等待并稍后再次获取该值。有时候是这样的, 例如,在设备重新启动之后但在用户之前 已解锁设备。

此属性中的值在应用程序(或其他 来自同一供应商的应用程序)安装在 iOS 设备上。 价值 当用户从 设备并随后重新安装其中的一个或多个。值可以 在使用 Xcode 安装测试版本或安装应用程序时也会发生变化 在使用 ad-hoc 分发的设备上。因此,如果您的应用商店 这个属性在任何地方的值,你应该优雅地处理 标识符发生变化的情况。

但更糟糕的是,根据this AVG Blog 的说法,Apple 似乎也在取消使用 MAC 地址作为唯一标识符的最后手段。

如果我们想要唯一标识设备,那么现在该怎么做 - 例如。用于许可、设置或其他目的??

【讨论】:

    【解决方案5】:

    IOS5及以上,用这个找UDID

    NSString *uuidString = nil;

    CFUUIDRef uuid = CFUUIDCreate(NULL); ...

    我认为您正在展示如何生成唯一标识号,而不是获取设备的唯一 ID。

    【讨论】:

      【解决方案6】:

      我无法发表评论,但我想警告其他人。 在回答 DZenBot 时,所有方法都没有给出相同的结果:


      备选方案 1(NSUUID 类):

      NSString *udid = [[NSUUID UUID] UUIDString];
      

      Alternative 2(UIDevice 类)(适用于 iOS 6.0 及更高版本):

      NSString *udid = [[[UIDevice currentDevice] identifierForVendor] UUIDString];
      

      Alternative 1 生成一个随机 UUID,而 Alternative 2 给出一个不会改变的固定 UID

      【讨论】:

      • 虽然 identifierForVendor 在后续调用中确实返回了一个固定的 UID,但它并不能唯一地标识一个设备。如果您删除所有供应商的应用程序并重新安装它们,它将改变。
      【解决方案7】:

      最好的办法就是这样做

      NSString *udid = [[[UIDevice currentDevice]identifierForVendor]UUIDString];
      

      【讨论】:

      【解决方案8】:

      如何使用 [OpenUDID] lib https://github.com/ylechelle/OpenUDID

      【讨论】:

        【解决方案9】:

        这很简单。转到 Xcode Window 并选择 Devices 或者您可以在 Organizer 中找到它。

        http://www.raywenderlich.com/2915/ios-code-signing-under-the-hood/organizerudid

        【讨论】:

          【解决方案10】:

          请记住 UDID 在 IOS 5 中已弃用。在 iOS 7 中,Apple 现在在查询 MAC 时始终返回一个固定值,以专门阻止 MAC 作为 ID 方案的基础。所以你现在真的应该使用-[UIDevice identifierForVendor] 或者创建一个每次安装的 UUID。希望它对某人有所帮助。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2013-06-22
            • 2012-11-07
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-03-07
            相关资源
            最近更新 更多