/ GOOGLE MAPS, ANDROID

(2016년 판) Google Maps Android API v2 사용해보기

구글 지도 안드로이드 API V2가 출시 후 꽤 오랜 시간이 지나면서, 앱에 이를 적용하는 방법이 다소 바뀌었습니다.

바뀐 방법에 맞게 지도 API를 적용하는 방법을 알아보겠습니다.

API Key 획득 및 적용

구글 지도 API를 사용하려면 자신의 앱을 인증할 수 있는 API Key가 필요합니다. API Key는 앱 정보를 구글에 등록하면 발급받을 수 있습니다.

앱 서명용 인증서 위치 확인

애플리케이션을 빌드할 때, 빌드를 수행한 주체를 확인하기 서명(Signing)를 수행합니다. 이 때 사용한 서명 정보를 통해 앱이 올바른 곳에서 빌드되었는지 확인이 가능합니다.

구글 지도 API에서는 API의 무분별한 사용을 방지하기 위해 애플리케이션을 서명할 때 사용하는 서명을 기반으로 API Key를 발급합니다. 따라서, 사전에 구글에 등록한 서명으로 서명된 앱이 아닐 경우 지도 API를 사용할 수 없습니다.

앱 서명시 사용하는 인증서 종류로 일반적으로 디버그(debug)릴리즈(release) 두 가지가 있으며, 디버그 인증서는 일반적으로 개발 환경을 설치했을 때 기본으로 제공되는 인증서를 사용합니다.

기본으로 제공되는 디버그 인증서가 저장되어 있는 위치는 다음과 같습니다.

  • Windows: C:\Users\{사용자 계정 이름}\.android\debug.keystore
  • OS X, Linux: ~/.android/debug.keystore

SHA-1 지문 얻기

서명에 사용하는 인증서를 구분하기 위해 인증서의 모든 내용을 등록할 필요가 없습니다. 대신, 인증서의 SHA-1 Fingerprint(지문)을 등록합니다.

인증서의 SHA-1 지문을 얻기 위해 명령 프롬프트(Windows) 혹은 터미널(OS X, Linux)를 열어 다음 명령어를 입력합니다.

Windows

keytool -list -v -keystore ~/.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

위 명령을 실행하면 다음과 유사한 결과가 표시될 것입니다.

Alias name: androiddebugkey
Creation date: Aug 17, 2014
Entry type: PrivateKeyEntry
Certificate chain length: 1
Certificate[1]:
Owner: CN=Android Debug, O=Android, C=US
Issuer: CN=Android Debug, O=Android, C=US
Serial number: 75acba63
Valid from: Sun Aug 17 20:48:53 KST 2014 until: Tue Aug 09 20:48:53 KST 2044
Certificate fingerprints:
	 MD5:  B0:31:99:FB:EC:06:B2:89:16:ED:73:3A:5B:88:BC:9C
	 SHA1: 6C:C0:12:BC:39:A6:70:F5:AA:3F:83:D7:11:C4:D9:20:5A:CB:A1:EB
	 SHA256: 95:FE:66:61:5A:11:86:69:90:7D:63:82:2E:A9:D2:B0:38:21:F6:91:BC:F8:33:D2:64:5A:E9:A8:5F:37:A5:21
	 Signature algorithm name: SHA256withRSA
	 Version: 3

인증서의 SHA-1 지문은 위 결과 내 Certificate fingerprints 항목에서 찾을 수 있습니다. (6C:C0:12:BC:39:A6:70:F5:AA:3F:83:D7:11:C4:D9:20:5A:CB:A1:EB)

Google API 프로젝트 생성

구글 지도 API를 사용하려면 Google API 콘솔에 새 프로젝트를 추가해야 합니다.

Google Maps Android API용 프로젝트 등록 페이지로 접속하면 다음과 같이 프로젝트를 생성하거나, 기존에 생성한 프로젝트를 선택할 수 있는 화면이 표시됩니다.

Google APIs console

‘계속’ 버튼을 누르면 사용자 인증 정보 마법사가 수행됩니다. 다음과 같이 Android를 선택한 후, ‘아떤 사용자 인증 정보가 필요한가요’ 버튼을 누르면 사용자 인증 정보를 입력하는 단계로 전환됩니다.

Google APIs auth 1

인증 정보 입력

Android API Key를 생성하는 화면입니다. 이름은 적절히 지정하시고, 아래의 ‘패키지 이름 및 지문 추가’ 버튼을 누르면 항목을 입력할 수 있는 필드가 추가됩니다.

여기에 구글 지도 API를 사용할 애플리케이션의 패키지 이름과 서명에 사용할 인증서의 지문을 입력합니다. 서명시 사용하는 인증서의 수에 따라 다수를 입력하는 것도 가능합니다. (디버그용 인증서, 릴리즈용 인증서 등)

Google APIs auth 2

‘생성’ 버튼을 누르면 다음과 같이 API Key가 생성됩니다.

Google APIs auth 3

애플리케이션에 구글 지도 API 적용하기

구글 지도 API를 사용하기 위한 사전 준비는 모두 끝났으니, 이제 애플리케이션에 API를 적용해 볼 차례입니다. 먼저, 원하는 설정으로 새 프로젝트를 생성합니다.

구글 플레이 서비스 라이브러리 추가

구글 지도 API를 사용하려면 구글 플레이 서비스(Google Play Services)를 라이브러리로 추가해야 합니다.

애플리케이션 모듈의 빌드스크립트(build.gradle)을 열어 dependencies 항목에 compile 'com.google.android.gms:play-services-maps:{플레이 서비스 버전}'을 입력합니다.

[app/build.gradle]

apply plugin: 'com.android.application'

android {
	...
}

dependencies {
    ...
    compile 'com.android.support:appcompat-v7:23.2.1'
    compile 'com.google.android.gms:play-services-maps:8.4.0' // 추가
}

라이브러리를 추가한 후, 새 설정을 반영하기 위해 그래들 스크립트와 프로젝트 동기화를 수행합니다. (Tools > Android > Sync Project with Gradle Files)

만약 플레이 서비스 라이브러리를 찾을 수 없다는 오류가 발생하면 SDK Manager를 실행하여 다음과 같이 Google Repository가 설치되어 있는지 확인 후, 설치되어 있지 않다면 설치 후 다시 시도해보세요.

SDK Manager - Google Repository

문자열 리소스에 지도 API 키 추가하기

API Key를 별도의 문자열 리소스 파일에 저장하면 보다 효율적으로 키를 관리할 수 있습니다.

사용하는 방식에 따라 디버그와 릴리즈 빌드에 사용하는 API Key를 별도로 지정할 수도 있고 하나의 API Key를 모든 빌드에서 사용할 수도 있는데, 여기에서는 각 빌드별로 다른 API Key를 사용하는 경우를 가정합니다.

디버그와 릴리즈 빌드에 다른 API Key를 지정하려면 동일한 이름의 문자열 리소스에 빌드 타입 별로 다른 값을 지정하면 됩니다.

먼저, src 디렉토리 하위에 다음과 같이 debugrelease 디렉토리를 생성한 후 각각의 하위에 google_maps_api.xml이라는 이름으로 파일을 추가합니다.

다음, 각 파일에 google_maps_key라는 이름으로 리소스를 추가한 후 debug 디렉토리 하위에는 디버그용 API Key를, release 디렉토리 하위에는 릴리즈용 API Key를 적어줍니다.

API Key는 다른 프로젝트나 모듈에 포함되어 있는 리소스를 처리하는 과정에서 값이 변경되면 안 되므로 templateMergeStrategypreserve로 설정하며, 다국어 지원이 필요한 문자열이 아니므로 translatablefalse로 지정합니다.

<resources>
    <string name="google_maps_key" templateMergeStrategy="preserve" translatable="false">AIzaxxxxxxxxxxxxxxxxxx</string>
</resources>

매니페스트에 API Key 설정

위에서 추가한 지도 API 키는 매니페스트 파일에 선언해야 합니다.

매니페스트 파일을 연 후, <application> 태그 내 <meta-data> 내에 지도 API 키를 선언합니다.

<manifest>
    <application>

    	<!-- 지도 API Key 선언 -->
        <meta-data
            android:name="com.google.android.geo.API_KEY"
            android:value="@string/google_maps_key" />

        <activity... />

    </application>
</manifest>

레이아웃 설정

화면 전체에 지도를 표시하는 레이아웃을 작성합니다. 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" />

액티비티 설정

레이아웃을 설정하는 것 외에 액티비티에서 추가로 설정해야 할 항목은 없습니다.

[MapsActivity.java]

public class MapsActivity extends FragmentActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_maps);
    }
}

테스트

이것으로 모든 작업이 끝났습니다. 모든 설정이 정상적으로 적용되었다면 앱 실행시 다음과 같이 전체 화면에 지도가 표시됩니다.

본 포스트에서 사용한 예제 프로젝트의 전체 소스 코드는 아래에서 확인 가능합니다.

kunny

커니

안드로이드와 오픈소스, 코틀린(Kotlin)에 관심이 많습니다. 한국 GDG 안드로이드 운영자 및 GDE 안드로이드로 활동했으며, 현재 구글에서 애드몹 기술 지원을 담당하고 있습니다.

Read More