2012-06-03 4 views
12

우리는 사용자가 전화 번호를 제공하여 등록하는 제품을 보유하고 있습니다.SIM/전화 번호가 변경되었는지 확인할 수 있습니까?

그러나 등록 후 잠재적으로 시뮬레이션을 변경할 수 있습니다.

sim이 제거되었거나 삽입되었는지 프로그래밍 방식으로 확인할 수 있습니까?

(제공 해줘서 고마워요.하지만 처음에는 전화 번호를 사용하는 것에 대한 소홀한 의견은이 토론과 관련이 없으므로 나는 그런 측면을 이야기하고 싶지는 않습니다.).

답변

23

물론 가능합니다. 링크 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"); 
     }); 
}; 

당신이 SIM의 존재에 대해 판단 할 수 isoCountryCode mobileCountryCode, mobileNetworkCode, CARRIERNAME의 값으로. (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를 보내거나 전화를 걸 수 있습니다.

업데이트 기능 더 이상 작동하지 않습니다 (빈 문자열 반환).

+0

사용자가 SIM 카드를 변경했는지 알기를 원할 때 도움이되지 않습니다. 이 클래스는 절대로 두 개의 SIM 카드를 분리 할 수 ​​없다는 정보 만 반환합니다. 사용자가 SIM 카드와 전화 번호를 변경했지만 여전히 동일한 이동 통신사를 사용한다면 어떻게 될까요? – Andreas

+1

안드레아스 (Andreas)가 말했듯이이 [문서화 된] API는별로 유용하지 않지만 유용한 값 중 하나의 변경 알림에 등록 할 수있는 경우에 유용합니다. 사용자가 sim을 꺼내서 같은 것을 넣을지라도, sim이 다르거 나 다를지 모르더라도 그 일이 그렇게 나쁘지는 않다는 것을 알았더라도. 최소한 나는 심 (sim) *이 잠재적으로 다를 수 있음을 알고 있습니다. 문서화되지 않은 API에 대한 정보를 주셔서 감사합니다. 어쩌면 사과를 사용할지 확인하는 것이 가능합니다. – Gruntcakes

+0

Andreas, Chris, 나는 분명히 밝혀야합니다. 문서화 된 수단을 통해 가치있는 SIM 정보를 얻을 수는 없습니다. 캐리어 정보와 셀룰러 네트워크 가용성을 반복하여 추측 할 수 있습니다. 그게 충분하지 않다면 문서화되지 않은 기능과 해킹을 사용하십시오. iOS에는 많은 것들이 있습니다. 하지만 앱 스토어 (Appstore)에서 금지 당할 수도 있습니다. 그 이유가 있습니다. 누군가 전화 번호 나 IMSI와 같은 SIM에서 이러한 정보를 얻는다면 휴대 전화 스팸, 도청 등과 같은 많은 나쁜 일을 할 수있는 가능성이 있습니다. –

관련 문제