1. API Key 획득 및 적용
- 구글 지도 API를 사용하려면 자신의 앱을 인증할 수 있는 API Key가 필요하다. API Key는 앱 정보를 구글에 등록하면 발급 받을 수 있다.
(1) 앱 서명용 인증서 위치 확인
앱을 빌드할 때, 빌드를 수행한 주체를 확인하는 서명(Signing)을 수행한다. 이 때 사용한 서명 정보를 통해 앱이 올바른 곳에서 빌드되었는지 확인이 가능하다.
구글 지도 API에서는 API의 무분별한 사용을 방지하기 위해 앱을 서명할 때 사용하는 서명을 기반으로 API Key를 발급한다. 따라서, 사전에 구글에 등록한 서명으로 서명된 앱이 아닐 경우 지도 API를 사용할 수 없다.
앱 서명시 사용하는 인증서 종류로는 일반적으로 디버그(Debug)와 릴리즈(Release) 두가지가 있으며, 디버그 인증서는 일반적으로 개발 환경을 설치했을 때 기본으로 제공되는 인증서를 사용한다.
* 디버그 용 인증서 기본 경로
- Windows : C:\Users\{사용자계정}\.android\debug.keystore
- OS X, Linux : ~/.android/debug.keystore
(2) SHA-1 지문 얻기
서명에 사용하는 인증서를 구분하기 위해 인증서의 모든 내용을 등록할 필요는 없다(나는 이름만 넣음). 대신, 인증서의 SHA-1 지문을 등록한다.
인증서의 SHA-1 지문을 얻기 위해 명령 프롬프트(Windows) 혹은 터미널(OS X, Linux)를 열어 다음 명령어를 입력한다.
[Windows]
keytool -list -v -keystore C:\Users\gwang\.android/debug.keystore -alias androiddebugkey -storepass android -keypass android
[OS X, Linux]
keytool -list -v -keystore "%USERPROFILE%\.android\debug.keystore" -alias androiddebugkey -storepass android -keypass android
위 명령을 실행하면 다음과 유사한 결과가 표시된다.(그림은 내가 실행했을 때 나온 화면)
(3) Google API 프로젝트 생성
구글 지도 API를 사용하려면 Google API 콘솔에 새 프로젝트를 추가해야 한다.
Google Maps Android API용 프로젝트 등록 페이지로 접속해서 새 프로젝트 만들기를 한다.
필요한 사용자 인증 정보의 종류에 Google Maps Android API를 선택하고, API를 호출할 위치로 Android를 선택한다.
(4) 인증 정보 입력
인증 정보를 입력하라는 창이 나온다. 이름은 API를 구분할 수 있게 적절한 이름으로 정하고, 패키지 이름은 자신이 적용할 앱의 패키지 풀 네임을, 인증서 지문은 위 과정에서 받은 SHA1 지문을 넣고 생성버튼을 누르면 API Key가 생성된다.
2. 앱에 구글 지도 API 적용하기
- 원하는 설정으로 새 프로젝트를 생성한다.
(1) 구글 플레이 서비스 라이브러리 추가
구글 지도 API를 사용하려면 구글 플레이 서비스(Google Play Services)를 라이브러리로 추가해야 한다.
Application Module의 빌드스크립트(build.gradle)을 열어 dependencies 항목에 compile 'com.google.android.gms:play-services-maps:{플레이 서비스 버전}' 을 입력한다.
dependencies {
...
compile 'com.android.support:appcompat-v7:24.1.1'
compile 'com.google.android.gms:play-services:9.4.0' // 추가
}
변경 후 동기화를 한다(Sync).
만약 플레이 서비스 라이브러리를 찾을 수 없다는 오류가 발생하면 SDK Manager를 실행하여 Google Repository 가 설치되어 있는지 확인 후, 설치되어 있지 않다면 설치 후 다시 시도해본다.
(2) 문자열 리소스에 지도 API 키 추가하기
사용하는 방식에 따라 디버그와 릴리즈 빌드에 사용하는 API Key를 별도로 지정할 수 있고, 하나의 API Key를 모든 빌드에 사용할 수도 있는데, 이 글은 각 빌드 별로 다른 API Key를 사용하는 경우로 가정한다.
Application Module의 빌드스크립트(build.gradle)을 열어 buildTypes 항목에 다음을 입력한다.
buildTypes {
release {
...
// 배포용 KEY
resValue "string", "google_maps_key", "{API_Key 입력}"
}
debug {
...
// 개발용 KEY
resValue "string", "google_maps_key", "{API_Key 입력}"
}
}
변경 후 동기화를 한다(Sync).
위에서 추가한 지도 API 키는 매니페스트 파일에 선언해야 한다.
매니페스트 파일을 연 후, <application> 태그 내 <meta_data> 내에 지도 API키를 선언한다.
<manifest>
<application>
...
<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="@string/google_maps_key" />
<activity... />
</application>
</manifest>
(3) 레이아웃 설정
화면 전체에 지도를 표시하는 레이아웃을 작성한다. SupportMapFragment를 사용한다.
[activity_maps.xml]
<fragment android:id="@+id/map"
android:name="com.google.android.gms.maps.SupportMapFragment"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" />
(4) 엑티비티 설정
레이아웃을 설정하는 것 외에 엑티비티에서 추가로 설정해야 할 항목은 없다.
[MapsActivity.java]
public class MapsActivity extends FragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_maps);
}
}
ref) http://kunny.github.io/lecture/maps/2016/04/03/google_maps_android_v2_2016/