스펜서 개발블로그

[iOS/Swift] 카카오내비 연동하기 본문

iOS/Swift

[iOS/Swift] 카카오내비 연동하기

스펜서 2023. 1. 6. 12:49

 

오늘은 iOS 앱에서 카카오 내비게이션 연동하는 방법에 대해 알아보려고 합니다.

 

카카오 내비는 앱 내에서 길안내를 하는 API와 카카오 내비앱을 호출하는 API 2가지를 제공하는데 이 중 카카오 내비앱을 호출하는 API 연동에 대해 알아보겠습니다.

 

API 종류의 설명부터 Kakao developers 회원가입하는 내용도 포함되어 있으니 해당 내용이 필요 없으신 분들은 스크롤을 중간으로 내려서 App Key 발급과 SDK 설치부터 보시면 될 것 같습니다.

 

카카오가 제공하는 API 종류

카카오는 크게 소셜통합 API(카카오 로그인, 지도, 카카오 스토리 등), 비즈니스 API(카카오톡 채널, 카카오 페이, 키워드 광고 등), 인공지능 API(검색, 음성, 번역 등)를 제공합니다.

 

이 중 저희가 볼 것은 소셜통합 API입니다.

카카오 내비를 사용하기 위해서는 카카오 내비에 로그인이 되어 있어야 하며, 로그인 방식에 따라 카카오톡을 호출하여 로그인 과정을 거쳐야 할 필요가 있기 때문입니다.

 

소셜 통합 API 종류

 

카카오 내비 앱 호출 시 기능

카카오 내비 앱을 실행하여 목적지를 공유하거나 길 안내를 할 수 있으며 카카오 내비 앱이 설치되어 있지 않은 경우, 설치 페이지로 이동합니다. 카카오 SDK에서 카카오 내비 모듈을 사용합니다.

카카오 내비 앱 연동 기능

 

준비하기

Kakao developers 회원가입

다음 혹은 카카오톡 계정이 있으시다면 누구나 정책에 동의하고 개발자명만 입력하면 아래와 같이 손쉽게 가입이 가능합니다.

(https://developers.kakao.com/)

카카오 개발자 회원가입 양식

 

Kakao Application 등록

가입이 완료되었다면 화면 상단의 내 애플리케이션에 들어가 앱 등록을 해줘야 합니다.

앱의 이름에 맞게 App Key가 발급되고, 해당 App Key가 있어야만 카카오 내비를 열 수 있습니다.

 

앱을 등록하는 과정은 간단합니다.

내 애플리케이션에 들어가면 추가 버튼이 있고, 추가를 누르면 아래와 같이 간단한 양식이 제공 됩니다.

애플리케이션 추가하기

 

위 양식을 작성했다면 내 애플리케이션이 등록되고, 내 애플리케이션을 누르면 아래와 같이 숫자와 영문자가 조합된 App Key를 발급 받을 수 있습니다. App Key는 개발툴에서 SDK를 초기화 할 때 사용됩니다.

App Key

 

Kakao SDK 설치

아래와 같은 요구사항과 라이브러리 의존성이 필요합니다.

단, 라이브러리는 iOS SDK 설치 시, 자동으로 설치 됩니다.

 

요구사항

  • Xcode 11.0 이상
  • iOS 11.0 이상
  • iOS Deployment Target 11.0 이상
  • Swift 5.0 이상

필요한 라이브러리

  • iOS SDK : Alamofire
  • ReactiveX iOS SDK: RxSwift, RxCocoa, RxAlamofire

 

 

Kakao SDK 설치는 Command를 이용한 Cocoapods 설치와 Xcode에서 설치하는 SPM 방식이 있습니다.

여기서는 SPM 방식을 사용하여 진행하도록 하겠습니다.

 

프로젝트의 Package Dependencies에 진입하여 + 모양 버튼을 누르고 아래와 같이 디펜던시를 추가해 줍니다.

 

+ 를 누르고 검색창에 아래 Repository URL을 검색해주고 프로젝트를 선택합니다.

SDK Repository Name Repository URL
iOS SDK kakao-ios-sdk https://github.com/kakao/kakao-ios-sdk
ReactiveX iOS SDK kakao-ios-sdk-rx https://github.com/kakao/kakao-ios-sdk-rx

Dependency 추가

 

프로젝트를 선택한 뒤 하단의 Add Package를 눌러 다음 단계로 진행하게 되면 다음과 같이 Product 선택 화면이 나오는데 의존성을 고려하여 설치하면 됩니다.

 

카카오톡, 카카오톡 공유, 카카오스토리 등과 로그인까지 사용하실 경우, 'Kakao SDK'를 선택하여 모두 설치하시면 되고, 저는 카카오톡 로그인과 카카오 내비만 사용하기 위하여 아래와 같이 선택하였습니다.

 

자세한 내용은 아래 의존성 그림을 참고해주세요.

카카오 SDK 설치

 

카카오 CommonCore의 경우, 네트워크가 없을 경우 사용할 수 있는 Common 파트이며 만약을 위해 설치하였습니다.

만드시는 앱의 네트워크 필수 여부와 시나리오를 고려하여 설치하시면 될 것 같습니다.

 

카카오 SDK 의존성

 

KakaoSDK와 동일한 방법과 Product를 선정하여 ReactiveX iOS SDK도 설치해 줍니다.

 

 

설치 후 Info.plist 파일에 앱 실행 허용 목록을 설정해줘야 합니다.

Info.plist의 경우, 사용자 보호를 위한 Apple의 OS 정책이니 반드시 추가해줍니다.

 

Custom iOS Target Properties에 Array 타입 키를 'LSApplicationQueriesSchemes'로 추가하고, 아래에 Type과 Value를 지정해주면 됩니다.

 

저와 동일하게 SDK를 선택하신 분들은 아래와 같이 kakaokompassauth, kakaonavi-sdk을 추가해주시면 됩니다. (item 1, item 2)
여기서 kakaompassauth의 경우, 카카오 로그인을 위한 부분이니 사용하지 않으시면 제거하셔도 됩니다.

Target Properties 추가

만약 KakaoSDK(통합)를 설치한 경우, Type에 String, Value에 Kakao 하나만 추가해주시면 됩니다.

 

 

SDK 초기화

위에서 설치한 SDK를 사용하기 위해서는 import하고 네이티브 앱 키를 사용하여 초기화하는 과정이 반드시 필요합니다.

별도로 SwiftUI App Life Cycle을 사용하지 않는 프로젝트라면 AppDelegate에 아래와 같이 초기화하는 코드를 작성합니다.

// 1. Common import 해주기 (init을 사용하기 위함)
import KakaoSDKCommon

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {

  // 2. SDK init
  KakaoSDK.initSDK(appKey: "appKey 입력")
  
}

 

SDK 버전에 따라 클래스 명이 다르기 때문에 진행 중에 문제가 발생한다면 SDK 버전과 클래스명을 확인해 주시기 바랍니다.

클래스명 변경

 

카카오 내비 호출

이제 카카오 내비를 호출할 ViewController에 가서 SDK를 import 해주고 호출할 코드를 작성합니다.

아래 코드는 출발지와 목적지가 있어 경로 안내를 하는 경우이고, 출발지와 목적지 정보가 없는 경우 카카오 내비를 실행시켜 줍니다.

또한, 카카오 내비가 설치되어 있지 않은 경우, 설치 페이지로 자동 연결됩니다.

// 1. naviSDK import
import KakaoSDKNavi

class ViewController: UIViewController {

	// 2. 출발지 설정
	let destination = NaviLocation(name: "카카오판교오피스", x: "321286", y: "533707")
	// 3. 목적지 설정
	let viaList = [NaviLocation(name: "판교역 1번출구", x: "321525", y: "532951")]
	guard let navigateUrl = NaviApi.shared.navigateUrl(destination: destination, viaList: viaList) else {
    	return
	}

	// 4. 내비 열기
	if UIApplication.shared.canOpenURL(navigateUrl) {
    	UIApplication.shared.open(navigateUrl, options: [:], completionHandler: nil)
	} else {
    	UIApplication.shared.open(NaviApi.webNaviInstallUrl, options: [:], completionHandler: nil)
	}

}

 

참고할 사항으로는 카카오 내비는 휴대폰의 GPS 정보를 활용하기 때문에 안내를 시작하면 위에서 설정한 출발지가 아닌 휴대폰의 현재 위치에서 안내를 시작합니다.

 

출발지를 판교로 설정하였으나 변경됨

 

 

긴 글 읽어주셔서 감사합니다.

Comments