代码之家  ›  专栏  ›  技术社区  ›  Oh Danny Boy

如何在iOS上检索UDID?

  •  38
  • Oh Danny Boy  · 技术社区  · 14 年前

    我想知道是否有可能找到用户iPhone的UDID。有人能发光吗?

    10 回复  |  直到 11 年前
        1
  •  67
  •   Wolfram    11 年前

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

    相反,您必须使用新方法 identifierForVendor advertisingIdentifier 在iOS 6+中访问这个。见 related post here 更多细节。


    旧方法(已弃用,将导致应用商店拒绝)

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

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

    UIDevice 参考资料。

        2
  •  11
  •   Mohamed Jaleel Nazir    9 年前

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

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

    苹果现在有3个api来获取 UUID公司 设备的(通用唯一标识符):

    备选方案1(nsuid类):

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

    备选方案2(UIDevice类):

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

    备选方案3(ASIdentifierManager类,RequireRes AdSupport框架):

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

    但它们都是字母数字的,一个特殊设备的唯一标识符只是数字。所以Thos3API是无用的,旧的[[UIDevice currentDevice]uniqueIdentifier]仍然在iOS6中工作,但是要工作多久?

    如果“已弃用”警告错误,只需添加:

    #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
    

    希望有帮助!

        3
  •  6
  •   Pierre de LESPINAY    11 年前

    在IOS5和更高版本中,使用这个来查找UDID

    NSString *uuidString = nil;
    CFUUIDRef uuid = CFUUIDCreate(NULL);
    if (uuid) {
        uuidString = (__bridge NSString *)CFUUIDCreateString(NULL, uuid);
        CFRelease(uuid);
    }
    NSLog(@"UDID: [%@]", uuidString);
    
        4
  •  3
  •   waza    5 年前

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

    苹果这么说 identifierForVendor :

    此属性的值对于来自 在同一设备上运行的同一供应商。返回不同的值 对于来自不同供应商的同一设备上的应用程序,以及 不同设备上的应用程序,不考虑供应商。

    如果该值为nil,请稍候再获取该值。这种情况发生了, 例如,在设备重新启动之后,但在用户之前 已解锁设备。

    当应用程序(或其他 同一供应商的应用)安装在iOS设备上。 价值 当用户从 设备,然后重新安装其中一个或多个。价值可以 使用Xcode安装测试生成或安装应用程序时也会更改 在使用特别分发的设备上。因此,如果你的应用程序存储 这个属性的值在任何地方,您都应该优雅地处理 标识符更改的情况。

    但更糟糕的是,苹果似乎也在消除使用MAC地址作为唯一识别器的最后手段 this AVG Blog .

    那么,如果我们想唯一地识别设备(例如用于许可、设置或其他目的),现在该怎么办??

        5
  •  2
  •   El Tomato    12 年前

    在IOS5和更高版本中,使用这个来查找UDID

    NSString*uuidString=nil;

    CFUUIDRef uuid=CFUUIDCreate(空); ...

    我想你是在演示如何生成唯一的识别号,而不是获取设备的唯一id。

        6
  •  2
  •   Sunil Zalavadiya    11 年前

    我无可奉告,但我想警告其他人。 在DZenBot的回答中,所有的方法都给出了不同的结果:


    备选方案1 (nsuid类):

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

    备选方案2 (UIDevice类)(在iOS 6.0及更高版本中提供):

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

    备选方案1 生成 随机UUID 虽然 备选方案2 给一个 固定UID 不会改变的。

        7
  •  2
  •   Wesley Bland    10 年前

    最好的办法就是这样做

    NSString *udid = [[[UIDevice currentDevice]identifierForVendor]UUIDString];
    
        8
  •  1
  •   Minh Hoang Truong    11 年前

    使用[OpenUDID]库怎么样 https://github.com/ylechelle/OpenUDID

        9
  •  1
  •   swathy krishnan    9 年前

    很简单。转到Xcode窗口并选择“设备”,或者可以在“管理器”中找到它。 enter image description here

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

        10
  •  0
  •   Femina    11 年前

    记住,UDID在IOS 5中是不推荐使用的。在iOS 7中,苹果现在在查询MAC时总是返回一个固定值,以专门阻止 MAC作为ID的基础 计划。所以你现在真的应该用 -[UIDevice identifierForVendor] 或者创建每个安装的UUID。希望能帮上忙。