是否可以确定SIM /电话号码是否已更改?

时间:2012-06-03 16:44:39

标签: ios sim-card core-telephony

我们有一个产品,用户通过提供电话号码进行注册。

然而,在他们注册后,他们可能会改变他们的SIM卡。

是否可以以编程方式确定SIM卡是否已被移除或插入?

(如果你提供它,谢谢,但是对于使用电话号码的任何离题评论都与这个讨论无关,我不想讨论这方面的问题,只讨论sim方面)

1 个答案:

答案 0 :(得分:23)

是的,当然有可能。链接CoreTelephony.framework以进行以下代码编译:

CTTelephonyNetworkInfo* info = [[CTTelephonyNetworkInfo alloc] init];
CTCarrier* carrier = info.subscriberCellularProvider;
NSString *mobileCountryCode = carrier.mobileCountryCode;
NSString *carrierName = carrier.carrierName;
NSString *isoCountryCode = carrier.isoCountryCode;
NSString *mobileNetworkCode = carrier.mobileNetworkCode;

// Try this to track CTCarrier changes 
info.subscriberCellularProviderDidUpdateNotifier = ^(CTCarrier* inCTCarrier) {
        dispatch_async(dispatch_get_main_queue(), ^{
            NSLog(@"User did change SIM");
        });
};

通过mobileCountryCode,mobileNetworkCode,carrierName,isoCountryCode的值,您可以判断SIM的存在。 (没有SIM,它们会变得不正确)。

CoreTelephony中还有一些未记录的功能/通知,但如果您使用它们,Apple可能会禁止您的应用。无论如何:

// Evaluates to @"kCTSIMSupportSIMStatusReady" when SIM is present amd ready; 
// there are some other values like @"kCTSIMSupportSIMStatusNotInserted"
NSString* CTSIMSupportGetSIMStatus(); 

// Use @"kCTSIMSupportSIMStatusChangeNotification" to track changes of SIM status:
[[NSNotificationCenter defaultCenter]
    addObserver:self
    selector:@selector(SIMNotification:)
    name:@"kCTSIMSupportSIMStatusChangeNotification"
    object:nil
];

//这个复制当前的电话号码
NSString * CTSettingCopyMyPhoneNumber()

附录另一种可能的(和合法的)解决方案:如果您的公司有电话号码数据库,您可以发送短信或致电(并剪切)任何特定号码以验证用户是否仍在使用同一个电话号码。

更新功能NSString* CTSettingCopyMyPhoneNumber()不再有效(返回空字符串)。