[Android] 특정 국가 차단하기 (SIM 정보 이용)

2025. 3. 27. 16:29Android/네트워킹

728x90
반응형

오늘은 Android 앱에서 특정 국가를 차단하는 기능이 필요해졌다.
VPN이나 GPS보다 우회가 어렵고, 간단하게 구현할 수 있는 방법은 없을까?
그 첫 번째 시도로 SIM 카드의 국가 코드를 활용해보기로 했다.

 

사용한 API: getSimCountryIso()

안드로이드의 TelephonyManager는 SIM에 저장된 ISO 국가 코드를 반환하는 메서드를 제공한다.
이 코드를 통해 사용자의 유심이 어느 국가에서 발급된 것인지 확인할 수 있다.

 

코드 (Kotlin)

fun getSimCountryIso(context: Context): String {
    val telephonyManager = context.getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager
    return telephonyManager.simCountryIso.uppercase() // 예: "KR", "US"
}

val simCountry = getSimCountryIso(context)
val isBlockedCountry = simCountry == "CN" || simCountry == "RU"

if (isBlockedCountry) {
    // 접근 제한 처리
    showAccessRestrictedDialog()
}

참고 사항

  • simCountryIso는 SIM이 없는 경우 빈 문자열을 반환한다.
  • eSIM도 동일하게 작동하며, 현재 활성화된 프로필의 국가 기준이다.
  • 단말기가 듀얼심일 경우 SubscriptionManager로 더 정교하게 관리할 수 있다.
  • getNetworkCountryIso()도 존재하지만, 로밍이나 VPN 우회 가능성이 있으므로 보조 용도로 쓰는 걸 추천.

한계점

  • SIM 발급 국가 기준이기 때문에, 실제 사용 위치와 다를 수 있다.
  • APK를 직접 설치하거나, SIM을 빼고 사용하는 경우 우회 가능.
  • 완벽한 차단을 위해선 GeoIP + 서버 사이드 차단 + Play Store 국가 제한을 함께 써야 한다.

한계점은 있으나, 현재 간단하게 VPN 우회가 먹히지 않는 방법으로

해외 접속을 차단할 수 있는 방법이라 판단되어 채택하였다.

 

 

728x90
반응형