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

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

然而,他们注册后,他们可能会改变他们的模拟。

是否有可能编程确定是否已经删除或插入SIM卡?

(谢谢,如果你提供它,但首先使用电话号码的任何离题评论将与这个讨论无关,我不想讨论的东西方面,只有SIM方面)。

是的,当然这是可能的。 链接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中还有一些未公开的函数/通知,但是如果您使用它们,苹果公司可能会禁止您的应用程序。 无论如何:

 // 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()

附录另一种可能的(合法的)解决scheme:如果您的公司有一个电话号码数据库,您可以发送短信或打电话(并剪切)任何特定号码,以确认用户仍然使用相同的电话号码。

更新函数NSString* CTSettingCopyMyPhoneNumber()不再工作(返回空string)。