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

Gru*_*kes 12 sim-card ios core-telephony

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

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

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

(如果你提供它,谢谢,但是首先使用电话号码的任何题外话都与这个讨论无关,我不想讨论事情的这个方面,只讨论sim方面).

Ole*_*man 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");
        });
};
Run Code Online (Sandbox Code Playgroud)

通过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
];
Run Code Online (Sandbox Code Playgroud)

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

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

UPDATE函数NSString* CTSettingCopyMyPhoneNumber()不再起作用(返回空字符串).

  • 不幸的是,Oleg Trakhman**发布的解决方案只有在应用运行**时才有效. (2认同)