본문 바로가기

Android

Kakao Map API (카카오 지도 API)

728x90

Kakao Map API를 이용하려면 먼저 Kakao Map SDK를 다운로드 받고, Kakao Platform에 애플리케이션을 등록하고 App Key를 받아야합니다. 우선 아래의 두 사이트를 켜주세요.

 

apis.map.kakao.com/android/guide/

 

https://developers.kakao.com/

 

Kakao Developers

카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다.

developers.kakao.com

Kakao Map SDK 다운로드

SDK를 다운로드 받은 후 압축을 해제한 후 내부 파일을 아래와 같이 붙여넣기 해주면 됩니다.

App key 발급받기

애플리케이션을 추가하고 플랫폼 등록을 클릭한 후 Android 플랫폼을 등록합니다.

 

Android 플랫폼 등록을 할때 키 해시가 필요합니다. 

키 해시를 얻기 위해서 아래의 코드를 프로젝트에 작성한 후 앱을 실행하여 Log에 출력되는 KeyHash를 입력해주고 등록하면 App Key를 발급받을 수 있습니다.

fun getHashkey() {
        var packageInfo : PackageInfo? = null
        try {
            packageInfo = packageManager.getPackageInfo(packageName, PackageManager.GET_SIGNING_CERTIFICATES)
        }catch (e: Exception){
            e.printStackTrace()
        }

        if(packageInfo != null){
            val signature = packageInfo.signingInfo.apkContentsSigners

            for (signature in signature){
                val md : MessageDigest
                md = MessageDigest.getInstance("SHA")
                md.update(signature.toByteArray())

                val key = String(Base64.encode(md.digest(), 0))
                Log.d(Constants.TAG, "key Hash  : $key")
            }
        }
    }

 

프로젝트 내부에서 설정을 해야합니다.

AndroidManifest.xml에 아래와 같이 추가해주어야 합니다.

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>

    <application
    	...
        android:usesCleartextTraffic="true">	//http 허용
        <activity android:name="com.example.xxxx" />
        <activity android:name="com.example.xxxx">
            <intent-filter>
           		...
            </intent-filter>
        </activity>
        <meta-data android:name="com.kakao.sdk.AppKey" android:value="네이티브 앱 키"/>
    </application>

 

마지막으로 build.gradle(Module)에 다운로드 받았던 SDK 라이브러리를 추가해주면 map api를 사용할 수 있습니다.

 implementation files('libs/libDaumMapAndroid.jar')

 

이제 설정은 마무리 했으니 MapView를 띄우기 위한 작업을 하겠습니다.

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <RelativeLayout
        android:id="@+id/map_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

</androidx.constraintlayout.widget.ConstraintLayout>
		val mapView = MapView(requireActivity())
                // 맵 포인트 설정
                val msrstnPoint = MapPoint.mapPointWithGeoCoord(it.dmX, it.dmY)
                // 중심점 변경
                mapView.setMapCenterPoint(msrstnPoint, true)
                // 줌 레벨 변경
                mapView.setZoomLevel(3, true)
                // 줌 인
                mapView.zoomIn(true)
                // 줌 아웃
                mapView.zoomOut(true)
                // 설정값을 mapView에 추가
                binding.arplltnMapView.addView(mapView)

                val marker = MapPOIItem()
                // ?
                marker.tag = 0
                // 마커 생성 위치
                marker.setMapPoint(msrstnPoint)
                // 기본으로 제공하는 마커
                marker.markerType = MapPOIItem.MarkerType.BluePin
                // 마커를 클릭했을때, 마커 메시지
                marker.itemName = "관측 측정소"
                // 마커를 클릭했을때, 기본으로 제공하는 마커
                marker.selectedMarkerType = MapPOIItem.MarkerType.RedPin
                // mapView에 마커 추가
                mapView.addPOIItem(marker)

위처럼 layout을 작성하고, kt 파일에서 프로그래밍방식으로 MapView를 원하는대로 설정하여 사용할 수 있습니다.

 

오류 해결

다양한 오류가 있는데, AndroidManifest.xml을 제가 작성해놓은 것에 맞게 작성하면 큰 문제없이 실행되지만,

MapView를 선언하게 될때 import net.daum.mf.map.api.MapView로 선언해야 합니다. 아니면 오류가 발생합니다.