본문 바로가기
모바일개발(Mobile Dev)/안드로이드개발(Android)

android fingerprint making For Maps API

by 테크한스 2016. 6. 12.
반응형




written by http://1004lucifer.blogspot.kr/2014/03/android-google-maps-api-v2-apikey.html






1. 인증서 지문 생성

1. java path 가 정상적으로 잡혀있는지 확인해본다.
커맨드에서 'keytool' 입력 시 다음과 같은 화면이 나오는지 확인한다.
(아래와 같이 나오면 2단계로 건너도 좋다.)



만일 위와 같이 나오지 않지만
'java'는 실행이 된다면 다음과 같이 java가 설치되어있는 곳을 확인 후 이동한다.


위의 방법도 안되어 있다면 자바가 설치되어 있지 않거나 java자체도 심볼릭이 걸려있지 않은경우다.
차라리 java를 다시 설치하는게 빠르겠다.



2. 인증서 지문을 생성.
다음과 같은 명령으로 지문을 생성한다.
'keytool -list -keystore ~/.android/debug.keystore -v'

위에서 path가 설정되지 않아서 java가 설치되어 있는 곳으로 이동한경우에는
다음과 같이 입력한다.
'./keytool -list -keystore ~/.android/debug.keystore -v'


다음과 같이 나오면 성공 (인증서 지문의 SHA1 부분을 복사해 둔다.)










2. Google Maps API v2 에 API 활성화 및 지문등록
방법은 여기에 잘 나와있다. (영어로..)
https://developers.google.com/maps/documentation/android/?csw=1


내용을 보자면 다음과 같다.


1. Google APIs Console 에서 API Project 를 생성 및 서비스 활성화

다음 사이트로 접속 후 Create project 를 클릭한다.
https://code.google.com/apis/console/



보여지는 서비스중에서 'Google Maps Android API v2' 를 찾아서 On 으로 변경한다.






이제 다음 링크로 들어간 후 왼쪽 네비게이션의 'API Access' 를 클릭한다.
https://code.google.com/apis/console/?noredirect




그 다음 'Create New Android Key...' 버튼을 클릭한다.





팝업창에 아까 복사해둔 SHA1 지문을 입력 후 뒤에 세미콜론(;)과 사용할 앱의 패키지 명을 입력 후 'Create' 버튼을 누른다.



PS. 패키지명은 자신이 만든 안드로이드앱의 AndroidManifest.xml 파일에 있다.




다음과 같이 API key가 생성이 되었다.





keystore 파일 생성하기

키를 신청하기 이전에, Keystore 파일을 생성하고 SHA 지문을 읽어와야 한다.

먼저, Eclipse에서 사용하고자 하는 프로젝트 제목에서 우측 마우스버튼을 클릭하고, 다음과 같이
Android Tools -> Export Signed Application Package를 선택한다.
이 과정은 원래 서명된 APK 파일을 생성하기 위한 절차인데, 과정 중에서 Keystore를 새로 생성하는 부분이 있어서
커멘드 창에서 명령을 이용하지 않고 Keystore파일을 생성할 수 있어서 활용해 보았다.

스크린샷 2013-05-19 오후 9.41.04

 

Create New Keystore를 선택하고, keystore 파일명 및 경로 설정, 암호를 지정해준다.

스크린샷 2013-05-19 오후 9.41.47

 

생성하려는 Key에 대한 정보를 입력한다.
필수 입력 사항은 아래와 같이 , 별칭(alias) 암호 및 유효기한(Validity), 사용자명(First and Last Name)이다.

스크린샷 2013-05-19 오후 9.42.25

별칭은 키 종류에 따라 다음과 같이 나뉘어진다.

디버그용 키 : androiddebugkey
배포키 : androes

Next  버튼을 눌러서, 생성하려는 apk 파일 경로를 지정해주고 Finish 버튼을 누르면 앞서 지정했던 Keystore 파일 경로에 Keystore 파일이 생성된다.

Keystore 파일 하나에 디버그용과 배포용 별칭 두가지 모두 가질 수 있다.
만약 위와 같이 배포키로 생성하였다면, 위 절차를 반복하면서 생성해둔 keystore파일 경로를 동일하게 지정하고, 별칭을 디버그용(androiddebugkey)으로 변경하여 finish버튼을 누르면  keystore에 두가지 종류의 키를 모두 가지게 된다.

또는 다음과 같이 커멘드 상에서도 작업할 수 있다.

윈도우의 경우, command 창 실행
mac osx의 경우, 터미널 창에서 실행

앞서 생성해둔 keystore 파일의 경로로 이동한 뒤, 다음과 같은 명령을 입력한다.

keytool -genkey -v -keystore test.keystore -alias androiddebugkey -keyalg RSA -validity 10000

 

SHA1 지문 가져오기

다음의 명령을 커맨드 창에서 입력하면 keystore 내용을 확인할 수 있다.

명령어 : keytool -list -v  -keystore test.keystore

Keystore 유형: JKS
Keystore 공급자: SUN

Keystore에는 2 항목이 포함되어 있습니다.

별칭 이름: androes
작성일: keyStore.getCreationDate(alias)
항목 유형: PrivateKeyEntry
인증서 체인 길이: 1
인증서[1]:
소유자: CN=test
발급자: CN=test
일련 번호: 5198c96b
유효 기간 시작: Sun May 19 21:45:31 KST 2013 끝: Tue May 12 21:45:31 KST 2043
인증 지문:
MD5:  A8:DE:80:28:FE:AC:BC:73:9C:31:E3:36:E7:3F:1D:67
SHA1: 76:1D:26:03:CE:4F:68:4C:79:73:5A:C8:86:99:92:24:7D:66:50:48
서명 알고리즘 이름: SHA1withRSA
버전: 3

*******************************************
*******************************************

별칭 이름: androiddebugkey
작성일: keyStore.getCreationDate(alias)
항목 유형: PrivateKeyEntry
인증서 체인 길이: 1
인증서[1]:
소유자: CN=Test, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown
발급자: CN=Test, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown
일련 번호: 5198cbfa
유효 기간 시작: Sun May 19 21:56:26 KST 2013 끝: Thu Oct 04 21:56:26 KST 2040
인증 지문:
MD5:  4D:10:FE:24:51:A8:15:1D:DA:F6:58:8B:40:BC:B6:68
SHA1: 4F:E7:E7:83:F2:CB:46:ED:75:21:76:AD:99:03:DC:87:8E:A1:37:3E
서명 알고리즘 이름: SHA1withRSA
버전: 3

*******************************************
*******************************************

별칭에 따라서 SHA1 값을 각각 확인 할 수 있다. 해당 값을 복사해 둔 뒤 키 발급에 사용한다.

 

Android Maps API V2 키 발급 받기

Google APIs console : http://code.google.com/apis/console

위 사이트로 이동하여 로그인 후 아래의 절차를 거쳐 키를 발급받는다.

 

1. Services 메뉴를 선택 한다.

스크린샷 2013-05-19 오후 9.31.32

2. Google Maps Android API V2 를 선택한다.

스크린샷 2013-05-19 오후 9.32.12

 

3. 메뉴에서 API Access를 선택한다.

스크린샷 2013-05-19 오후 9.33.01

 

4. Create new Android Key 버튼을 클릭하면 아래와 같은 창이 열린다.

스크린샷 2013-05-19 오후 9.33.14

 

5. 창 가운데에 앞서 복사해 둔 SHA1키와 함께 적용하려는 프로젝트의 패키지명을 다음과 같은 방식으로 입력하여,  Create 버튼을 누른다.

4F:E7:E7:83:F2:CA:46:EE:75:21:76:AD:99:03:DC:87:8E:A1:37:3E;com.test.test

디버그용과 배포용 SHA1 값으로 두가지 api key를 생성해둔다.

6. 생성된 API Key를 복사하여, 적용하려는 프로젝트의 매니페스트 파일에 사용할 수 있다. 디버그 시에는 디버그용 키를, 배포할 때는 배포용 키로 변경하도록 한다.

 2016년 기준으로 업데이트된 내용으로 새로 포스트를 작성했습니다. 


2012년 12월 4일, Google Play Services가 업데이트되면서 새 버전의 안드로이드용 API가 공개되었습니다.

주요 변경사항은 다음과 같습니다.


  • MapFragment 지원으로 다양한 해상도의 단말 지원 용이 (MapActivity가 아닌 일반 액티비티에서도 MapView 사용가능)
  • 3D맵 지원
  • 한층 편리해진 마커 사용법

이와 함께, 구글맵 API를 사용하기 위한 인증 및 사용 절차가 다소 변경되었습니다. 이 포스트에서는 새로운 구글맵 API를 사용하는 방법에 대해 자세히 알아보도록 하겠습니다.


구글맵 API를 사용하기 위한 단계를 간략히 요약하면 다음과 같습니다.


1. Android SDK Manager를 통해 Google Play Services SDK 다운로드 (Rev.3 이상)

2. 새 프로젝트 생성 및 구글맵 라이브러리 프로젝트를 Workspace로 가져오기

3. 구글맵 인증키(API Key) 획득에 필요한 keystore/key fingerprint 획득

4. 구글맵 인증키 발급

5. 구글맵을 사용할 프로젝트의 매니페스트 설정

6. 레이아웃에 구글맵 추가하기



1. Google Play Services SDK 다운로드


Android SDK Manager를 실행한 후, 아래의 Extra 카테고리에서 Google Play Services 패키지를 설치합니다.

Revision(Rev.) 3 이상이여야 하며, 설치가 완료되면 다음과 같이 Installed로 표시됩니다.




2. 새 프로젝트 생성 및 구글맵 라이브러리 프로젝트 가져오기


기존의 구글맵 라이브러리가 시스템 이미지(Android X.X / Google APis로 구분)에 포함되어 있었던 것과 달리, 이번 버전부터는 별도의 라이브러리 프로젝트로 제공됩니다. 때문에 이를 사용하려면 이클립스 내 자신의 Workspace로 구글맵 라이브러리 프로젝트를 불러와야 합니다.


이클립스의 메뉴에서 File > New > Other...를 선택한 후, Android Project from Existing Code를 선택합니다.




다음, Root Directory에 구글맵 라이브러리 프로젝트가 있는 폴더를 지정해줍니다. 구글맵 라이브러리 프로젝트는 다음 경로에 저장되어 있습니다.


[안드로이드 SDK경로]/extras/google/google/google_play_services/libproject/google-play-services_lib


여러 사람과 함께 작업해야 하는 프로젝트일 경우, 라이브러리 프로젝트를 참조할 때 Workspace에 상대적인 경로를 사용하여 참조하도록 해야 하므로 Copy project into workspace에 체크해줍니다. 




다음과 같이 Workspace에 Google Play Services 라이브러리 프로젝트가 추가됩니다.




이제 새 프로젝트를 생성한 후, 위에서 추가한 라이브러리 프로젝트를 참조하도록 설정할 차례입니다. 프로젝트를 생성한 후, 프로젝트 속성 창(프로젝트 이름 오른쪽클릭 - Properties)을 열어 왼쪽 탭에서 'Android' 항목을 선택한 후 우측 하단의 'Library' 영역에서 'Add...' 버튼을 눌러 google-play-services_lib를 선택합니다.




다음과 같이 표시되면 제대로 설정된 것입니다.


이것으로 기본적인 프로젝트 설정은 끝났습니다.


3. 구글맵 인증키 발급에 필요한 keystore/key fingerprint 획득


구글맵을 사용하려면 인증키(API Key)를 발급받아야 합니다. 애플리케이션 패키지 (*.apk)생성시 사용하는 서명 정보(key)를 사용하여 인증을 수행하게 되며, 버전1에서는 MD5 지문을 사용했는데 이번 버전부터는 SHA1 지문을 사용하도록 변경되었습니다.


용어정리


애플리케이션 서명 : 

애플리케이션을 배포할 때, 개발자는 애플리케이션을 패키지(*.apk) 형태로 만들게 됩니다. 이 때, 이 패키지를 '누가' 패키징했는지 정보를 기록하게 되는데, 이를 '애플리케이션 서명' 이라 합니다. 이는 애플리케이션이 배포된 이후 악의적인 목적으로 리패키징(애플리케이션 내용물을 변조한 후 다시 패키징하는 것)했을 때, 이를 원본과 구분하기 위해 사용합니다.


keystore/key : 

애플리케이션 서명을 위해 사용하는 수단으로, 자신의 '서명' 이라 할 수 있습니다. 서명은 'key'로 하게 되며, keystore는 서명을 할 수 있는 key들을 담을 수 있는 파일을 뜻합니다. 이클립스를 통한 개발시 기본으로 디버그용 키를 사용하여 애플리케이션 패키지를 서명하게 되며, 안드로이드 마켓 등 외부로 애플리케이션을 배포할 때는 자신의 키를 사용하여 서명한 후 배포해야 합니다. (안드로이드 마켓의 경우 최초 애플리케이션 업로드시 사용한 키를 잃어버리면 더 이상 애플리케이션을 업데이트할 수 없습니다)


(MD5/SHA1)지문 : 

각 서명을 고유하게 식별할 수 있는 고유한 문자열로, 문자열을 생성하는 알고리즘에 따라 MD5, SHA1 지문으로 구분됩니다.


이클립스를 통해 개발을 하게되면, 기본값으로 디버그용 키를 통해 애플리케이션 패키지를 서명하게 됩니다. 때문에, 구글맵을 사용하는 애플리케이션을 테스트하려면 배포시 사용할 키 뿐만 아니라 디버그용 키 또한 등록해 주어야 합니다.


먼저, 디버그용 키의 지문을 얻기 위해 디버그용 키가 저장되어 있는 곳으로 이동합니다. 명령 프롬프트/터미널을 실행한 후, 운영체제에 따라 각각 다음의 경로로 이동합니다.


Windows XP : C:\Documents And Settings\[사용자 계정]\.android

Windows Vista/7 : C:\Users\[사용자 계정]\.android

OSX/Linux : ~/.android


다음, 아래의 명령을 입력하여 디버그용 키의 지문을 조회합니다.


keytool -list -v -keystore debug.keystore -alias androiddebugkey -storepass android -keypass android


다음과 같이 인증서 지문이 표시됩니다. 여기에서 우리가 필요한 것은 인증 지문 항목 중 SHA1 항목입니다. 이 정보를 복사해둡니다.



4. 구글맵 인증키 발급받기


이제 구글지도 API 키를 발급받기 위해 Google APis Console(https://code.google.com/apis/console/)로 이동합니다. Google APIs Console에서는 프로젝트별로 사용하는 구글 API를 관리할 수 있도록 되어있습니다. 아직 프로젝트가 없다면 왼쪽의 드롭다운 메뉴에서 Create...를 눌러 새 프로젝트를 생성합니다. 저는 'AndroidMapsV2'라는 이름으로 프로젝트를 생성해 보겠습니다.



프로젝트를 생성하면 활성화할 서비스 목록이 표시됩니다. 목록에서 Google Maps Android API v2를 찾아 활성화해줍니다.




다음, 왼쪽 탭에서 API Access를 선택한 후 Simple API Access 항목에 Create new Android key...를 선택합니다.




이제 여기에 이전에 조회한 SHA1 지문과 애플리케이션의 패키지 이름을 다음과 같은 형식에 맞춰 입력합니다. 


[SHA1지문];[애플리케이션 패키지 이름]


여기에서는 com.androidhuman.example.mapsv2example 이라는 애플리케이션에서 구글맵을 사용하도록 하는 것을 가정하여 입력해 보았습니다.




Create 버튼을 누르면 다음과 같이 API Key가 발급됩니다.


5. 구글맵 사용을 위한 매니페스트 설정


매니페스트에서 추가해야 할 항목들은 다음과 같습니다.


- OpenGL 2.0 이상을 지원하는 단말기에서 실행되도록 하기 (Uses feature)

- 애플리케이션의 Meta-data에 구글맵 API Key 추가

- 구글맵의 정상적인 사용을 위한 권한 추가


OpenGL 2.0 이상을 지원하는 단말기에서 실행되도록 하기


이번 버전의 구글맵이 OpenGL 2.0을 사용하게 됨에 따라, 이를 이원하지 않는 단말기에서는 구동할 수 없습니다. 때문에 매니페스트에 이를 지원하는 단말기에서는 설치가 되지 않도록 별도의 설정을 해 주어야 합니다.


AndroidManifest.xml을 연 후, Manifest 탭 하단의 Manifest Extras 영역을 찾아봅니다.




다음, Add...를 눌러 Uses Feature를 선태한 후, 다음과 같이 입력합니다.



Meta data로 구글맵 API 및 Play Services 버전 추가하기


매니페스트의 'Application' 탭을 선택한 후, Application Nodes 항목에서 Add...버튼을 누른 후 Meta Data를 선택합니다.

그 다음, Name과 Data에 다음과 같이 입력합니다.


Name : com.google.android.maps.v2.API_KEY

Value : 발급받은 구글맵 API Key



같은 방법으로, 사용하는 Play Services의 버전도 추가해주어야 합니다. 다음 값을 추가해줍니다.


Name : com.google.android.gms.version

Value : @integer/google_play_services_version


권한 추가하기


구글맵 데이터를 받아오기 위해 필요한 권한을 추가합니다. 먼저, API Key와 연동하여 구글맵 데이터를 받아올 수 있는 권한을 생성하고 추가해야 합니다.


다음의 권한들을 Uses Permission 으로 추가해줍니다.


  • android.permission.INTERNET
  • android.permission.ACCESS_NETWORK_STATE
  • android.permission.WRITE_EXTERNAL_STORAGE
  • com.google.android.providers.gsf.permission.READ_GSERVICES
  • android.permission.ACCESS_COARSE_LOCATION
  • android.permission.ACCESS_FINE_LOCATION



6. 레이아웃에 구글맵 추가하기


이제 레이아웃에 구글맵을 추가할 차례입니다. 이전 버전의 구글맵에서는 구글맵을 표시하려면 MapActivity를 사용해야 했지만, 이번 버전부터는 Fragment 형태로 구글맵이 지원되어 어느 곳에서나 쉽게 구글맵을 사용할 수 있습니다.


프래그먼트 형태로 제공되는 구글맵을 사용하려면 레이아웃에 다음과 같이 선언해주면 됩니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<p><?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
     
    <fragment
        android:id="@+id/map"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        class="com.google.android.gms.maps.MapFragment" />
     
 
</LinearLayout></p>


애플리케이션을 실행하면 다음과 같이 지도가 표시되는 것을 확인할 수 있습니다.




강좌에서 사용한 예제 프로젝트 파일을 첨부하였으니 자세한 사항은 프로젝트 파일을 참고하시면 됩니다. ;)

예제 프로젝트를 테스트할 때, API Key를 꼭 자신이 발급받은 것으로 교체하고, 애플리케이션을 Google APIs Console에 등록했는지 확인 후 진행해주세요!



변경 이력

2013.11.14 : 필요 권한 및 meta-data 수정 (Google Play Services 업데이트), 예제 업데이트











MapView 세팅에 대해서 보고 혹시 import com.google.android.maps.MapActivity에 서 에러 나면 해결 방법에 대해서 안나와 있다. 
두 가지 방법이 있다.

1) 안드로이드 빌드 타겟을 바꿔주기
project에서 오른쪽 마우스 클릭 해 properties로 들어 간 다음 Android로 들어가 Android 2.1-update로 처음에 만들었던 것을 Google API로 바꿔 주었다. 그러면 Google API에 maps.jar가 생성 된다.

2) Build Path를 등록 해주기
project에서 오른쪽 마우스 클릭 해 build path -> configure build path -> Java Build Path -> libraries
 
두 번째 방법은 에러 메시지는 없어지지만, 프로그램을 실행하면 에러 나는 것을 볼 수 있다. 차이는 Google API로 등록하면 Google APIs에 maps.jar이 자동 생성 되어 있는 것이고, Build path에서는 밖에 (src, gen 와 같은 위치)에 나와 있는 차이이다. 

설정을 어떻게 해주냐에 따라 차이라고 생각을 하지만, 두 번째 방법으로 하면은 컴파일은 되어도 프로그램이 실행이 되지 않는다....












반응형