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