我正在为越狱的iOS设备开发应用程序。我使用https://github.com/erica/uidevice-extension/blob/master/UIDevice-IOKitExtensions.m获取IMEI,但在iPhone 5上,此解决方案不起作用(返回空字符串)。有没有办法在iPhone 5(iOS 6.1.2)上获取IMEI?
答案 0 :(得分:6)
有几种方法可以在较新的设备上获取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解决方案,从未遇到过问题。
<强>更新强>
在iOS 7上,这些API受com.apple.coretelephony.Identity.get
权利保护。要访问IMEI(IMSI,电话号码和其他信息),您需要使用布尔值设置为true的权利签名。
答案 1 :(得分:2)
以编程方式获取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是手机硬件的基本唯一标识符。由于制造商之间没有合作,因此无法保证其独特性,但考虑到组合的数量,它是适用于各种应用的合理可靠的硬件标识符。
答案 2 :(得分:1)
您可以使用它:
OpenUDID.h
OpenUDID.m
将这些文件添加到您的项目中。
并将其用作
#import "OpenUDID.h"
NSString* openUDID = [OpenUDID value];
在iPhone 4和iPhone 5中测试