2012-06-03 18 views
12

Tenemos un producto donde el usuario se registra proporcionando su número de teléfono.¿Es posible determinar si el número de SIM/teléfono ha cambiado?

Sin embargo, después de que se registraron, podrían cambiar su sim.

¿Es posible determinar mediante programación si el sim se ha eliminado o insertado?

(Gracias si usted lo proporciona, pero cualquier comentario digression sobre el uso del uso del número de teléfono en primer lugar sería irrelevante para esta discusión, no quiero discutir ese aspecto de las cosas, solo el aspecto sim)

Respuesta

23

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).

+0

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

+1

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

+0

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. –

Cuestiones relacionadas