Sì, certo che è possibile. Collegamento CoreTelephony.framework per rendere il codice seguente compilazione:
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");
});
};
da valori di mobileCountryCode, mobileNetworkCode, CARRIERNAME, isoCountryCode si può giudicare sulla presenza della SIM. (Senza SIM diventano errati).
Ci sono anche alcune funzioni/notifiche non documentate in CoreTelephony, ma la tua app potrebbe essere bandita da Apple se le userai. In ogni caso:
// 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
];
// Questo telefono corrente una copia numero
NSString * CTSettingCopyMyPhoneNumber()
Addendum Un'altra possibile (e legale) Soluzione: se la vostra azienda ha un database di numeri di telefono, è possibile inviare un sms o chiamare (e tagliare) qualsiasi numero specifico per verificare che l'utente usi ancora lo stesso numero di telefono.
UPDATE La funzione NSString* CTSettingCopyMyPhoneNumber()
non funziona più (restituisce una stringa vuota).
fonte
2012-06-05 20:33:55
Ciò non aiuta molto quando vuole scoprire se l'utente ha cambiato la carta SIM. Questa classe restituisce solo informazioni che non possono in alcun modo separare due schede SIM. Cosa succede se l'utente ha cambiato la carta SIM e il numero di telefono, ma utilizza ancora la stessa compagnia aerea? – Andreas
Come dice Andreas, di per sé questa API [documentata] non è molto utile, tuttavia se fosse possibile registrarsi per una notifica di modifica di uno di questi valori sarebbe utile. Anche se l'utente estrae la sim e poi inserisce di nuovo la stessa, se sapessi che è successo non è poi così male, anche se non so che i sim erano diversi o meno. Almeno vorrei sapere che i sim * potrebbero * potenzialmente essere diversi. Grazie per le informazioni sull'API non documentata, forse è possibile scoprire se va bene con Apple per usarlo. – Gruntcakes
Andreas, Chris, dovrei dichiararlo chiaramente: non è in grado di ottenere informazioni SIM valutabili con qualsiasi mezzo documentato. Possiamo solo indovinare da iterpreting di informazioni sull'operatore e sulla disponibilità della rete cellulare. Se questo non è abbastanza per te, quindi utilizza funzionalità non documentate e hack. Ce ne sono molti in iOS. Ma potresti essere bandito da Appstore, e c'è una ragione per questo. Se qualcuno otterrà tali informazioni dalla SIM come il numero di telefono o IMSI, ci sono una miriade di possibilità di fare un sacco di cose cattive come lo spam del cellulare, intercettazioni ecc. –