sitelink1 https://boxfoxs.tistory.com/269 
sitelink2  
sitelink3  

수 많은 기기들을 구별할 수 있는 고유 식별자 UUID를 알아보겠습니다.

 

■ UUID - Universally unique identifier : 범용고유식별자

 

기존에는 수 많은 디바이스들을 구별하기 위해서 IP나 MAC Address를 사용햇습니다. 하지만, 모바일 디바이스는 네트워크를 ON OFF만 해도 IP가 변경되고, 위치에 따라 수시로 바뀔 수도 있고, 여러 대의 스마트폰이 한 개의 WIFI를 통해 접속하거나 DHCP(내부 IP 자동할당)기능을 끄고 다른 기기에다 이전에 사용했던 내부 ip를 할당하게 되는등의 상황을 고려하면 ip는 절대 고유한 값을 가진다고 볼 수 없습니다. 또, Mac Address는 네트워크 카드의 고유 값이라고 하지만, 만약 wifi를 거치게 될 시에는 해당 디바이스의 Mac Address 가 아닌 wifi의 Mac Address로 교체됩니다.

 

하지만 안드로이드 OS가 대첵을 마련하지 않은 건 아닙니다. 안드로이드 OS는 기본적으로 디바이스 ID 생성메소드가를 제공해 줍니다.

 

TelephonyManager.getDefault.getDevideId();

 

하지만 위 메소드의 경우 USIM이 존재해야 하고, USIM이 존재 하더라도 디바이스 ID 값이 넘어오지 않는 경우가 발생한다고 합니다.

 

따라서 가장 확실하고 안정적으로 디바이스들을 구별할 수 있는 UUID(Universally unique identifier) : 범용 고유 식별자를 사용하는 것 입니다. UUID는 국제기구에서 사용중이며, 완벽한 고유성을 지니진 못하지만 16byte로 이루어졌기 때문에 총 3*10^38가지의 ID를 사용할 수 있기 때문에 동일한 UUID가 나오게 될 확률은 복권에 당첨될 확률보다 훨씬 더 낮습니다.

 

 

■ Get UUID from Device

 

그럼 이번에는 기기에서 UUID를 얻어오는 방법을 알아봅시다.

 

안드로이드에서는 기기의 ID와, 시리얼 넘버, 그리고 안드로이드 시큐리티(Security) ID 이 세 가지의 해시 값을 사용하여 UUID가 생성됩니다. 이 값들을 가져오기 위해서는 <uses-permission android:name="android.permission.READ_PHONE_STATE" />해당 퍼미션(권한)이 필요합니다.

 

아참! 위 세 가지 정보를 얻어낸다고 해서 보안에 문제가 생기지는 않습니다. UUID가 외부에 노출된다 해도 해시를 통해 복호화가 불가능하게 만들어서 위에서 얻어낸 정보들이 유출될 수 없습니다.

 

그리고 마지막으로 아래 메소드를 이용하시면 됩니다. 매개변수인 Context로는 MainActivity.this 등으로 넣어주면 됩니다.

 

private String GetDevicesUUID(Context mContext){

        final TelephonyManager tm = (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE);

        final String tmDevice, tmSerial, androidId;

        tmDevice = "" + tm.getDeviceId();

        tmSerial = "" + tm.getSimSerialNumber();

        androidId = "" + android.provider.Settings.Secure.getString(getContentResolver(), android.provider.Settings.Secure.ANDROID_ID);

        UUID deviceUuid = new UUID(androidId.hashCode(), ((long)tmDevice.hashCode() << 32) | tmSerial.hashCode());

        String deviceId = deviceUuid.toString();

        return deviceId;

}

번호 제목 글쓴이 날짜 조회 수
128 단말기 고유값 구하는 방법들 황제낙엽 2019.03.03 11739
127 뷰 캡처하여 이미지 파일로 저장하기(화면 캡처)-04 file 황제낙엽 2018.08.12 1711
126 고유 식별자의 모범 사례 (Android Developers) 황제낙엽 2019.03.03 1106
125 Emulator: audio: Failed to create voice `adc' 황제낙엽 2018.08.06 1007
124 뷰 캡처하여 이미지 파일로 저장하기(화면 캡처)-06 file 황제낙엽 2018.08.19 991
123 HTTP 프로토콜을 이용한 Json Post 보내고 받기 file 황제낙엽 2017.08.03 816
122 Error:Execution failed for task ':app:lintVitalRelease'. 황제낙엽 2018.01.29 783
121 파일 입출력(내장 메모리, 외장메모리) 황제낙엽 2018.08.19 720
120 HttpURLConnection 에서 세션 유지하기(쿠키 사용) 황제낙엽 2017.08.03 661
119 [성공샘플] HttpURLConnection 을 이용하여 JSON 데이터 보내기 예제 황제낙엽 2018.11.10 649
118 Image to byte Array (바로 사용가능한 JPEG 파일) 황제낙엽 2018.07.24 612
117 STT 학습 링크 모음 (sample link) 황제낙엽 2018.10.11 552
116 ABI 관리 황제낙엽 2017.03.28 535
115 TTS 를 위한 스마트폰 설정 및 TTS 샘플 file 황제낙엽 2019.02.16 460
114 안드로이드 스튜디오(Android Studio) 최적화 file 황제낙엽 2018.02.07 433
113 android.webkit.CookieManager 를 이용한 웹뷰와의 세션 공유 황제낙엽 2019.04.26 322
112 동적 레이아웃 생성과 자동 줄바꿈 구현 file 황제낙엽 2018.12.26 311
111 Android - Actionbar에 tab을 추가하고 스와이프 동작으로 화면 전환 구현( ViewPager와 FragmentPagerAdapter 사용) file 황제낙엽 2017.09.11 308
110 안드로이드 두지점(위도,경도) 사이의 거리 file 황제낙엽 2017.01.25 257
» 안드로이드 기기 식별 방법 - UUID(Universally unique identifier) 황제낙엽 2019.03.03 234