티스토리 뷰

안녕하세요.

Android OS 단말 중 일부 단말에서 지원하는 USIM Hot Swap 기능을 가진 단말에서 USIM 변경시 애플리케이션 단에서 확인하는 방법에 대해서 알아보려 합니다.

USIM Hot Swap단말은 주로 2016년 이후 출시 단말에 탑재 되었으며 삼성은 갤럭시 s7이후, LG는 G5이후 일부 단말이 해당 기능을 지원하고 있습니다.

USIM의 변경 여부를 확인하는 것은 인텐트의 엑스트라에 값 "LOADED"가있는 키 "ss"가 포함 된 이벤트로 제한할 수 있습니다. 

하지만 변경 사항이 있는지 항상 확인하는 것이 더 안전합니다.


 Hot, Warm, Cold 스왑 비교

  • Hot swap: 점진적 변화에 대해 새로 런치하거나 현재 액티비티를 실행하지 않고 앱에 반영하는 방식으로 메소드 실행 내부의 간단한 변화에 사용 가능
  • Warm swap: 변화가 반영되기 전 액티비티가 재실행되는 방식으로 리소스 변화가 있을 때 요구됨
  • Cold swap: 앱이 재시작(새로 인스톨되는 것은 아님!)되는 방식으로 상속, 메소드 시그너쳐와 같은 구조적 변화에 요구됨

기존의 USIM체크 방법과 다른 점은 기존에는 USIM 변경시 단말이 재부팅되어 애플리케이션에서는 아래와 같은 코드를 이용하여 USIM체크를 구현하면 앱 실행시에 USIM 변경을 확인하여 개발자가 의도하는 별도의 조치를 취할 수 있었습니다.

 TelephonyManager PNch=(TelephonyManager)mAppContext.getSystemService(Context.TELEPHONY_SERVICE); 

mPhoneNumber = PNch.getLine1Number();


하지만 Hot Swap은 재부팅을 하지 않아도 USIM 변경을 할 수 있기때문에 위와같은 코드만으로는 USIM 변경을 체크할수 없습니다.

Hot Swap 단말에서의 USIM 체크는 우선 아래와 같이 클래스를 생성합니다.

package a.b.c;

import android.content.BroadcastReceiver;

import android.content.Context;

import android.content.Intent;

import android.util.Log;


public class SimChangedReceiver extends BroadcastReceiver {


    @Override

    public void onReceive(final Context context, final Intent intent) {


         Log.d("SimChangedReceiver", "--> SIM state changed <--");

    }  



그리고 AndroidManifest.xml 에 아래와 같은 내용을 적용시키면 됩니다.

<uses-permission android:name="android.permission.READ_PHONE_STATE"/>

<application

    android:name="a.b.c...."

    ... >

    <!-- put this somewhere into your application section: -->

    <receiver android:name="a.b.c.SimChangedReceiver">

        <intent-filter>

            <action android:name="android.intent.action.SIM_STATE_CHANGED"/>

        </intent-filter>

    </receiver> 

</application> 


위와 같이 구현하면 USIM 변경에 대해서 애플리케이션에서 확인 할 수 있습니다.

샘플 코드의 경우 변경이 일어나면 로그가 찍히도록 구현되어 있으나, 보안을 위해서라면 USIM이 변경되었을때 기존 사용자의 정보를 삭제하거나 앱을 초기화 시키는게 적절한 대응으로 보입니다.

물론 의무사항은 아니며, 사용자의 편의성을 잘 고려하여 판단이 필요합니다.

※ 제조사와 안드로이드 버전에 따라서, 의도된 결과가 나오지 않을 수 있으니 주의하시기 바랍니다.


출처 : https://stackoverflow.com/questions/5389512/event-when-sim-card-is-changed

https://stackoverflow.com/questions/5548751/phone-sim-change-notification

https://news.realm.io/kr/news/aw204-instant-run-hot-cold-warm-swap



'정보보안 > Mobile' 카테고리의 다른 글

[iOS]JSON Injection  (0) 2016.05.23