2

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

4

3 回答 3

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。

于 2013-05-21T18:32:00.663 回答
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 本质上是手机硬件的唯一标识符。由于制造商之间没有合作,因此不能保证它是唯一的,但考虑到组合的数量,它对于广泛的应用程序来说是一个相当可靠的硬件标识符。

于 2013-05-21T11:20:34.727 回答
1

你可以使用它:


从GitHub下载以下两个文件

OpenUDID.h
OpenUDID.m

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

并将其用作

#import "OpenUDID.h"

NSString* openUDID = [OpenUDID value];

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

于 2013-09-23T10:32:20.780 回答