iOS 국가 코드(isoCountry code) 정보 가져 오기

기존에 국가코드를 가져오는 코드에서 문제가 발생했습니다. 코드 정보를 제대로 못 받아오는 부분이 있었는데요. 이유는 바로 유심이 없는 테스트폰이었기 때문입니다. 기존에 사용하고 있던 코드는 디바이스에 연결된 네트워크에서 정보를 가져오고 있었습니다. 

 

subscriberCellularProvider

 CTTelephonyNetworkInfo *sNetworkInfo = [[[CTTelephonyNetworkInfo alloc] init] autorelease];
    NSString* isoCountryCode;
    if (@available(iOS 12.0, *)) {
        NSDictionary<NSString *, CTCarrier *>* sCarrier = [sNetworkInfo serviceSubscriberCellularProviders];
        CTCarrier* carrier = nil;
        for (NSString *key in sCarrier) {
            carrier = sCarrier[key];
            break;
        }
        
        isoCountryCode = [carrier isoCountryCode];
    }
    else
    {
        CTCarrier* carrier = [sNetworkInfo subscriberCellularProvider];
        isoCountryCode = [carrier isoCountryCode];
    }
        
    return ([isoCountryCode length] > 0 ) ? isoCountryCode : @"";

CTTelephonyNetworkInfo는 셀룰러 데이터 정보에서 받아오게 됩니다. subscriberCellularProvider의 경우도 Deprecated 되었습니다. 따라서 iOS 12 이상부터는 serviceSubscriberCellularProviders로 변경해주면 됩니다. (아직 없어지지는 않아서 사용은 가능합니다.)

 

isoCountryCode

isoCountryCode-nil

여기서 문제는 이 정보가 셀룰러 정보에서 가져오기 때문에 앞에서 설명한 것 처럼 데이터가 연결되지 않은 폰에서는 문제가 발생합니다.

  1. 비행기 모드일 경우
  2. 유심 카드가 없을 경우
  3. 셀룰러 서비스의 범위를 벗어났을 경우

이 경우에는 해당 isoCountryCode를 사용 할 수 없습니다. Wifi 네트워크 정보에서 이런 국가 코드를 가져오는 게 있나 찾아봤었는데요. 딱히 정보를 얻을 수 없었습니다. 그래서 차선책으로 아이폰 로컬 설정 지역 정보를 가져오기로 했습니다. 이 방법으로 로컬 설정 언어도 가져올 수 있습니다.

 

NSLocale

NSLocale *currentLocale = [NSLocale currentLocale];
NSString *countryCode = [currentLocale objectForKey:NSLocaleCountryCode]
NSString *languageCode = [currentLocale objectForKey:NSLocaleLanguageCode];

현재 아이폰 로컬에 설정된 국가 정보 가져오는 코드 입니다. 방법은 NSLocale을 이용합니다. 여기에 많은 정보가 있는데요. 언어 코드정보도 이 방식으로 가져올 수 있습니다.

 

 

그리드형(광고전용)

이 글을 공유합시다

facebook twitter googleplus kakaoTalk kakaostory naver band

댓글

Designed by JB FACTORY