Подтвердить что ты не робот

Можно ли определить, изменился ли номер SIM/Телефон?

У нас есть продукт, в котором пользователь регистрируется, предоставляя свой номер телефона.

Однако после регистрации они могут потенциально изменить свой сим.

Можно ли программно определить, удален ли SIM-диск или вставлен?

(Спасибо, если вы его предоставите, но любые комментарии к отзыву об использовании номера телефона в первую очередь были бы неактуальны для этого обсуждения, я не хочу обсуждать этот аспект вещей, только аспект sim).

4b9b3361

Ответ 1

Да, конечно, это возможно. Ссылка 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-карты. (Без сим они становятся некорректными).

В 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() больше не работает (возвращает пустую строку).