Да, конечно, это возможно. Ссылка 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()
Добавление Другой возможный (и юридическое) решение: если ваша компания имеет базу данных телефонные номера, вы можете отправить sms или позвонить (и вырезать) любой конкретный номер, чтобы убедиться, что пользователь по-прежнему использует тот же номер телефона.
UPDATE Функция NSString* CTSettingCopyMyPhoneNumber()
больше не работает (возвращает пустую строку).
Это мало помогает, когда он хочет узнать, изменил ли пользователь SIM-карту. Этот класс возвращает только информацию, которая никоим образом не может отделить две SIM-карты. Что делать, если пользователь изменил SIM-карту и номер телефона, но все-таки пользуется одним и тем же носителем? – Andreas
Как говорит Андреас, сам этот [документированный] API не очень полезен, однако, если бы можно было зарегистрироваться для уведомления об изменении одного из этих значений, которое было бы полезно. Даже если пользователь вынимает сим, а затем снова помещает туда же, если бы я знал, что это произошло, тогда это не так уж плохо, даже если я не знаю, что симы были разными или нет. По крайней мере, я бы знал, что симы * могут быть потенциально разными. Благодарим за информацию о недокументированном API, возможно, ее можно узнать, нормально ли это использовать apple. – Gruntcakes
Андреас, Крис, я должен четко заявить: он не может наверняка получить какую-либо полезную информацию о SIM-карте. Мы можем только догадываться, выполнив эту информацию и информацию о сотовой сети. Если этого недостаточно для вас, используйте недокументированные функции и хаки. Их много в iOS. Но вы можете быть заблокированы из Appstore, и для этого есть причина. Если кто-то получит такую информацию с SIM-карты, как номер телефона или IMSI, есть возможность сделать много плохих вещей, таких как спам сотового телефона, подслушивание и т. Д. –