38

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

4

10 回答 10

67

注意:从 2013 年 5 月 1 日起,Apple 将不再接受访问设备 UDID 的应用程序

相反,您必须使用新方法identifierForVendoradvertisingIdentifier在 iOS 6+ 中访问它。有关更多详细信息,请参见此处的相关帖子。


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

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

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

请参阅UIDevice参考资料。

于 2010-11-24T18:23:45.623 回答
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"

希望能帮助到你!

于 2012-10-14T04:07:12.710 回答
6

在IOS5及以上,用这个找UDID

NSString *uuidString = nil;
CFUUIDRef uuid = CFUUIDCreate(NULL);
if (uuid) {
    uuidString = (__bridge NSString *)CFUUIDCreateString(NULL, uuid);
    CFRelease(uuid);
}
NSLog(@"UDID: [%@]", uuidString);
于 2012-10-17T11:39:12.373 回答
3

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

Apple 对identifierForVendor这么说:

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

如果该值为 nil,则等待并稍后再次获取该值。例如,这发生在设备重新启动之后但用户解锁设备之前。

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

但更糟糕的是,根据这个 AVG 博客,苹果似乎也在取消使用 MAC 地址作为唯一标识符的最后手段。

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

于 2013-09-27T08:54:05.557 回答
2

在IOS5及以上,用这个找UDID

NSString *uuidString = nil;

CFUUIDRef uuid = CFUUIDCreate(NULL); ...

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

于 2013-01-11T21:58:22.663 回答
2

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


备选方案 1(NSUUID 类):

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

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

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

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

于 2013-04-22T09:51:07.503 回答
2

最好的方法是这样做

NSString *udid = [[[UIDevice currentDevice]identifierForVendor]UUIDString];
于 2014-06-09T16:00:11.357 回答
1

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

于 2013-08-07T11:13:36.770 回答
1

这很简单。转到 Xcode Window 并选择 Devices 或者您可以在 Organizer 中找到它。在此处输入图像描述

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

于 2015-04-07T05:38:46.593 回答
0

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

于 2013-07-23T08:47:56.380 回答