如何在iOS上检索UDID?

问题描述 投票:38回答:10

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

ios cocoa-touch udid
10个回答
67
投票

注意: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参考。


0
投票

记住在IOS 5中不推荐使用UDID。在iOS 7中,Apple现在总是在查询MAC时返回固定值,以专门阻止MAC作为ID方案的基础。所以你现在真的应该使用http://www.raywenderlich.com/2915/ios-code-signing-under-the-hood/organizerudid或创建一个每安装UUID。希望它对某人有所帮助。


11
投票

就像有些人说的那样,在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"

希望能帮助到你!


6
投票

在IOS5及更高版本中,使用此命令查找UDID

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

3
投票

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

Apple说这关于identifierForVendor

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

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

在iOS设备上安装app(或来自同一供应商的其他应用程序)时,此属性中的值保持不变。当用户从设备中删除所有该供应商的应用程序并随后重新安装其中一个或多个应用程序时,该值会更改。使用Xcode安装测试版本或使用ad-hoc分发在设备上安装应用程序时,该值也会发生变化。因此,如果您的应用程序将此属性的值存储在任何位置,则应优雅地处理标识符更改的情况。

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

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


2
投票

在IOS5及更高版本中,使用此命令查找UDID

NSString * uuidString = nil;

CFUUIDRef uuid = CFUUIDCreate(NULL); ...

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


2
投票

我不能评论,但我想警告别人。在回答DZenBot时,所有方法都没有给出相同的结果:


备选方案1(NSUUID类):

this AVG Blog

备选方案2(UIDevice类)(适用于iOS 6.0及更高版本):

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

备选方案1生成随机UUID,而备选方案2提供不会改变的固定UID。


2
投票

最好的方法就是这样做

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

1
投票

如何使用[OpenUDID] lib NSString *udid = [[[UIDevice currentDevice]identifierForVendor]UUIDString];


1
投票

这很简单。转到Xcode窗口并选择设备,或者您可以在管理器中找到它。

https://github.com/ylechelle/OpenUDID

© www.soinside.com 2019 - 2024. All rights reserved.