개발 창고/Android

[Kotlin] How to use Kakao Navigation in my app

로이제로 2023. 12. 14. 22:00
반응형

Use KaKao Navi

 내 앱에서 카카오 내비게이션의 길 찾기 기능을 이용하려면 어떻게 해야 할까요? 우선 카카오로부터 API 승인을 받은 후 아래와 같이 어플에 권한 및 API를 적용해 주면 됩니다.


1. build.gradle (android) 설정

allprojects {
    repositories {
        google()
        mavenCentral()
        maven { url 'https://devrepo.kakao.com/nexus/content/groups/public/' }
    }
}

 프로젝트 수준의 build.gradle에 api호출을 위한 maven repository를 추가해줍니다.

maven { url 'https://devrepo.kakao.com/nexus/content/groups/public/' }


2. build.gralde (:app) 설정

dependencies {
    ...
    // 카카오내비 sdk를 사용하기 위해 필요.
    implementation "com.kakao.sdk:v2-navi:2.14.0" // 카카오내비
}

앱 수준의 build.gradle에 카카오 내비게이션 API를 추가해 줍니다.

2023년 7월 6일 기준 최신 버전은 2.14.0이며, 이후 변경 되는 버전에 맞춰 변경 가능합니다.


3. Custom Application 생성

package com.test.app

import android.app.Application
import com.kakao.sdk.common.KakaoSdk

class GlobalApplication : Application() {
    override fun onCreate() {
        super.onCreate()
        
        // Kakao SDK 초기화
        KakaoSdk.init(this, "카카오앱키")
    }
}

 AndroidMainifest에서 지정되는 방법도 있는 것 같지만 제 경우에는 이렇게 지정하는 게 더 잘 적용되어서 Application을 선언하여 사용하였습니다.

 

 여기서 "카카오앱키"는 아래의 카카오 개발자 사이트에서 등록한 APP의 네이티브 앱 키가 됩니다.

 

https://developers.kakao.com/

 

Kakao Developers

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

developers.kakao.com


4. AndroidManifest.xml 설정

<application
    android:name=".GlobalApplication"
    ...
    >

    ...

</application>

 3번 에서 생성한 GlobalApplication의 이름을 AndroidManifest.xml의 application단에 name으로 지정해 주면, Activity가 실행되기 전에 GlobalApplication이 먼저 실행되게 되고, 이때 KakaoSdk.init가 실행되어 권한을 인증받게 됩니다.


5. 메서드 생성

/**
 * @description 카카오 내비게이션으로 이동
 * @param   name        내비게이션에 표기될 명칭
 * @param   latitude    위도
 * @param   longitude   경도
 */
fun moveToKakaoNavi(context:Context, name:String, latitude:Double, longitude:Double) {
    // Step. 카카오 내비가 설치된 경우
    if (NaviClient.instance.isKakaoNaviInstalled(context)) {
        println("Step. 카카오 내비가 설치된 경우")
        var destination = name
        if(name.isBlank())    destination = "목적지"
        println("name $destination")
        println("longitude $longitude")
        println("latitude $latitude")

        context.startActivity(
            NaviClient.instance.shareDestinationIntent(
                destination = Location(destination, longitude.toString(), latitude.toString())
              , option      = NaviOption(CoordType.WGS84)
            )
        )

    // Step. 카카오 내비가 설치되지 않은 경우
    } else {
        println("Step. 카카오 내비가 설치되지 않은 경우")
        Toast.makeText(context, "카카오내비가 설치되어있지 않아 설치페이지로 이동합니다.", Toast.LENGTH_SHORT).show()
        context.startActivity(
            Intent(Intent.ACTION_VIEW, Uri.parse(Constants.WEB_NAVI_INSTALL))
                .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TOP)
        )
    }
}

 위 와 같이 메서드로 선언해 두면 어디서든 재 사용 가능합니다.

 2.8.4 버전부터는 내비게이션 미설치 시 기능을 제공하지 않기 때문에 설치 여부에 따라 설치 페이지로 분기가 필요합니다.


6. 메서드 활용

moveToKakaoNavi(this, "이동테스트", 37.5658091, 126.9729574)

반응형