如何在 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?