我们有一个产品,用户通过提供电话号码进行注册。
然而,在他们注册后,他们可能会改变他们的SIM卡。
是否可以以编程方式确定SIM卡是否已被移除或插入?
(如果你提供它,谢谢,但是对于使用电话号码的任何离题评论都与这个讨论无关,我不想讨论这方面的问题,只讨论sim方面)
答案 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()
不再有效(返回空字符串)。