chacha's

🆔 Android 기기 고유 값 사용하기 본문

Android/TIL

🆔 Android 기기 고유 값 사용하기

Cha_Cha 2021. 11. 8. 00:23

목차

     고유 식별자 권장사항 - Docs
     안드로이드 Q 기기 고유 식별자(IMEI 등) 제한 - brunch
     안드로이드 Q DRM 기기 식별자 활용하기 - brunch
     를 참고하여 작성하였습니다.

    프로젝트를 진행하다 보니 각 기기의 고유값이 필요한 경우가 생겼습니다. 회원가입 없이 이용 가능한 앱을 만들려다보니 서버에서 각 사용자를 구분할 수 있는 고유값이 필요하게 되었습니다. 여러가지를 고려한 결과 SSAID를 사용하기로 하였습니다. 현재 버전에서는 SSAID를 적절한 기기 고유 값으로 사용할 수 있었지만 이후 버전에서는 또 달라질 수 있습니다.

    📃 안드로이드 식별자 사용 권장사항

      I am getting IMEI null in Android Q? - stack overflow

    출처 : https://brunch.co.kr/@huewu/9

    ▪ SSAID (Settings.Secure.ANDROID_ID)

    Android 8.0 이상부터는 앱 그룹 범위, 그 전에는 디바이스 범위를 대상으로 하는 식별자입니다. 8.0 이상부터는 서명 키가 동일한 앱은 동일한 식별자 값을 갖습니다. 이 식별자 값은 디바이스 초기화 전까지는 변화하지 않기 때문에 앱을 삭제 후 다시 설치하더라도 같은 값을 가집니다. 원칙적으로는 8.0 미만 버전에서는 사용을 권장하지 않고, 8.0 이상에서 수명이 긴 고유 식별자가 필요한 경우 적용하도록 합니다. 

    ✅ SSAID 사용하기

        private fun getDeviceUuid(): String? {
            return Settings.Secure.getString(
                applicationContext.contentResolver,
                Settings.Secure.ANDROID_ID
            )
        }

     

    ❌ 사용자가 재설정할 수 없는 식별자 제한

     재설정할 수 없는 기기 식별자 제한 - Doc

    Android Q 버전부터는 '사용자가 재설정할 수 없는' 디바이스 식별자를 사용할 수 없습니다. 

    ▪ Device ID / Imei / Meid 사용 불가능

    TelephonyManager의 getDeviceId를 사용하기 위해서는 READ_PRIVILEGED_PHONE_STATE 권한이 필요했습니다. 하지만 READ_PRIVILEGED_PHONE_STATE 권한은 통신사에서만 사용할 수 있는 권한으로 일반 앱에서 접근할 수 없었습니다. UICC(일반적으로 심카드)에 저장된 서명으로 서명된 앱이나, 시스템에 미리 정의된 전화 관련 소수의 앱만이 사용 가능한 권한으로 이외의 앱이 해당 권한을 획득 할 수 있는 방법은 없는 듯 합니다.

    TelephonyManager.deviceId : null 반환

    TelephonyManager.imei : null 반환

    TelephonyManager.meid : null 반환

    ▪ MAC 주소 사용 불가능

    MAC 주소는 전역적으로 고유하며, 사용자가 재설정할 수 없고 초기화 후에도 유지됩니다. 하지만 Android 10(API 29) 이상에서는 무작위로 지정된 MAC 주소를 알려주기 때문에 사용할 수 없습니다. 

    ▫ WifiInfo.getMacAddress() : 02:00:00:00:00:00를 반환

    ▫ BluetoothAdapter.getDefaultAdapter().getAddress() : 02:00:00:00:00:00를 반환

    ▪ Serial Number 사용 불가능

    Build.getSerial() : unknown 반환

    Build.SERIAL : unknown 반환

     

    END

    Comments