[Android] 특정 국가 차단하기 (SIM 정보 이용)
2025. 3. 27. 16:29ㆍAndroid/네트워킹
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
반응형
'Android > 네트워킹' 카테고리의 다른 글
Retrofit Singleton 패턴을 유지하면서 ApiService를 기능별로 분리하기 (1) | 2025.02.17 |
---|---|
Android에서 OkHttp 통신 시 Memory를 최적화 하기 위한 체크 포인트 (0) | 2025.01.21 |
[Android/Java/Kotlin]ExecutorService (0) | 2023.05.29 |
[Android/Async]Process, Thread에 대한 기본개념 (0) | 2023.02.26 |