如何在 iPhone 5 上获取 IMEI

Posted

技术标签:

【中文标题】如何在 iPhone 5 上获取 IMEI【英文标题】:How to get IMEI on iPhone 5 【发布时间】:2013-05-16 02:25:47 【问题描述】:

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

【问题讨论】:

【参考方案1】:

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

1) 私有 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。

【讨论】:

遗憾的是,这些方法都不会在 iOS7 上返回 IMEI @Mobster,这些 API 在 iOS 7 中可能受权利保护。我认为是 com.apple.coretelephony.Identity.get @creker,要使用 com.apple.coretelephony.Identity.get,设备必须越狱,对吧? 顺便问一下,您有我们在 iOS7 上获取 IMEI/MEID 所需的完整权利列表吗?谢谢:) 是的,设备必须越狱。至于权利,这只是一个猜测。我查看了 Preferences 应用程序(它可以访问此类信息,包括 IMEI)权利,发现一个看起来与 IMEI 有关的权利。 iOS 6 中的 Preferences 应用程序没有此权利,所以我认为这是这些 API 停止工作的原因。我们只需要等待越狱来测试它。【参考方案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 本质上是手机硬件的唯一标识符。由于制造商之间没有合作,因此不能保证它是唯一的,但考虑到组合的数量,它对于广泛的应用来说是相当可靠的硬件标识符。

【讨论】:

可能你打错字了。 “UUIDstring”“身份”。这段代码是正确的:NSUUID *UUID = [[UIDevice currentDevice] identifierForVendor]; NSString *stringUUID = [UUID UUIDString];Work on iOS 8.3【参考方案3】:

您可以使用它:


从GitHub下载以下两个文件

OpenUDID.h
OpenUDID.m

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

并将其用作

#import "OpenUDID.h"

NSString* openUDID = [OpenUDID value];

在 iPhone 4 和 iPhone 5 上测试

【讨论】:

以上是关于如何在 iPhone 5 上获取 IMEI的主要内容,如果未能解决你的问题,请参考以下文章

使用 CoreTelephony 在 iPhone 上获取 IMEI?

如何在 Cordova for iPhone 中获取 IMEI、序列号、MAC 地址和 Advertiser_id?

以编程方式从iPhone获取IMEI号码[重复]

鉴别日版iPhone如何通过IMEI查询运营商

如何在 android 10 或更高版本中获取设备 ID 或 imei 号码

如何在 PhoneGap 中获取 IMEI 号码?