如何在iPhone 5上获取IMEI

我正在为越狱的iOS设备开发应用程序。 我使用https://github.com/erica/uidevice-extension/blob/master/UIDevice-IOKitExtensions.m获取IMEI,但在iPhone 5上,此解决方案不起作用(返回空字符串)。 有没有办法在iPhone 5(iOS 6.1.2)上获取IMEI?

有几种方法可以在较新的设备上获取IMEI

1)Private ManagedConfiguration.framework

CFStringRef MCCTIMEI() 

2)CoreTelephony.framework

 struct CTResult { int flag; int a; }; extern CFStringRef kCTMobileEquipmentInfoIMEI; void *connection = _CTServerConnectionCreate(kCFAllocatorDefault, NULL, NULL); NSDictionary *info = nil; struct CTResult result; _CTServerConnectionCopyMobileEquipmentInfo(&result, connection, &info); [info autorelease]; CFRelease(connection); NSString* IMEI = (NSString*)info[(NSString*)kCTMobileEquipmentInfoIMEI]; 

3)liblockdown.dylib

 extern CFStringRef kLockdownIMEIKey; void* connection = lockdown_connect(); NSString* IMEI = [(NSString*)lockdown_copy_value(connection, NULL, kLockdownIMEIKey) autorelease]; lockdown_disconnect(connection); 

我在使用MCCTIMEI遇到了一些问题 – 设备启动后返回空的IMEI。 现在我正在使用CoreTelephony解决方案,从来没有遇到过问题。

UPDATE

在iOS 7上,这些API受com.apple.coretelephony.Identity.get权利保护。 要访问IMEI(IMSI,电话号码和其他信息),您需要使用布尔值设置为true的权利签名。

以编程方式获取IMEI号有些困难。 但是,如果您正在寻找识别特定电话的方法,则可以使用UDID(唯一设备标识符)来执行此操作。

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

并尝试这个IMEI

 NSString *imei = [[NetworkController sharedInstance] IMEI]; 

****** 2014年10月更新******

 NSUUID *UUID = [[UIDevice currentDevice] identifierForVendor]; NSString *stringUUID = [UUID UUIDString]; 

UUID是手机硬件的基本唯一标识符。 由于制造商之间没有合作,因此无法保证其独特性,但考虑到组合的数量,它是适用于各种应用的合理可靠的硬件标识符。

你可以用它:


从GitHub下载以下两个文件

 OpenUDID.h OpenUDID.m 

将这些文件添加到项目中。

并用它作为

 #import "OpenUDID.h" NSString* openUDID = [OpenUDID value]; 

它在iPhone 4和iPhone 5中进行了测试

Interesting Posts