android - map api v2
1. key 추출
디버그용 키의 경우
keytool -list -v -keystore c:\Users\[사용자ID]\.android\debug.keystore
배포용의 경우도 keystore 파일만 배포용으로 변경하면 된다.
결과
인증서 지문:
MD5: C5:7A:A6:65:23:FE:FC:8D:96:04:59:8E:E5:AB:D4:36
SHA1: 0C:9E:83:A2:6A:3F:52:8D:B9:21:4C:CE:80:D0:25:03:CB:C0:7B:4F
SHA256: 95:FB:82:B4:8F:06:44:A9:8D:B2:F2:42:8D:E2:09:42:A1:5B:D2:C0:A5:
38:EB:D1:D4:96:CA:45:9D:AC:9F:DD
서명 알고리즘 이름: SHA256withRSA
버전: 3
2. Google Project 생성
아래 URL에 접속하여 APIs project를 생성한다. (이미 프로젝트를 생성했다면 패스)
https://code.google.com/apis/console/
3. Google Services에서 Android Map 활성화
아래 URL에서 Google Maps Android API v2 활성화
https://code.google.com/apis/console/#project:[ProjectID]:services
4. OAuth 2.0으로 API KEY 획득
2) OAuth 2.0 Client ID 생성 (이미 OAuth 2.0을 갖고 있다면 패스)
- 좌측 API Access 메뉴에서 Create an OAuth 2.0 client ID 버튼을 클릭하여 생성 위자드에 따라 생성한다.
- Project 이름 입력
- Application Type을 Installed Application으로 선택
- Installed application type을 Android로 선택
- Package name과 1번에서 추출된 SHA1 지문 입력
3) OAuth 2.0 Client ID가 이미 있는 경우
- Client ID for installed applications 항목의 Create another client ID 버튼을 클릭한다.
- Project 이름 입력
- Application Type을 Installed Application으로 선택
- Installed application type을 Android로 선택
- Package name과 1번에서 추출된 SHA1 지문 입력
5, Simple API Access로 API KEY 획득
1) 아래 URL 로 접속하여 Simple API Access 항목의 create new android key 버튼을 클릭하여 [SHA1];[PackageName] 형식으로 입력 후 create 버튼 클릭한다.
https://code.google.com/apis/console/#project:[ProjectID]:access
2) API KEY가 생성되면 화면에 API key, Android apps, Activated on, Activated by 정보가 표시된다.
6. AndroidManifest.xml에 추가
1) OpenGL 2.0 지원
<uses-feature
android:glEsVersion="0x00020000"
android:required="true" />
2) 지도 데이터 수신용 퍼미션 생성
<permission android:name="[PackageName].permission.MAPS_RECEIVE" android:protectionLevel="signature" />
3) 지도용 퍼미션 사용
ACCESS_FINE_LOCATION이 ACCESS_COARSE_LOCATION 퍼미션을 포함하는 의미이나 Google MAP v2 가이드에 두개가 따로 명시되어 있네요.
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
<uses-permission android:name="[PackageName].permission.MAPS_RECEIVE" />
4) API KEY 설정
application tag 안에 넣음
<meta-data
android:name="com.google.android.maps.v2.API_KEY"
android:value="[API KEY]" />
7. 적용
1) 레이아웃 적용
맵을 표시하고자 하는 뷰의 layout xml에 아래 fragment 추가
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/my_map"
android:layout_width="match_parent"
android:layout_height="match_parent"
class="com.google.android.gms.maps.SupportMapFragment" />
2) Code 적용
SupportMapFragment에서 getMap() 메소드로 GoogleMap을 얻을때 바로 획득하지 못하고 null이 리턴되는 경우가 있다. Google play service 내에서 초기화 하는데 다소 시간이 소요될 수 있기때문으로 이를 대비하여 아래와 같은 형태로 적용하였다.
public class MainActivity extends FragmentActivity {
private static final MAX_RETRY_COUNT = 6;
private SupportMapFragment mSupportMapFragment;
private GoogleMap mGoogleMap;
private Handler mMapCheckHandler = new Handler();
private int mRetryCount = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mSupportMapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.my_map);
mMapCheckHandler.postDelayed(mMapCheckRunnable, 500L);
}
private Runnable mMapCheckRunnable = new Runnable() {
public void run() {
if(mRetryCount == MAX_RETRY_COUNT) {
// 맵 로드 실패
return;
}
mRetryCount++;
mGoogleMap = mSupportMapFragment.getMap()
if(mGoogleMap == null) {
// google play service에 의해 map이 초기화가 되지 않은 상태
mMapCheckHandler.postDelayed(mMapCheckRunnable, 500L);
} else {
// 맵 사용...
}
}
}
}
디버그용 키의 경우
keytool -list -v -keystore c:\Users\[사용자ID]\.android\debug.keystore
배포용의 경우도 keystore 파일만 배포용으로 변경하면 된다.
결과
인증서 지문:
MD5: C5:7A:A6:65:23:FE:FC:8D:96:04:59:8E:E5:AB:D4:36
SHA1: 0C:9E:83:A2:6A:3F:52:8D:B9:21:4C:CE:80:D0:25:03:CB:C0:7B:4F
SHA256: 95:FB:82:B4:8F:06:44:A9:8D:B2:F2:42:8D:E2:09:42:A1:5B:D2:C0:A5:
38:EB:D1:D4:96:CA:45:9D:AC:9F:DD
서명 알고리즘 이름: SHA256withRSA
버전: 3
2. Google Project 생성
아래 URL에 접속하여 APIs project를 생성한다. (이미 프로젝트를 생성했다면 패스)
https://code.google.com/apis/console/
3. Google Services에서 Android Map 활성화
아래 URL에서 Google Maps Android API v2 활성화
https://code.google.com/apis/console/#project:[ProjectID]:services
4. OAuth 2.0으로 API KEY 획득
2) OAuth 2.0 Client ID 생성 (이미 OAuth 2.0을 갖고 있다면 패스)
- 좌측 API Access 메뉴에서 Create an OAuth 2.0 client ID 버튼을 클릭하여 생성 위자드에 따라 생성한다.
- Project 이름 입력
- Application Type을 Installed Application으로 선택
- Installed application type을 Android로 선택
- Package name과 1번에서 추출된 SHA1 지문 입력
3) OAuth 2.0 Client ID가 이미 있는 경우
- Client ID for installed applications 항목의 Create another client ID 버튼을 클릭한다.
- Project 이름 입력
- Application Type을 Installed Application으로 선택
- Installed application type을 Android로 선택
- Package name과 1번에서 추출된 SHA1 지문 입력
5, Simple API Access로 API KEY 획득
1) 아래 URL 로 접속하여 Simple API Access 항목의 create new android key 버튼을 클릭하여 [SHA1];[PackageName] 형식으로 입력 후 create 버튼 클릭한다.
https://code.google.com/apis/console/#project:[ProjectID]:access
2) API KEY가 생성되면 화면에 API key, Android apps, Activated on, Activated by 정보가 표시된다.
6. AndroidManifest.xml에 추가
1) OpenGL 2.0 지원
<uses-feature
android:glEsVersion="0x00020000"
android:required="true" />
2) 지도 데이터 수신용 퍼미션 생성
<permission android:name="[PackageName].permission.MAPS_RECEIVE" android:protectionLevel="signature" />
3) 지도용 퍼미션 사용
ACCESS_FINE_LOCATION이 ACCESS_COARSE_LOCATION 퍼미션을 포함하는 의미이나 Google MAP v2 가이드에 두개가 따로 명시되어 있네요.
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
<uses-permission android:name="[PackageName].permission.MAPS_RECEIVE" />
4) API KEY 설정
application tag 안에 넣음
<meta-data
android:name="com.google.android.maps.v2.API_KEY"
android:value="[API KEY]" />
7. 적용
1) 레이아웃 적용
맵을 표시하고자 하는 뷰의 layout xml에 아래 fragment 추가
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/my_map"
android:layout_width="match_parent"
android:layout_height="match_parent"
class="com.google.android.gms.maps.SupportMapFragment" />
2) Code 적용
SupportMapFragment에서 getMap() 메소드로 GoogleMap을 얻을때 바로 획득하지 못하고 null이 리턴되는 경우가 있다. Google play service 내에서 초기화 하는데 다소 시간이 소요될 수 있기때문으로 이를 대비하여 아래와 같은 형태로 적용하였다.
public class MainActivity extends FragmentActivity {
private static final MAX_RETRY_COUNT = 6;
private SupportMapFragment mSupportMapFragment;
private GoogleMap mGoogleMap;
private Handler mMapCheckHandler = new Handler();
private int mRetryCount = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mSupportMapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.my_map);
mMapCheckHandler.postDelayed(mMapCheckRunnable, 500L);
}
private Runnable mMapCheckRunnable = new Runnable() {
public void run() {
if(mRetryCount == MAX_RETRY_COUNT) {
// 맵 로드 실패
return;
}
mRetryCount++;
mGoogleMap = mSupportMapFragment.getMap()
if(mGoogleMap == null) {
// google play service에 의해 map이 초기화가 되지 않은 상태
mMapCheckHandler.postDelayed(mMapCheckRunnable, 500L);
} else {
// 맵 사용...
}
}
}
}
댓글
댓글 쓰기