今天的任务是 iPhone上怎样获取 imsi 信息 来判断所属运营商,资料找了很久!总体有两种方案,但是其中一种好像不行

这里我都记录下来吧:

1: 这是使用coreTelephony.framework获取imsi  (我iOS 7 上面使用是没用的 这里我只是记录下)

#define PRIVATE_PATH  "/System/Library/PrivateFrameworks/CoreTelephony.framework/CoreTelephony"

// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad {
    [super viewDidLoad];
#if !TARGET_IPHONE_SIMULATOR
    void *kit = dlopen(PRIVATE_PATH,RTLD_LAZY);    
    NSString *imsi = nil;
    int (*CTSIMSupportCopyMobileSubscriberIdentity)() = dlsym(kit, "CTSIMSupportCopyMobileSubscriberIdentity");
    imsi = (NSString*)CTSIMSupportCopyMobileSubscriberIdentity(nil);
    dlclose(kit);    

    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"IMSI" 
                                                    message:imsi 
                                                   delegate:self 
                                          cancelButtonTitle:@"OK" 
                                          otherButtonTitles:nil];
    [alert show];
    [alert release];
#endif
}

 

 

2、后来在无意识中我找到了以下方案

无庸置疑,以下的所有操作必须建立在已越狱的iPhone手机上。(这点我还是要说下,我用的是非越狱手机,但是可以获取到的)

首先,在建立工程之后我们要引入一个名为CoreTelephony.framework的框架,他是一个是一个有关电话、短信和邮件通讯的框架。

需引入框架CoreTelephony.framework (私有API)

导入头文件 

(CoreTelephony.framework 库需要导入)
#import<CoreTelephony/CTTelephonyNetworkInfo.h>
#import<CoreTelephony/CTCarrier.h>

 

+(NSString*)getImsi{

 

    NSString *ret = [[NSString alloc]init];

    CTTelephonyNetworkInfo *info = [[CTTelephonyNetworkInfo alloc] init];

    CTCarrier *carrier = [info subscriberCellularProvider];

    if (carrier == nil) {

        return @"0";

    }

    NSString *code = [carrier mobileNetworkCode];

    if ([code isEqual:@""]) {

        return @"0";

    }

    if ([code isEqualToString:@"00"] || [code isEqualToString:@"02"] || [code isEqualToString:@"07"]) {

        ret = @"中国移动";

    }

    if ([code isEqualToString:@"01"]|| [code isEqualToString:@"06"] ) {

        ret = @"中国联通";

    }

    if ([code isEqualToString:@"03"]|| [code isEqualToString:@"05"] ) {

        ret = @"中国电信";;

    }

    return ret;

}

 

这里当作记录吧