태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.

Google Maps Android API v2 사용하기 (인증 및 초기설정, 지도 띄우기)

2016.04.08 12:27




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

http://kunny.github.io/lecture/maps/2016/04/03/google_maps_android_v2_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 형태로 구글맵이 지원되어 어느 곳에서나 쉽게 구글맵을 사용할 수 있습니다.


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

<?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>


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




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

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



변경 이력

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






저작자 표시 비영리 변경 금지
신고
크리에이티브 커먼즈 라이선스
Creative Commons License

커니 위치 기반 서비스 사용하기/구글 지도 (Google Maps) , , , , , ,

  1. 이전 댓글 더보기
  2. Blog Icon
    soul214

    안녕하십니까?? 안드로이드 공부 시작하고 나서부터 블로그에서 글 잘 읽고 도움 많이 받고 있습니다.

    공부하던 중에 gps 관련 코딩 부분이 있어서 따라하던 중에 궁금한 점이 생겨서 질문드립니다!

    인터넷에서 찾아 봤지만 정확히 이해를 못하겠습니다;;

    기본적인 질문입니다만, 이번 글에서 맵을 띄우는 작업은 데이터 통신이나 wifi 연결이 되어 있지 않을 경우에는

    불가능한 것인가요??

    혹시 wifi나 데이터통신 없이 gps 만 가지고 현재 위치를 가져올 수 있는 방법 같은것이 있을까요??

    현재, 주변에 wifi도 없고, 데이터 통신 계약도 안 해놓은 넥서스7 가지고 개발 하는데 맵이 로딩되지 않아서 질문드립니다. ㅎ

  3. GPS 신호를 받는 것 자체는 가능합니다. 네트워크 지원 없이 순수 GPS신호만 잡는다면 신호를 잡기까지 약 10분정도 소요될 수 있습니다.
    또한, 지도를 로드하는 것은 데이터를 사용하기 때문에 네트워크에 연결되어 있지 않다면 지도가 표시되지 않는 것이 정상입니다.

  4. Blog Icon
    sdh

    포스팅따라 쉽게했어요 감사해요
    그런데 매니패스트에서 에러가 나는데
    <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />

    error: Error: No resource found that matches the given name (at 'value' with value '@integer/
    google_play_services_version').
    이런 에러가 납니다 어떻게해야할까요ㅠㅠ

  5. 구글 플레이 서비스 버전이 낮은 것 같습니다. 최신 버전으로 업데이트 해 보세요~~

  6. Blog Icon
    starseat

    앱 시작하면 바로 작동 중지 되는데.... 이류를 모르겠습니다.

    구글에서 프로젝트 생성하고
    apk key 생성할때 SHA1;package 명 을 입력하고 api key 를 발급 받았습니다.
    그 키를 매니패스트에서
    <meta-data android:value="발급받은 api key" android:name="com.google.android.maps.v2.API_KEY"/>
    외에 다른 퍼미션도 추가해줬습니다.
    layout 에서 main.xml 외에 fragment_main.xml 이라고 추가되고 이부분에 Hello world 찍는 부분이 있길래 이부분에
    <fragment .../> 태그를 추가하였습니다.
    그리고 메인은 냅두고 그대로 실행해 보니 안되더군요....
    혹시나 하고 fragment_main.xml 지우고 main.xml 을 커니 님께서 하신대로 긁어다가 붙였습니다.
    main activity.java 에서 새로 추가된 부분 모두 지우고 onCreate 부분만 냅두고요
    일단 맵이 안뜨길래
    extends Activity 를 하고 실행시켜보았으나 안되더라구요...
    혹시나 하고 extends FragmentActivity로 바꿔 보았지만 안됩니다....

    google-play-services_lib 추가 하였고,
    build target 도 혹시나 하고 3.1(12 level) 로 하였습니다.

    제 기기 android 버젼이 4.03 이라
    android project 의 미니멈 은 15로 하였고,
    google api 도 4.03 에 맞는 15level 로 하였습니다.

    이유를 모르겠는데... 어떻게 해야 될까요...

  7. Blog Icon

    비밀댓글입니다

  8. http://androidhuman.com/242 를 참고하여 에러 로그를 올려주세요.
    로그를 확인해야 무엇이 문제인 지 알 수 있습니다.

  9. Blog Icon
    starseat

    해결하였습니다!!
    해결하고 연휴를 즐기다 보니
    어디부분때문인지를 찾지못하였지만요...
    커니님 감사합니다!!!

  10. Blog Icon
    iprita

    안녕하세요. 좋은 가르침 정말정말 감사합니다.

    커니님께서 올려주신 구글맵 띄우기와

    가장기본적인 GPS예제인 해당 스마트폰의 GPS 위도경도값을 띄우는 두가지 예제를 성공하였습니다.

    그러나 그 다음으로 구글맵에 현재 위치를 표시하는 .. 위 두가지를 합치는(?) 예제를 해보았는데

    처음엔 에러가 많이나서 하나하나 고쳐나가서 결국 에러를 다 없앴는데

    공폰에 넣고 돌려만보면 바로 강제종료가되고 로그켓이 뜨는데 위에 많은 로그켓들과 모두 비교해보았는데

    다르게 뜨는거같아 한번 여쭤보고싶습니다..


    05-10 22:03:51.750: E/Trace(9844): error opening trace file: No such file or directory (2)
    05-10 22:03:51.760: D/ActivityThread(9844): setTargetHeapUtilization:0.25
    05-10 22:03:51.760: D/ActivityThread(9844): setTargetHeapIdealFree:8388608
    05-10 22:03:51.760: D/ActivityThread(9844): setTargetHeapConcurrentStart:2097152
    05-10 22:03:51.800: W/dalvikvm(9844): threadid=1: thread exiting with uncaught exception (group=0x41f25438)
    05-10 22:03:51.800: E/AndroidRuntime(9844): FATAL EXCEPTION: main
    05-10 22:03:51.800: E/AndroidRuntime(9844): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.androidhuman.example.mapsv2example/com.androidhuman.example.mapsv2example.MainActivity}: java.lang.IllegalStateException: System services not available to Activities before onCreate()
    05-10 22:03:51.800: E/AndroidRuntime(9844): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1996)
    05-10 22:03:51.800: E/AndroidRuntime(9844): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2097)
    05-10 22:03:51.800: E/AndroidRuntime(9844): at android.app.ActivityThread.access$600(ActivityThread.java:137)
    05-10 22:03:51.800: E/AndroidRuntime(9844): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1203)
    05-10 22:03:51.800: E/AndroidRuntime(9844): at android.os.Handler.dispatchMessage(Handler.java:99)
    05-10 22:03:51.800: E/AndroidRuntime(9844): at android.os.Looper.loop(Looper.java:137)
    05-10 22:03:51.800: E/AndroidRuntime(9844): at android.app.ActivityThread.main(ActivityThread.java:4885)
    05-10 22:03:51.800: E/AndroidRuntime(9844): at java.lang.reflect.Method.invokeNative(Native Method)
    05-10 22:03:51.800: E/AndroidRuntime(9844): at java.lang.reflect.Method.invoke(Method.java:511)
    05-10 22:03:51.800: E/AndroidRuntime(9844): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790)
    05-10 22:03:51.800: E/AndroidRuntime(9844): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
    05-10 22:03:51.800: E/AndroidRuntime(9844): at dalvik.system.NativeStart.main(Native Method)
    05-10 22:03:51.800: E/AndroidRuntime(9844): Caused by: java.lang.IllegalStateException: System services not available to Activities before onCreate()
    05-10 22:03:51.800: E/AndroidRuntime(9844): at android.app.Activity.getSystemService(Activity.java:4622)
    05-10 22:03:51.800: E/AndroidRuntime(9844): at com.androidhuman.example.mapsv2example.MainActivity.<init>(MainActivity.java:31)
    05-10 22:03:51.800: E/AndroidRuntime(9844): at java.lang.Class.newInstanceImpl(Native Method)
    05-10 22:03:51.800: E/AndroidRuntime(9844): at java.lang.Class.newInstance(Class.java:1319)
    05-10 22:03:51.800: E/AndroidRuntime(9844): at android.app.Instrumentation.newActivity(Instrumentation.java:1056)
    05-10 22:03:51.800: E/AndroidRuntime(9844): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1987)
    05-10 22:03:51.800: E/AndroidRuntime(9844): ... 11 more


    API키도 여러번해보고 처음부터 다시 프로젝트를만들어보기도하였는데 문제해결을 일주일째 못하고있네요 ㅠㅠ
    바쁘실텐데 조언좀 해주시면 정말!! 감사하겠습니다..

  11. Blog Icon
    sae

    커니님 프로젝트 불러오는 것 까지는 성공했는데 라이브러리 프로젝트 추가하는 부분에서 google_play_service_lib가 뜨질 않네요
    버전도 최신버전으로 깔았는데.... 어떡해야 되나요????

  12. 이클립스 workspace에 구글 플레이 서비스 라이브러리를 추가하셨나요? 추가하지 않아서 목록에 표시되지 않는 거 같습니다.

    첨부된 예제를 그대로 불러오기만 할 경우엔 (당연히) 구글 플레이 서비스가 포함되어 있지 않으므로 목록에 표시되지 않는 것이 정상입니다.

  13. Blog Icon
    서영렬

    커니님 API키를 이용해 구글맵을 띄우는 앱을 실행해보려고 하는데
    위에설명해주신데로 그대로 다따라했는데요

    package com.androidhuman.example.mapsv2example;



    import android.R;
    import android.os.Bundle;
    import android.support.v4.app.FragmentActivity;
    import android.view.Menu;

    public class MainActivity extends FragmentActivity {

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

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflat(R.menu.main,main);
    return true;
    }

    }

    MainActivity.java 소스가 위와같은데 R.layout.activity_main 부분과 R.menu.main,main 부분에서 자꾸 에러가납니다.
    activity_main cannot be resolved or is not a field 라는 에러문구가뜹니다. 안드로이드 초보인데 해결법좀 알려주실수있나요?

  14. 레이아웃 파일 이름이 activity_main.xml 이 아니여서 발생하는 문제입니다. 사용한 파일 이름에 맞춰 activity_main 부분을 사용하는 파일 이름으로 바꿔주시면 됩니다. (예 : activity_my_layout.xml 이라는 레이아웃 파일을 사용한다면 activity_main을 activity_my_layout으로 변경)

  15. Blog Icon
    jari

    감사히 보고 있습니다.
    똑같이 따라해서 usb 를 통해서 실행하면 지도가 잘나옵니다.

    잘되는줄알고 playstore에 올린후
    다운 받아서 보니
    google 과 + - 표시만 나옵니다.
    혹시 SHA1 값이 문제 있나싶어서 PC를 두군데깔고 해도 마찬가지입니다.
    이럴땐 어찌 해야 하는지...?

  16. 플레이 스토어에 올릴 때 사용한 서명 키(keystore)의 SHA1 해시 값을 구글맵 API 키 등록하는 사이트에 등록해야 합니다.
    디버그용 서명키 값만 등록되어 있는 것 같네요.

  17. Blog Icon
    서영렬

    죄송하지만 ㅠㅠ 위에서 xml 파일의 이름이 activity_main 이아니라서 발생하는 오류라고 하셨는데요 ㅠㅠ
    왼쪽에 res인가 들어가서 layout 에 있는 xml 파일이름이 activity_main 인것을 확인했거든요? 그렇다면 이유가뭘까요?
    (참고로 예제를 그냥 받아서 실행시킨것일뿐 제가 처음부터 생성한 프로젝트가 아닙니다)

  18. 그렇다면 리소스를 컴파일하는 과정에서 오류가 있는 것 같습니다.
    프로젝트를 Clean 후 다시 빌드 해 보시고, R.java 가 정상적으로 생성되는지 확인 해 보세요.

  19. Blog Icon
    와따까따뿌따

    커니님 질문이 제가 블루투스와 같이 맵을 연동 하려고 합니다. 처음으로 한건 예제에 인텐트를 적용해서 넘어가나 안넘어가나 실험을 해봤습니다. 이것이 되어 지금은 블루투스 어플에 구글맵 예제 자바 파일 xml파일을 복사해서 붙여넣었고요. 위에서 추가하라는 것들도 다 했습니다.

    처음엔 인텐트가 안되다가 지금은 넘어가기는 넘어가는데요. 살색 메인만 뜨고 지도가 안뜨네요... 이걸 어떻게 해결해야 할까요?

  20. API 키가 제대로 등록되지 않은 것으로 보입니다. 키가 등록되었는지 확인해보세요.

  21. Blog Icon
    와따까따뿌따

    커니님 ㅇapi키는 1개만 가능 한가요?
    구글들어가면 프로젝트를 계속 만들수 있더라구요.

  22. API키를 입력하는 부분에 [SHA1해시;패키지 이름] 형식으로 여러 개를 입력하면 됩니다. (각 항목은 엔터 키로 구분)

  23. Blog Icon
    서영렬

    커니님 예제소스 받아서 API_KEY 바꿨는데요..
    에러없이 핸드폰에 넣어지긴하는데
    막상 폰에 구글맵이 뜨질않아요 ㅠㅠ Logcat을 보면 딱 한줄 빨간색으로 에러가뜹니다.

    Failed to the load map. Error Contacting google servers. This is probably an authentication issue
    (but could be due to network errors)

    이렇게 뜹니다 ㅠㅠ 뭐 인터넷 접속문제인가요?

  24. API 콘솔에 패키지 이름과 SHA1 지문은 등록하셨나요?

  25. Blog Icon
    류원모

    안녕하세요? 앱에 지도서비스를 하려던중에 흰화면만 나오고 지도가 나오지 않는문제가 발생하고 있어
    이곳첨부소스를 가지고 API키만 변경 그리고 원본 테스트해도 동일한 에러로그가 나오네요.
    확인 부탁드려도 될까요?
    테스트환경: Android 4.4.2 / LG G2

    // Mapsv2Example
    06-16 15:40:40.655: I/Google Maps Android API(2674): Google Play services client version: 4452000
    06-16 15:40:40.705: W/ActivityThread(2674): ClassLoader.loadClass: The class loader returned by Thread.getContextClassLoader() may fail for processes that host multiple applications. You should explicitly specify a context class loader. For example: Thread.setContextClassLoader(getClass().getClassLoader());
    06-16 15:40:41.355: I/Adreno-EGL(2674): <qeglDrvAPI_eglInitialize:385>: EGL 1.4 QUALCOMM build: ()
    06-16 15:40:41.355: I/Adreno-EGL(2674): OpenGL ES Shader Compiler Version: E031.24.00.02
    06-16 15:40:41.355: I/Adreno-EGL(2674): Build Date: 01/20/14 Mon
    06-16 15:40:41.355: I/Adreno-EGL(2674): Local Branch: PMH2-KK_3.5-RB1-AU61-554722-586267-set2
    06-16 15:40:41.355: I/Adreno-EGL(2674): Remote Branch:
    06-16 15:40:41.355: I/Adreno-EGL(2674): Local Patches:
    06-16 15:40:41.355: I/Adreno-EGL(2674): Reconstruct Branch:
    06-16 15:40:41.385: D/OpenGLRenderer(2674): Enabling debug mode 0
    06-16 15:40:41.775: I/ActivityManager(2674): Timeline: Activity_idle id: android.os.BinderProxy@428aee20 time:39034114
    06-16 15:40:42.005: E/DataScheduler(2674): isDataSchedulerEnabled():false
    06-16 15:40:42.765: I/Google Maps Android API(2674): Failed to contact Google servers. Another attempt will be made when connectivity is established.
    06-16 15:40:57.815: E/Google Maps Android API(2674): Failed to load map. Error contacting Google servers. This is probably an authentication issue (but could be due to network errors).

  26. API Console에서 SHA1키와 패키지 이름을 제대로 입력하셨는지 확인해보세요. 로그 상에선 인증 에러 혹은 네트워크 에러라 나오고 있네요.

  27. Blog Icon
    류원모

    해결했습니다. T.T Google Play services SDK 샘플코드도 마찬가지여서 애를 먹고 있었는데
    이클립스 내부에 있던 debug keystore가 아니라 그동안 배포할때 따로 만들어 사용했던 release keystore값을 가지고 API key를
    만들었던게 문제였네요.

  28. Blog Icon
    딸개이

    감사합니다. 덕분에 도움이 많이 되었습니다~~

  29. Blog Icon
    천영덕

    커니님. 제가 핸드폰을 정지해서 3g나 LTE가 안되는데요. 이 어플 실행이 가능한가요? 와이파이로요.
    지금 다시 하는데 지도가 안떠서 어떤문제인지 모르겠네요.

  30. 인터넷 연결만 가능하면 어떤 형태로 연결되어있든지 사용 가능합니다. 동작되지 않는 원인은 로그를 봐야 알 수 있을 것 같네요.

  31. Blog Icon
    Seung

    혹시 keytool사용시 'keytool'은(는) 내부 도는 외부 명령, 실행할 수 있는 프로그램, 또는 배치 파일이 아닙니다. 이런 문구가 뜨면서 안되시는 분들은 http://sojeong721.blog.me/130157522481 여기 링크 참조하세요~~ ㅎㅎ
    환경변수를 제대로 추가 안해서 그렇다네요.
    저는 맨 아래 openssl을 깔지 않고도 되네요^^

  32. Blog Icon
    ldy

    안녕하세요 커니님 좋은글 잘 보고 있습니다.
    죄송하지만 이번에 이클립스 오류가 나서 재설치 한뒤로 구글맵을 컴파일 하면 확대, 축소 버튼이 안보이는데요
    혹시 왜 이러는지 알려주실수 있으신가요?

  33. http://developer.android.com/reference/com/google/android/gms/maps/UiSettings.html#setZoomControlsEnabled(boolean)
    여기를 참조하세요~

  34. Blog Icon
    lhw

    예전에 완성된 프로젝트를 다시좀 해보려고 켰는데..
    구글 라이브러리 프로젝트 생성후

    개발 프로젝트에서 라이브러리 불러서 ok 누르고 속성을 다시 들어가보면 적용이 안되는데 이유가 무엇일까요ㅠㅠ

  35. 말씀해 주신 부분만으로는 정확히 어떤 것이 문제인지 알 수가 없네요.
    이클립스를 사용하는 것으로 추정되는데, 어느 속성이 적용이 안 되는 것인가요?

  36. Blog Icon
    lhw

    그.. sdk로 다운받은 구글 플레이 서비스 이용하려고 프로젝트 새로 만들어서 등록하구요

    그다음 개발중인 프로젝트에서 properties>android에 가서 add 클릭해서 구글 플레이 서비스 라이브러리를 추가해주게 되는데

    추가하면 초록색 체크마킹 떴다가 Ok 누르고 다시 properties>android로 들어가보면 빨간색X 표시되는데.. 뭐가문제일까요?

  37. Blog Icon
    커니짱

    커니님 안녕하세요
    Google place api로 장소를 하나 선택한 뒤 그 장소에 해당하는 지도를 google map api를 통해 보여주고싶은데 place로 선택한 장소의 latitude와 longitude값을 어떻게 가져올 수 있나요?