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;

}

번호 제목 글쓴이 날짜 조회 수
88 [코틀린, youtube] 카메라로 사진찍어 저장하기 강의 황제낙엽 2022.11.03 0
87 [예제 소스 코드] <Must Have Joyce의 안드로이드 앱 프로그래밍 with 코틀린> 예제 file 황제낙엽 2022.11.03 2
86 Android에서 ML Kit를 사용하여 이미지 속 텍스트 인식 황제낙엽 2022.11.02 1
85 [코틀린] 구글 ML Kit를 이용한 바코드 스캐너 file 황제낙엽 2022.11.01 0
84 안드로이드에서 카드번호 인식하는 OCR 앱 샘플 황제낙엽 2022.10.25 4
83 OCR 개발 레퍼런스 황제낙엽 2022.10.12 5
82 안드로이드 스튜디오에서 apk 에 32bit so 파일 저장하는 방법 황제낙엽 2022.02.16 19
81 No version of NDK matched the requested version file 황제낙엽 2022.02.14 27
80 icudtl.dat (Microsoft Office Access 2010 14를 위해 Microsoft가 생성한 Dynamic Link Library) 황제낙엽 2021.07.07 34
79 Cucumber + Appium을 통해 Android 앱 테스트 file 황제낙엽 2021.04.07 56
78 AndroidX 개요 황제낙엽 2019.10.16 52
77 AndroidX - 새로운 패키지 정리 file 황제낙엽 2019.10.16 63
76 Configuration 'compile' is obsolete ... 황제낙엽 2019.09.10 76
75 AsyncTask, HttpURLConnection, session, cookie (서버 세션 유지) 황제낙엽 2019.04.28 99
74 HttpURLConnection에서 세션 유지하기 황제낙엽 2019.04.28 100
73 android.webkit.CookieManager 를 이용한 웹뷰와의 세션 공유 황제낙엽 2019.04.26 322
72 고유 식별자의 모범 사례 (Android Developers) 황제낙엽 2019.03.03 1106
71 단말기 고유값 관련 참고사항 황제낙엽 2019.03.03 95
70 단말기 고유값 구하는 방법들 황제낙엽 2019.03.03 11739
» 안드로이드 기기 식별 방법 - UUID(Universally unique identifier) 황제낙엽 2019.03.03 234