-
Android 고유식별자 (unique identifiers)Android 2020. 1. 2. 23:19반응형
안드로이드에서 하드웨어의 고유한 구분값이 필요한 경우가 있습니다.
하지만 무분별하게 고유값을 가져올경우 개인의 위치 식별이나 해킹 개인정보등에 노출이 있을수 있기 때문에
한정된 방법으로 고유식별자를 가져오도록 권장하고 있습니다.
https://developer.android.com/training/articles/user-data-ids고유 식별자 권장사항 | Android 개발자 | Android Developers
이 문서에서는 사용 사례에 따라 앱에 적합한 식별자를 선택하는 방법을 설명합니다. Android 권한과 관련된 일반적인 내용은 권한 개요를 참조하세요. Android 권한을 사용하기 위한 구체적인 권장사항은 앱 권한 권장사항을 참조하세요. Android 식별자 사용 권장사항 Android 식별자를 사용할 때 다음 권장사항을 따르세요. #1: 하드웨어 식별자 사용을 피합니다. 대부분의 사용 사례에서는 필수 기능을 제한하지 않고 SSAID(Android ID
developer.android.com
1: 하드웨어 식별자 사용을 피합니다. 대부분의 사용 사례에서는 필수 기능을 제한하지 않고 SSAID(Android ID) 및 IMEI와 같은 하드웨어 식별자를 사용하지 않을 수 있습니다.
2: 사용자 프로필이나 광고 사용 사례에는 광고 ID만 사용합니다. 광고 ID를 사용할 때는 항상 광고 추적과 관련하여 사용자의 선택을 존중합니다. 또한 식별자를 PII(개인 식별 정보)에 연결해서는 안 되며 광고 ID 재설정 연결을 피해야 합니다.
3: 결제 사기 예방 및 전화 통신을 제외한 기타 모든 사용 사례에는 가능한 경우 항상 인스턴스 ID 또는 비공개로 저장된 GUID를 사용합니다. 대부분 광고 이외의 사용 사례에는 인스턴스 ID나 GUID만으로 충분합니다.
4: 사용 사례에 적합한 API를 사용하여 개인정보 보호의 위험을 최소화합니다. 가치가 높은 콘텐츠 보호에는 DRM API를, 악용 방지에는 SafetyNet API를 사용하세요. SafetyNet API는 개인정보 보호의 위험을 초래하지 않고 기기의 진위 여부를 확인할 수 있는 가장 쉬운 방법입니다.
위의 내용을 안드로이드 쪽에서 권고 하고 있습니다.
안드로이드 6.0 부터는 Wifi 나 Bluetooth의 Mac Address을 가져오지 못하도록 조치하였습니다.
안드로이드 10 에서는 TelephonyManager에서 개인을 특정할 수 있는 정보를 가져올수 없도록 변경되었습니다.
TelephonyManager().getDeviceId()
TelephonyManager().getImei()
TelephonyManager().getMeid()
그리고 하드웨어의 시리얼넘버도 사용이 불가능해졌습니다.
Builde.SERIAL
안드로이드 10에서 해당 정보들을 호출해서 가져오려고 하면 아래와 같은 java.lang.SecurityException 이 출력 됩니다.
java.lang.RuntimeException: Unable to start activity ComponentInfo{dev.dnights.androiduniqueid/dev.dnights.androiduniqueid.MainActivity}: java.lang.SecurityException: getIccSerialNumber: The user 10404 does not meet the requirements to access device identifiers.
android10 에서 디바이스별 사용자의 고유한 식별자가 필요할경우에 AndroidID 와 WidevineId 를 대체로 사용할 수 있습니다.
[Android ID 공식 설명]
https://developer.android.com/reference/android/provider/Settings.Secure.html?hl=ko#ANDROID_IDSettings.Secure | Android 개발자 | Android Developers
Settings.Secure public static final class Settings.Secure extends Settings.NameValueTable Secure system settings, containing system preferences that applications can read but are not allowed to write. These are for preferences that the user must explicitly
developer.android.com
AndroidID 는 아래와 같이 방법으로 얻을수 있습니다.
Settings.Secure.getString(context.contentResolver, Settings.Secure.ANDROID_ID)
[Widevine ID 와 MediaDrm 의 설명]
https://developer.android.com/reference/android/media/MediaDrm.html?hl=ko#MediaDrm(java.util.UUID)MediaDrm | Android Developers
MediaDrm public final class MediaDrm extends Object implements AutoCloseable java.lang.Object ↳ android.media.MediaDrm MediaDrm can be used to obtain keys for decrypting protected media streams, in conjunction with MediaCrypto. The MediaDrm APIs are des
developer.android.com
WidevineID 는 아래와 같이 방법으로 얻을 수 있습니다.
fun getWidevineID(): String { val WIDEVINE_UUID = UUID(-0x121074568629b532L, -0x5c37d8232ae2de13L) val wvDrm = try { MediaDrm(WIDEVINE_UUID) } catch (e: UnsupportedSchemeException) { //WIDEVINE is not available null } val widevineId = wvDrm!!.getPropertyByteArray(MediaDrm.PROPERTY_DEVICE_UNIQUE_ID) val encodedWidevineId = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { Base64.getEncoder().encodeToString(widevineId).trim() } else { TODO("VERSION.SDK_INT < O") } return encodedWidevineId }
안드로이드 고유ID Sample Code 입니다.
https://github.com/DNights/AndroidUniqueIDDNights/AndroidUniqueID
Contribute to DNights/AndroidUniqueID development by creating an account on GitHub.
github.com
[참고링크]
https://brunch.co.kr/@huewu/9안드로이드 Q 기기 고유 식별자(IMEI 등) 제한
개발자를 위한 안드로이드 Q #3 | 시작하기 전에... 본 포스트는 디바이스 ID 관련된 내용을 다루며, 3월 14일 공개된 안드로이드 Q 베타 버전 기준으로 작성되었습니다. 이후, 정식 버전에서는 기능 및 API가 변경될 수 있으며, 기능에 관한 소감이나 의견은 개인적인 의견으로 회사의 공식 의견과는 다를 수 있습니다. TL;DR; 안드로이드 Q 버전부터는 더 이상 '사용자가 재설정할 수
brunch.co.kr
https://brunch.co.kr/@huewu/15안드로이드 Q DRM 기기 식별자 활용하기
개발자를 위한 안드로이드 #7 | 시작하기 전에 이 포스트는 안드로이드 Q 베타 2 패치 버전을 기준으로 작성되었습니다. Q 정식 버전에서는 기능 및 API가 변경될 수 있습니다. 기능에 관한 소감이나 의견은 개인적인 의견으로 회사의 공식 의견과는 다를 수 있습니다. 본 포스트는 안드로이드 MediaDrm API를 이용해, 기기 초기화 후에도 유지되는 고유 식별자를 얻는 방법을 다룹니다.
brunch.co.kr
반응형'Android' 카테고리의 다른 글
Build a Modular Android App Architecture (Google I/O'19) (0) 2020.02.07 Android .gitignore 내용 (0) 2020.01.27 Android KeyStore 정보를 환경 변수로 저장/사용 (for.Mac) (0) 2020.01.23 Android Learning Links (안드로이드 학습 링크) (0) 2020.01.07 Android Studio Editor 폰트(글꼴) 변경 (0) 2019.12.17 Storage Access Framwork 다루기 (Android ScopedStorage) (1) 2019.12.13 MediaStore File 다루기 (Android ScopedStorage) (6) 2019.12.11 Android R8 Compiler (0) 2019.12.05