2012-06-03 6 views
12

Wir haben ein Produkt, bei dem sich der Benutzer registriert, indem er seine Telefonnummer angibt.Kann festgestellt werden, ob sich die SIM/Telefonnummer geändert hat?

Allerdings könnten sie nach ihrer Registrierung möglicherweise ihre Sim ändern.

Ist es möglich, programmatisch festzustellen, ob der Sim entfernt oder eingefügt wurde?

(Danke, wenn Sie es zur Verfügung stellen, aber Abschweifungskommentare über die Verwendung der Telefonnummer an erster Stelle wäre für diese Diskussion irrelevant, ich möchte diesen Aspekt der Dinge nicht diskutieren, nur den Sim-Aspekt).

Antwort

23

Ja, natürlich ist es möglich. Link CoreTelephony.framework zu folgenden Code Kompilierung zu machen:

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"); 
     }); 
}; 

Durch Werte von mobileCountryCode, mobileNetworkCode, CARRIER, isoCountryCode Sie über die Anwesenheit der SIM beurteilen. (Ohne SIM werden sie falsch).

Es gibt auch undokumentierte Funktionen/Benachrichtigungen in CoreTelephony, aber Ihre App wird möglicherweise von Apple gesperrt, wenn Sie sie verwenden. Wie dem auch sei:

// 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 
]; 

// Dieser Kopien aktuelle Telefonnummer
NSString * CTSettingCopyMyPhoneNumber()

Nachtrag Eine weitere mögliche (und legal) Lösung: Wenn Ihr Unternehmen verfügt über eine Datenbank von Telefonnummern können Sie eine SMS senden oder eine bestimmte Nummer anrufen (und abschneiden), um sicherzustellen, dass der Benutzer immer noch dieselbe Telefonnummer verwendet.

UPDATE Funktion NSString* CTSettingCopyMyPhoneNumber() funktioniert nicht mehr (gibt einen leeren String zurück).

+0

Das hilft nicht viel, wenn er herausfinden will, ob der Benutzer die SIM-Karte gewechselt hat. Diese Klasse gibt nur Informationen zurück, die auf keinen Fall zwei SIM-Karten trennen können. Was passiert, wenn der Benutzer die SIM-Karte und die Telefonnummer ändert, aber immer noch den gleichen Mobilfunkanbieter verwendet? – Andreas

+1

Wie Andreas sagt, ist diese [dokumentierte] API selbst nicht sehr nützlich, wenn es jedoch möglich wäre, sich für eine Benachrichtigung über die Änderung eines dieser Werte zu registrieren, die nützlich wäre. Selbst wenn der Benutzer die SIM-Karte herausnimmt und sie dann wieder einlegt, wenn ich weiß, dass das passiert ist, dann ist es nicht so schlimm, auch wenn ich nicht weiß, dass die Sims anders waren oder nicht. Zumindest würde ich wissen, dass die Sims möglicherweise anders sein könnten. Danke für die Infos über die undokumentierte API, vielleicht ist es möglich herauszufinden, ob es in Ordnung ist mit Apple, dies zu verwenden. – Gruntcakes

+0

Andreas, Chris, ich sollte es klarstellen: Es ist nicht in der Lage, irgendwelche wertvollen SIM-Informationen durch irgendwelche dokumentierten Mittel sicher zu erhalten. Wir können nur erraten, indem wir die Trägerinformationen und die Verfügbarkeit des Mobilfunknetzes angeben. Wenn das nicht genug für Sie ist, dann verwenden Sie undokumentierte Funktionen und Hacks. Es gibt viele von ihnen in iOS. Aber Sie können von Appstore ausgeschlossen werden, und es gibt einen Grund dafür. Wenn jemand solche Informationen von SIM wie Telefonnummer oder IMSI erhält, gibt es eine Vielzahl von Möglichkeiten, viele schlechte Dinge zu tun, wie Handy-Spam, Lauschangriffe usw. –