일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Retrofit2
- Collections Function
- 생명주기
- Room
- RecyclerView
- gradle plugin
- Load failed
- findNavController
- Popup menu background color
- http
- ThreeTen Backport
- json
- Android
- layout_constrainedWidth
- 화면 회전
- BottomSheetDialogFragment
- kotlin
- log
- NumberPIcker
- multipart
- studywithme
- Lifecycle
- SSAID
- DataBinding
- WorkManager
- Navigation
- DialogFragment
- todo
- layout_constrainedHeight
- 기기고유값
- Today
- Total
chacha's
🆔 Android 기기 고유 값 사용하기 본문
목차
고유 식별자 권장사항 - Docs
안드로이드 Q 기기 고유 식별자(IMEI 등) 제한 - brunch
안드로이드 Q DRM 기기 식별자 활용하기 - brunch
를 참고하여 작성하였습니다.
프로젝트를 진행하다 보니 각 기기의 고유값이 필요한 경우가 생겼습니다. 회원가입 없이 이용 가능한 앱을 만들려다보니 서버에서 각 사용자를 구분할 수 있는 고유값이 필요하게 되었습니다. 여러가지를 고려한 결과 SSAID를 사용하기로 하였습니다. 현재 버전에서는 SSAID를 적절한 기기 고유 값으로 사용할 수 있었지만 이후 버전에서는 또 달라질 수 있습니다.
📃 안드로이드 식별자 사용 권장사항
I am getting IMEI null in Android Q? - stack overflow
▪ 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
'Android > TIL' 카테고리의 다른 글
🚧 layout_constrainedHeight/Width로 가변 길이 설정하기 (0) | 2021.12.24 |
---|---|
📁 Dialog Fragment 이것 저것 (0) | 2021.09.30 |
Gson을 이용하여 Assets에 있는 JSON 파일 읽기 (0) | 2021.08.09 |
🕶 Glide 이용할 때 Http URL 사용 시 화면 안 보임 (0) | 2021.08.07 |
🔀 Dialog에서 findNavController 접근 못 하는 문제 (0) | 2021.06.16 |