如何在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中进行了测试