일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 자동 생성
- 안드로이드 푸시
- php 시큐어코딩
- php 취약점
- 자바스크립트
- 안드로이드
- android 효과음
- 안드로이드 푸쉬
- C#
- javascript
- dovecot
- xe
- 안드로이드 gcm
- UML
- 우분투
- Android
- C# IO
- PHP
- chart.js
- soundpool
- not working
- Mail Server
- FCM
- WebView
- curl
- roundcube
- mysql
- 폼메일
- 설치
- html5
- Today
- Total
그러냐
카톡 SDK 의 안드로이드 기기 unique ID 얻기 방법 본문
출처 : https://siakak.wordpress.com/2014/07/14/%EC%8B%9C%EA%B0%84%EC%9D%84-%EC%95%84%EB%81%BC%EB%8A%94-%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-%EA%B0%9C%EB%B0%9C-%EC%B9%B4%ED%86%A1-sdk-%EC%9D%98-%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4/
안녕하세요? 시간을 아껴주고 아끼는 블로그 쥔장입니다.
모든 정보들이 인터넷을 통해 연결되면서 오히려 양질의 컨텐츠를 얻는 데에 너무 많은 시간이 걸리곤 합니다.
그래서 저는 저와 독자들의 시간을 아껴주는 블로깅을 하고자 합니다.
아마 주요 주제는 프로그래밍, 맛집, 게임, 여행, 교육 등이 될 것 같습니다.
개발 쪽으로는 첫 글입니다~ 안드로이드 기기에서 TelephonyManager.getDeviceId() 가 넘어오지 않을 때가 있어서 알아본 자료입니다.
많은 도움 되시기를!!
—————-
TelephonyManager.getDeviceId() 가 참 유용하기는 한데, 핸드폰에서만 되지 태블릿이나 웨어러블 기기에서는 null 값을 넘긴다고 합니다.
그러면 도대체 어떻게 디바이스를 정확하게 구분할 수 있을까요? 여러 자료들을 찾아보던 중, 카톡 SDK 에 다음 함수가 있음을 알 수 있었습니다.
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 | public static String getDeviceUUID(final Context context) { final SharedPreferencesCache cache = Session.getAppCache(); final String id = cache.getString(PROPERTY_DEVICE_ID); UUID uuid = null; if (id != null) { uuid = UUID.fromString(id); } else { final String androidId = Secure.getString(context.getContentResolver(), Secure.ANDROID_ID); try { if (!"9774d56d682e549c".equals(androidId)) { uuid = UUID.nameUUIDFromBytes(androidId.getBytes("utf8")); } else { final String deviceId = ((TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE)).getDeviceId(); uuid = deviceId != null ? UUID.nameUUIDFromBytes(deviceId.getBytes("utf8")) : UUID.randomUUID(); } } catch (UnsupportedEncodingException e) { throw new RuntimeException(e); } Bundle bundle = new Bundle(); bundle.putString(PROPERTY_DEVICE_ID, uuid.toString()); cache.save(bundle); } return uuid.toString(); } |
내용은 다음과 같습니다.
- 먼저 가장 정확하다고 알려진 ANDROID_ID 를 가져옵니다.
- 하지만 예전 어떤 기기에서 특정 번호로만 나오던 버그가 있었다고 합니다. 이에 대한 예외처리를 해줍니다.
- ANDROID_ID 가 없으면 getDeviceID() 를 사용합니다.
- 둘 다 실패하면, 랜덤하게 UUID 를 발생시킵니다.
- 4번은 랜덤한 값이지만 preference 에 저장해두고 사용하기 때문에 삭제하고 재설치하지 않는 이상 랜덤한 넘버를 두번 만들지는 않습니다.
(참고자료 1) 안드로이드 개별 디바이스를 번역하는 방법 (안드로이드 공식 블로그의 번역) http://huewu.blog.me/110107222113
(참고자료 2) IMEI, MEID, ESN, IMSI 등에 대해 자세히 나옴 http://www.webs.co.kr/index.php?mid=adnroid&sort_index=readed_count&order_type=asc&page=2&document_srl=38470
(참고자료 3) Stack Overflow 의 방대한 문답들 http://stackoverflow.com/questions/2785485/is-there-a-unique-android-device-id
(참고자료 4) 카카오톡 안드로이드 SDK https://developers.kakao.com/docs/android
'android' 카테고리의 다른 글
webview 새로고침현상 카메라로찍었을때 (1) | 2017.03.06 |
---|---|
webview 로그인 후 뒤로가기 / 웹페이지를 사용할 수 없음 / 리다이렉트 (0) | 2017.03.02 |
안드로이드스튜디오 단축키 (0) | 2017.02.16 |
colorAccent / @color/colorAccent 에러 You need to use a Theme.AppCompat theme (0) | 2017.02.16 |
안드로이드 SoundPool(사운드 풀)로 효과음 내기 (0) | 2017.02.09 |