수 많은 기기들을 구별할 수 있는 고유 식별자 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 PC를 위한 최고의 안드로이드 에뮬레이터 황제낙엽 2023.01.18 3132
127 [Jetpack Compose UI / 상추님] GDG Jetpack compose 코드랩 수료 후기 (feat. 굿즈) 황제낙엽 2022.12.24 2370
126 [Jetpack Compose UI / kyj1991719] compose - Compose 이해 황제낙엽 2022.12.24 4025
125 [Jetpack Compose UI / 꾸준] Compose 가 뭔데...? 황제낙엽 2022.12.24 4035
124 [Jetpack Compose UI / IIVIKI] Compose 학습과 분석 황제낙엽 2022.12.24 4050
123 [Jetpack Compose UI] 스터디 시작하기 황제낙엽 2022.12.24 4001
122 [개발하는 정대리] 취준생을 위한 안드로이드 앱만들기 - 바텀네비게이션 뷰, 네비게이션 AAC file 황제낙엽 2022.12.22 3882
121 [개발하는 정대리] 취준생을 위한 안드로이드 앱만들기 - 뷰바인딩 file 황제낙엽 2022.12.22 3850
120 [개발하는 정대리] 취준생을 위한 안드로이드 앱만들기 - 라이브데이터 뷰모델 file 황제낙엽 2022.12.21 3826
119 [대왕놀] ImageButton in Compose (IconButton) 황제낙엽 2022.12.20 4105
118 [대왕놀] compose instrumentation test tutorial 황제낙엽 2022.12.20 3985
117 [대왕놀] Switch in Compose 황제낙엽 2022.12.20 4106
116 [대왕놀] EditText in Compose (TextField) 황제낙엽 2022.12.20 4021
115 [대왕놀] margin in Compose 황제낙엽 2022.12.20 4105
114 [대왕놀] modifier in compose 황제낙엽 2022.12.20 4180
113 [대왕놀] Button in Compose file 황제낙엽 2022.12.20 4224
112 [대왕놀] TextView in Compose (Text) 황제낙엽 2022.12.20 4083
111 [대왕놀] ImageView in Compose (Image) 황제낙엽 2022.12.20 4017
110 [대왕놀] LinearLayout in Compose (Row, Column) 황제낙엽 2022.12.20 4113
109 [대왕놀] Introduction to Jetpack compose 황제낙엽 2022.12.20 3964