1

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

  • IMEI
  • 国际商会
  • IMSI

我看到我可以使用 CoreTelephony,但我开始怀疑:要使用这些头文件(从 class-dump 导入 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

4

2 回答 2

1

部分回答您的问题:

  • 未记录的 API 称为私有 API(在 iOS 领域中)。我想你在考虑标签“iphone-privateapi”的情况下想出了这个

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

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

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

于 2013-09-24T15:04:36.477 回答
1

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

于 2013-10-09T07:18:14.253 回答