티스토리 뷰

안드로이드

안드로이드 - 구글맵 기본사용법

쉬엄쉬엄하자 2020. 2. 1. 15:58
728x90

안드로이드 스튜디오에서 구글맵 라이브러리를 연동하여 지도를 띄우는 방법에 대해 정리해보겠습니다.

 

우선 구글계정이 필요합니다. 회원가입후 GCP 콘솔로 이동합니다.

상단에서 구글맵 라이브러리를 적용할 프로젝트를 선택합니다. 만약 프로젝트가 하나도 없다면 생성해야합니다.

위 표시를 해놓은 프로젝트 부분을 선택하면 이 사진과 같은 팝업창이 하나 뜨는데요. 여기서 우측 상단의 새 프로젝트를 눌러 생성할 수 있습니다. 프로젝트 이름은 자유롭게 작성해주시고 회사명은 필수사항이 아니니 입력해주지 않으셔도 무방합니다. 저는 현재 담당하여 진행중인 AcademyService 프로젝트에서 진행해보겠습니다.

 

프로젝트를 선택하였다면 우측 상단의 메뉴를 열고 API를 선택합니다.

 

이제 구글맵을 프로젝트에 추가하기 위해 API 및 서비스 사용 설정을 눌러줍니다.

그다음 검색창을 통해 Maps SDK for Android를 찾아 선택하겠습니다.

 

구글 맵을 선택하면 다음과 같은 화면이 나오는데 여기서 표시한 파란버튼에 여러분들은 추가라고 쓰여져 있을겁니다. 저는 이미 프로젝트에 추가된 상태이기 때문에 추가가 아닌 관리라고 되어있습니다. 버튼을 눌러 추가해줍니다.

 

이제 이 프로젝트를 특정 앱에서만 활용할 수 있도록 설정해야 합니다. 만약 이러한 설정없이 나중에 API키가 노출 되었을 경우 무단으로 본인의 API를 계속해서 사용하여 해킹뿐만 아니라 요금이 발생할 수 있습니다.

추가버튼 자리에 있던 관리버튼을 눌러 관리자 화면으로 이동합니다.

 

 

관리자 화면에서 3개의 탭중 가장 오른쪽의 사용자 인증정보를 선택합니다. 새로 라이브러리를 적용한 상태기 때문에 아직 어떤 사용자 인증키도 없을것입니다. 새로운 사용자 인증 정보 키를 생성하여야 합니다.

링크가 걸려있는 API 및 서비스의 사용자 인증 정보를 선택합니다. 화면을 이동하면 상단의 사용자 인증 정보 만들기 버튼이 있습니다. 해당 버튼을 누르면 3종류의 키가 있는데 이 중 API키를 선택하여 키를 생성합니다.

키를 생성하면 사진과 같이 하나의 API키가 생성되어야 합니다. 해당 키의 우측의 연필 아이콘을 눌러 특정 앱애서만 해당 API키를 사용할 수 있도록 설정해보겠습니다.

위에서 우선 android앱을 선택하고 제한사항 규칙을 만들어야합니다. 아래의 항목 추가를 눌러 제한규칙을 생성합니다.

패키지 이름과 SHA 인증서 지문을 입력하라고 나올것입니다. 패키지 이름은 여러분이 개발하고 있는 안드로이드 앱의 패키지명을 입력하면 되고 SHA 인증서 지문은 이제 어떤 작업을 해줘야 얻을 수 있는데요.

 

우선 윈도우의 cmd 콘솔창을 실행합니다. 

그리고 C:\Program Files\Android\Android Studio1\jre\bin 디렉토리로 경로를 이동합니다.

해당 디렉토리로 이동을 하면 keytool.exe 라는 프로그램이 있습니다.

keytool -list -v -keystore "%USERPROFILE%\.android\debug.keystore" -alias androiddebugkey -storepass android -keypass android

해당 명령어를 입력하여 keytool을 실행하면 안드로이드 앱에 대한 SHA인증서 지문을 얻을 수 있습니다.

 

인증서 지문중 2번째에 있는 SHA1을 확인하고 복사해줍니다.

 

다시 구글 콘솔로 돌아와 패키지명과 얻은 SHA인증서 지문을 입력하고 제한 규칙 생성을 마칩니다.

그 후 하단의 저장을 누르면 현재 API키에대한 설정이 완료됩니다.

 

이제 구글맵을 사용할 준비는 마쳤습니다. 이제 안드로이드 스튜디오로 이동하여 구글지도를 띄워보도록 하겠습니다.

안드로이드 앱에서 구글맵을 사용하기 위해선 몇가지 설정을 해주어야 합니다.

 

우선 메니페스트 파일에 다음과 같은 코드를 추가합니다.

<meta-data
   android:name="com.google.android.geo.API_KEY"
   android:value="API키" />

API키는 콘솔에서 제한 규칙을 적용했던 것의 키를 복사하여 입력합니다.

 

그 뒤 구글 플레이 서비스를 다운받아야합니다. 안드로이드 스튜디오에서 상단 탭중 Tools->SDK Maneger 선택

팝업창에서 두번째에 있는 SDK Tools를 선택하고 Google Play Services를 다운받아줍니다. 만약 이전에 다운받은적이 있다면 이미 체크표시가 되어있을 것입니다. 이럴 경우 다운로드를 하지 않아도 됩니다.

 

 

그 다음은 앱의 gradle파일에 Google Play Service를 추가 해줘야합니다. gradle파일으 dependencies에 다음 코드를 추가해줍니다.

 

    implementation 'com.google.android.gms:play-services-maps:17.0.0'
    implementation 'com.google.android.gms:play-services-location:17.0.0'

추가해주면 상단의 노란 안내 문구가 뜰 것입니다. 여기서 sync now를 눌러 수정된 gradle파일을 적용시켜줍니다.

만약 오류가 생긴다면 app의 gradle이 아닌 프로젝트의 gradle파일에 추가 한것이 아닌지 확인해보시기 바랍니다.

 

이제 구글맵을 띄어줄 액티비티의 xml파일에 다음과 같은 코드를 추가해줍니다.

    <fragment
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/googleMap"
        tools:context=".MapsActivity"
        android:name="com.google.android.gms.maps.SupportMapFragment" />

여기서 수정가능한 부분은 id뿐입니다.  width와 heigt를 수정하여도 무방하지만 보통 지도는 화면에 맞춰 보여주기 때문에 수정할 일이 없을 거라 생각합니다.

 

그 다음 지도를 생성할 액티비티 클래스를 수정합니다. 구글 지도를 생성할 액티비티는 OnMapReadyCallback 인터페이스를 구현해야 합니다.

그리고 해당 인터페이스의 public void onMapReady(final GoogleMap) 메소드를 오버라이딩 해야합니다.

이 메서드는 지도를 생성할 준비가 되었을 때 사전작업할 코드를 구현합니다. 코드의 예시는 다음과 같습니다.

public class MainActivity extends AppCompatActivity
        implements OnMapReadyCallback {

    private GoogleMap googleMap;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
                .findFragmentById(R.id.googleMap);
        mapFragment.getMapAsync(this);
    }

    @Override
    public void onMapReady(final GoogleMap googleMap) {

        this.googleMap = googleMap;

    }

}

저는 어떠한 작업없이 액티비티에 지도 변수에 현재 생성된 지도 인스턴스를 저장하였습니다.

여기까지 한 후 실행하면 앱에 정상적으로 지도가 생성 될 것입니다.

만약 지도가 생성되지 않고 빈화면만 있다면 아직 API키에 제한 규칙이 적용되지 않았거나 실행한 디바이스 혹은 가상 에뮬레이터의 구글 플레이 서비스 버전이 안맞았을 수도 있습니다. 

 

다음에는 마커를 활용하는법에 대해 다뤄보겠습니다.

 

잘 되지 않으신분은 댓글로 질문 남겨주시고 한분 한분 정성껏 답변 드리도록 하겠습니다. 

댓글