안드로이드 초기에는 그냥 막 아무렇게나 권한 요청하고 백그라운드에서 몰래 위치추적앱돌려서 유명해진 앱도 있고 했는데, 최근업데이트에서는 개인에 대한 정보, 보안 등이 매업데이트마다 강화되어 변경점이 생겼다.
버젼 히스토리를 보자.
롤리팝 부터는 개발자들이 공포를 느낄만큼 매년 굵직한 변화를 가져다 줬다.
현재단말에 기능에 따라서 분기 처리 해줘야 될때가 있는데, Android OS에 기본적으로 포함된
Build.VERSION.SDK_INT 숫자값을 체크하여 현재 단말이 어떤 버젼인지 알수 있다.
대부분은 특정 버젼이하인지 체크할때 쓰는데,
if(Build.VERSION.SDK_INT >= 19){
}
또는 버젼의 코드네임을 이용하여
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES. KITKAT){
}
Android 10부터는 구글이 숫자로만 하겠다고 하니 코드네임은 앞으로는 쓸일이 없을지도 모르겠다.
이밖에 Build.VERSION에 포함된 상수들이 있는데, 릴리즈버젼인지 베타인지 등을 알려주는 상수등이 포함되어 있다.
이밖에
Build 에는 아래와 같은 여러가지 상수들이 있다.
Build.BOARD
Build.BRAND
Build.CPU_ABI
Build.DEVICE
Build.DISPLAY
Build.FINGERPRINT
Build.HOST
Build.ID
Build.MANUFACTURER
Build.MODEL
Build.PRODUCT
Build.TAGS
Build.TYPE
Build.USER
Build.VERSION.RELEASE
안드로이드 OS가 아닌 단말기 마다 다르게 적용되는 통신관련정보(통신사, 전화번호, 단말ID등) 들은 TelephonyManager 라는 패키지를 통해 제공된다.
https://developer.android.com/reference/android/telephony/TelephonyManager.html
권한이 필요하다.
<uses-permission android:name="android.permission.READ_PHONE_STATE>
TelephonyManager tm = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
Android 10 에서 IMEI(고유식별번호)가 공백을 반환하기 때문에 단말초기기동시에 할당되는 값을 아래처럼 사용하면된다.
String androidId = Settings.Secure.getString(getContentResolver(),
Settings.Secure.ANDROID_ID);
최신폰에서는 추천하는 방법이지만 예전폰에서는 단말회사에 따라 모두 같은 번호를 가질 위험성도 있다.
따라서 제일좋은 방법은 UUID를 생성해서 SharedPreference에 넣어두고 사용하는 방법이다.
https://ssaurel.medium.com/how-to-retrieve-an-unique-id-to-identify-android-devices-6f99fd5369eb
String androidId = Settings.Secure.getString(getContentResolver(),
String tmSerial = "" + tm.getSimSerialNumber();
Settings.Secure.ANDROID_ID);
String tmDevice = "" + tm.getDeviceId();
UUID deviceUuid = new UUID(androidId.hashCode(), ((long)tmDevice.hashCode() << 32) | tmSerial.hashCode());
return deviceUuid.toString();
따이렇게 deviceId, SimSerial 을 다같이 조합해서 UUID를 만들면 어떤 OS 단말에서도 같은UUIS가 나오지 않게 된다. (고 스택님들이 https://stackoverflow.com/questions/2785485/is-there-a-unique-android-device-id)
0 comments:
댓글 쓰기