【问题标题】:How to get IMEI on iPhone 5如何在 iPhone 5 上获取 IMEI
【发布时间】: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?

【问题讨论】:

    标签: ios objective-c ios6 jailbreak 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 上测试

    【讨论】:

      猜你喜欢
      • 2013-03-20
      • 2011-12-23
      • 2013-03-28
      • 1970-01-01
      • 1970-01-01
      • 2021-03-17
      • 1970-01-01
      • 2023-03-31
      相关资源
      最近更新 更多