我想知道是否有可能找到用户iPhone的UDID。有人可以解释一下吗?
答案 0 :(得分:67)
注意:Apple will no longer accept apps that access the UDID of a device starting May 1, 2013。
相反,您必须使用iOS 6+中的新方法identifierForVendor
和advertisingIdentifier
来访问此方法。有关详细信息,请参阅related post here。
旧方式(已弃用并将导致App Store拒绝)
NSString *udid = [[UIDevice currentDevice] uniqueIdentifier];
从iOS7开始,uniqueIdentifier
属性不再可用。
请参阅UIDevice
参考。
答案 1 :(得分: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"
希望它有所帮助!
答案 2 :(得分:6)
在IOS5及更高版本中,使用此功能查找UDID
NSString *uuidString = nil;
CFUUIDRef uuid = CFUUIDCreate(NULL);
if (uuid) {
uuidString = (__bridge NSString *)CFUUIDCreateString(NULL, uuid);
CFRelease(uuid);
}
NSLog(@"UDID: [%@]", uuidString);
答案 3 :(得分:3)
值得一提的是,identifierForVendor对于设备来说并不是唯一的,它可以并且最终会发生变化。
Apple说这是identifierForVendor:
此属性的值对于来自的应用程序是相同的 在同一设备上运行的同一供应商。返回不同的值 对于来自不同供应商的同一设备上的应用程序,以及 不论供应商如何,都可以在不同的设备上使用。
如果值为nil,请稍后再次获取该值。有时候是这样的, 例如,在设备重新启动之后但在用户之前 已解锁设备。
此应用程序(或其他应用程序)中此属性的值保持不变 iOS设备上安装了来自同一供应商的应用程序。 价值 当用户从中删除所有该供应商的应用程序时更改 设备,然后重新安装其中一个或多个。价值可以 在使用Xcode安装测试版本或安装应用程序时也会更改 在使用ad-hoc分发的设备上。因此,如果您的应用程序存储 这个属性的值在任何地方,你应该优雅地处理 标识符更改的情况。
但更糟糕的是,根据this AVG Blog,似乎苹果似乎也在取消使用MAC地址作为唯一标识符的最后手段。
那么现在该做什么,如果我们想要唯一地识别设备 - 例如。用于许可,设置或其他目的??
答案 4 :(得分:2)
在IOS5及更高版本中,使用此功能查找UDID
NSString * uuidString = nil;
CFUUIDRef uuid = CFUUIDCreate(NULL); ...
我认为您正在展示如何生成唯一标识号,而不是获取设备的唯一ID。
答案 5 :(得分:2)
我无法评论,但我想警告别人。 在回答DZenBot时,所有方法都没有给出相同的结果:
备选方案1 (NSUUID类):
NSString *udid = [[NSUUID UUID] UUIDString];
备选方案2 (UIDevice类)(适用于iOS 6.0及更高版本):
NSString *udid = [[[UIDevice currentDevice] identifierForVendor] UUIDString];
备选方案1 生成随机UUID ,而备选方案2 提供已修复的UID ,但不会更改。
答案 6 :(得分:2)
最好的办法就是这样做
NSString *udid = [[[UIDevice currentDevice]identifierForVendor]UUIDString];
答案 7 :(得分:1)
如何使用[OpenUDID] lib https://github.com/ylechelle/OpenUDID
答案 8 :(得分:1)
这非常简单。转到Xcode窗口并选择设备,或者您可以在管理器中找到它。
http://www.raywenderlich.com/2915/ios-code-signing-under-the-hood/organizerudid
答案 9 :(得分:0)
记住在IOS 5中不推荐使用UDID。在iOS 7中,Apple现在总是在查询MAC时返回固定值,以明确阻止 MAC作为ID 方案的基础。因此,您现在应该使用-[UIDevice identifierForVendor]或创建每个安装的UUID。希望它对某人有所帮助。