Nuke Olaf - Log Store
[Android] 안드로이드 - Google map api 란 무엇인가? 본문
1. Android 에서의 google map API 란?
Android 용 Maps SDK 를 사용하면 Google Map 데이터를 기반의 지도를 어플리케이션에 추가할 수 있다.
Google Maps API 에는 크게 두가지 기능이 있다고 볼 수 있다.
(1) 사용자를 위한 지도가 보여지게 하는 것
(2) 사용자 위치의 위도/경도 데이터를 반환하는것, 또는 주소에 대한 데이터를 반환하는 것
구글은 우리 모두 알다시피 짱 큰 회사이다. 이 회사에서 축적한 지도 관련 데이터는 엄청나게 많을 것이다. 우리는 구글이 만들어 놓은 지도 데이터, 그리고 지도를 앱에 띄우게 하고, 사용자의 위치 데이터를 반환하는 코드를 필요한 상황에 맞게 가져다 쓰면 되는것이다. 그러한 코드들과, 코드들을 사용할 수 있게 연결해주는 것을 구글 맵 API 라고 생각할 수 있다.
https://developers.google.com/maps/documentation/android-sdk/intro
2. google map api 를 사용하는 이유는?
3. 안드로이드에서는 google map api 를 어떻게 사용해야할까?
Google Maps 공식 플랫폼에서 제공하는 설치 안내
https://developers.google.com/maps/documentation/android-sdk/start
(1) googlemap 은 기본적으로 라이브러리이다. 사용하기 전에 Module: app 의 buile.gradle 에 Google Play Services 라이브러리를 프로젝트에서 사용하겠다고 dependencies 에 추가해주어야 한다.
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
implementation 'androidx.recyclerview:recyclerview:1.1.0'
// 구글 맵 사용을 위한 Google Play Services 라이브러리
implementation 'com.google.android.gms:play-services-maps:17.0.0'
implementation 'com.google.android.gms:play-services-location:17.0.0'
}
dependencies 에 Google Play Service 라이브러리를 추가한 후, sync 시켜준다.
(2) Manifest 에서 <application> 태그 안에 <meta-data> 를 넣어주어야 한다.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.mygooglemap">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="구글 api 로부터 발급받은 키"/>
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
여기서 meta-data 안의 value 값에는 구글 api 로부터 발급받은 키를 넣어주면 된다.
여기서 이 "key" 란,?
Android Developers 에서는 Android 개발자에게 다양한 API 를 제공한다. Android 에서 제공하는 API 중 Google Map API 를 사용하기 위해서는 Key 를 발급받아야 한다. 아래의 링크를 타고 문서를 읽어보면, API 키는 내 프로젝트에서 API 를 사용하고 비용을 지불하는 것과 관련된 요청을 인증하는데 사용되는 고유 식별자라고 한다. 왜 구글맵 API 를 사용하기 위해서 key 를 받아야하는지 이유까지는 잘 모르겠다. 구글이 그렇게 정해놓았기 때문에?
https://developers.google.com/maps/documentation/android-sdk/get-api-key
Key 를 발급받은 후에는 설정을 통해 Key 의 사용범위를 제한할 수도 있다고 한다.
Google API Key 받는 방법은 아래를 참고...
===< Google API 로부터 key 받는 방법>===
구글 API 에서 키를 받기 위해서는 Google Developers Console 사이트 (https://console.developers.google.com/apis/dashboard )에 접속하여 프로젝트 만들기를 클릭한 다음,
프로젝트 이름을 입력하고 만들기를 클릭한다
그 다음, API 및 서비스 사용 설정에 들어가서 사용할 API 를 선택해주면 된다.
이 포스트에서는 google maps android API 를 사용할것이므로, Maps SDK for Android 를 선택하고, 사용설정을 클릭하면 해당 API 를 활성화 할 수 있다.
API 가 활성화되면, 사용자 인증정보 탭에 들어가 인증설정을 해야한다.
사용자 인증정보 만들기를 클릭하고, API 키를 클릭한 다음, 키 제한을 클릭한다.
그러면, 앞에서 생성된 API 키에 사용제한을 둘 수 있는 웹페이지가 보인다.
여기서, Anrdroid 앱의 사용량을 제한할 수 있는데, 내가 활성화한 Google Maps Android API 를 내가 지정한 Android 앱에서만 사용할수 있게 할것이라고 정해놓는 것이다.
API 키는 제한하는 것이 좋다고 한다. 제한 사항은 추가 보안을 제공하고, API 키로 승인된 요청만 수행하기 때문이다.
여기에는 안드로이드 프로젝트의 패키지 이름과, Android Studio 가 설치된 컴퓨터에서 생성된 SHA-1 인증서 지문이 필요하다.
이 SHA-1 인증서 지문에 대해 삽질을 조금 했었는데, 구글 문서에 잘 정리되어있다. SHA-1 인증서는 디버그용과 릴리즈용을 구분해서 사용해야한다고 나와있다.
https://developers.google.com/maps/documentation/android-sdk/get-api-key#fingerprint
(3) 구글맵을 레이아웃에 추가해준다.
<fragment
android:id="@+id/shop_map"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MapsActivity"
android:name="com.google.android.gms.maps.SupportMapFragment"/>
(4) 코드를 추가해 준다.
public class MainActivity extends AppCompatActivity
implements OnMapReadyCallback {
private GoogleMap mMap;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
}
@Override
public void onMapReady(final GoogleMap googleMap) {
mMap = googleMap;
LatLng SEOUL = new LatLng(37.56, 126.97);
MarkerOptions markerOptions = new MarkerOptions();
markerOptions.position(SEOUL);
markerOptions.title("서울");
markerOptions.snippet("한국의 수도");
mMap.addMarker(markerOptions);
mMap.moveCamera(CameraUpdateFactory.newLatLng(SEOUL));
mMap.animateCamera(CameraUpdateFactory.zoomTo(10));
}
}
참고한 사이트>>>
https://www.sitepoint.com/adding-maps-to-an-android-app-with-google-play-services/
'Android' 카테고리의 다른 글
[Android] 안드로이드 - google map 사용법 (0) | 2020.01.15 |
---|---|
[Android] 안드로이드 - API 란 무엇인가? (0) | 2020.01.15 |
[Android] 안드로이드 - 기기의 가장 최근 사진을 가져오는 방법 (2) | 2020.01.14 |
[Android] 안드로이드 - 사진을 임시 저장소(cache directory) 에 저장했다가 불러오기 (0) | 2020.01.14 |
[Android] 안드로이드 - intent 로 기본앨범 불러오기 (0) | 2020.01.13 |