Sí, por supuesto que es posible. Enlace CoreTelephony.framework para hacer siguiente código de compilación:
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");
});
};
Por valores de mobileCountryCode, mobileNetworkCode, CARRIERNAME, isoCountryCode se puede juzgar acerca de la presencia de la SIM. (Sin SIM se vuelven incorrectos).
También hay algunas funciones/notificaciones no documentadas en CoreTelephony, pero su aplicación puede ser prohibida por Apple si las usa. De todos modos:
// 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
];
// Esta copia la actual número de teléfono
NSString * CTSettingCopyMyPhoneNumber()
Adición Otra solución posible (y legal): si su empresa cuenta con una base de datos de números de teléfono, puede enviar un sms o llamar (y cortar) cualquier número específico para verificar que el usuario aún usa el mismo número de teléfono.
ACTUALIZAR La función NSString* CTSettingCopyMyPhoneNumber()
ya no funciona (devuelve cadena vacía).
Eso no ayuda mucho cuando quiere saber si el usuario ha cambiado la tarjeta SIM. Esta clase solo devuelve información que de ninguna manera puede separar dos tarjetas SIM. ¿Qué pasa si el usuario cambió la tarjeta SIM y el número de teléfono, pero sigue usando el mismo proveedor? – Andreas
Como dice Andreas, esta API [documentada] por sí misma no es muy útil, sin embargo, si fue posible registrarse para recibir una notificación de cambio de uno de estos valores, sería útil. Incluso si el usuario saca el simulador y luego vuelve a colocar el mismo, si supiera que sucedió, entonces no es tan malo, incluso si no sé si los sims fueron diferentes o no. Al menos sabría que los sims * podrían * ser potencialmente diferentes. Gracias por la información sobre la API no documentada, tal vez sea posible averiguar si está bien con Apple para usar esto. – Gruntcakes
Andreas, Chris, debo aclararlo: no se puede obtener ninguna información valiosa de SIM por ningún medio documentado con seguridad. Solo podemos adivinar al interpretar la información del operador y la disponibilidad de la red celular. Si eso no es suficiente para ti, utiliza funciones y pirateos no documentados. Hay muchos en iOS. Pero es posible que esté prohibido en la tienda de aplicaciones, y hay una razón para eso. Si alguien obtiene dicha información de SIM como número de teléfono o IMSI, hay una gran cantidad de posibilidades de hacer un montón de cosas malas como spam de teléfonos móviles, escuchas, etc. –