使用InHouse Apps的私有API来获取IMEI,ICCID和IMSI

时间:2013-09-24 02:56:26

标签: iphone ios iphone-privateapi core-telephony imei

我正在尝试构建一个返回以下信息的应用程序:

  • IMEI
  • ICCID
  • IMSI

我看到我可以使用CoreTelephony,但我开始怀疑: 要使用这些头文件(从类转储导入CoreTelephony.h),设备必须越狱?

如果没有,CoreTelephony的有效 iOS6

这就是我的做法:

CTServerConnectionRef conn;
void ConnectionCallback(CTServerConnectionRef connection, CFStringRef string, CFDictionaryRef dictionary, void *data) {
    NSLog(@"ConnectionCallback");
    CFShow(dictionary);
}

- (NSString *)coreTelephonyInfoForKey:(const NSString *)key {
    NSString *retVal = nil;
    conn = _CTServerConnectionCreate(kCFAllocatorDefault, ConnectionCallback,NULL);
    if (conn) {
        struct CTResult result;
        CFMutableDictionaryRef equipmentInfo = nil;
        _CTServerConnectionCopyMobileEquipmentInfo(&result, conn, &equipmentInfo);
        if (equipmentInfo) {
            retVal = [NSString stringWithString:CFDictionaryGetValue(equipmentInfo, (__bridge const void *)(key))];
            CFRelease(equipmentInfo);
        }
        CFRelease(conn);
    }
return retVal;
}
- (NSString *)IMEI {
    return [self coreTelephonyInfoForKey:@"kCTMobileEquipmentInfoIMEI"];

这是我的CoreTelephony.h

2 个答案:

答案 0 :(得分:1)

部分回答你的问题:

  • 未记录的API称为私有API(在iOS领域)。我想你考虑到了标签“iphone-privateapi

  • 私人API可用于越狱和非越狱手机。一般来说,公共API和私有API之间唯一的技术差异是API是否在.h文件中定义。

  • 有时私有API会被授权(由权利修改,删除或保护)。最后一个(受权利保护是最常见的情况。权利是授予您使用某些API的权限。在被监禁的设备上,系统应用程序可以拥有权利。在越狱设备上,任何应用都可以拥有权利。

回到你的问题。我没有在iOS 7上尝试过CoreTelephony。你试过吗? (我不确定“如果没有,CoreTelephony只对iOS6有效吗?”暗示你试过了。)

答案 1 :(得分:1)

可能需要com.apple.coretelephony.Identity.get个权利。在首选项应用程序中找到它。