—
SDK(Software Development Kit)란 개발자를 위한 플랫폼별 구축 도구 세트로, Application에 통합할 수 있는 사전 빌드 된 구성 요소와 Library를 제공하여 개발 효율성을 높일 수 있는 도구입니다. 이러한 구성 요소와 Library를 통해 개발자는 처음부터 코딩 및 디버깅하는 데 소요되던 시간과 비용을 크게 절약할 수 있습니다.
아이나비시스템즈는 ‘아이나비 에어’ 내비게이션을 기반으로 한 Navigation SDK를 제공하여, 내비게이션 개발에 대한 부담 없이 3rd Party Application 내비게이션 서비스를 포함할 수 있도록 지원합니다.
아이나비의 Navigation SDK는 Android, iOS Library를 Cloud 방식인 Jflog Artifactory(Android)와 Cocoapods(iOS)로 제공하고 있습니다. 특히 새로운 버전이 업데이트되면 해당 Cloud에 업로드하고 있어, 개발자는 Library를 직접 다운로드하여 관리할 필요 없이 개발 플랫폼별 세팅을 통해 최신 버전의 Navigation SDK Library를 3rd Party 앱에 추가할 수 있습니다.
1. SDK 저장소 추가
a. Root Project build.gradle 파일
/* Root Project build.gradle */
allprojects {
repositories {
maven { url 'https://repo.inavi.com/artifactory/navigation/>' }
}
}
a. 참고 : CocoaPods.org
b. SDK는 CocoaPods를 통해 배포되므로, 다음과 같이 프로젝트의 Podfile에 SDK에 대한 의존성을 추가합니다.
target 'naviSDKSample' do
pod 'inavi-navigation-sdk'
Library를 적용한 후에는, Library에서 제공하는 API List를 통해 SDK 제공 기능을 확인할 수 있으며, 이를 활용하여 3rd Party 앱에서 원하는 특화 기능을 개발할 수 있습니다.
fun setMapPosition(lat: Double, lon: Double, angle: Double)
Description : 지도를 특정 위치로 이동
Param
- lat : 위도 (이동 시킬 좌표의 y값 [WGS84])
- lot : 경도 (이동 시킬 좌표의 x값 [WGS84])
- angle : 각도
Return : void
fun zoomIn()
Description : 현재 레벨에서 한 단계 확대
Param : void
Return : void
fun zoomOut()
Description : 현재 레벨에서 한 단계 축소
Param : void
Return : void
초기화 성공 이후 API를 호출하면 해당하는 기능을 수행하며, 대략적인 Lifecycle은 아래와 같습니다.
기본적으로 내비게이션의 핵심 기능인 통합검색, 길 찾기, 주행 안내를 제공합니다. 이를 통해 사용자는 ‘아이나비 에어’와 동일한 수준의 고품질 내비게이션 서비스를 경험할 수 있습니다.
뿐만 아니라 3rd Party 앱 개발자가 자신의 앱에 추가적인 기능을 구현할 수 있도록 다양한 옵션도 제공합니다. 예를 들어, 실시간 교통정보를 표시하거나, 화물차에 특화된 경로 옵션을 설정하는 기능 등을 활용할 수 있으며 해당 기능을 통해 3rd Party 앱에서 사용자 맞춤형 내비게이션 서비스를 제공할 수 있습니다.
Navigation SDK의 검색 DB, POI DB, 교통정보 등 모든 데이터는 ‘아이나비 에어’와 동일한 최신 데이터를 사용합니다. 때문에 앱을 운영하면서 항상 고민되는 데이터 현행화를 별도 관리할 필요 없이, 항상 최신성을 유지하는 SDK 데이터를 바탕으로 정확한 내비게이션 서비스를 이용할 수 있습니다.
Navigation SDK 초기 적용 시 자주 겪는 어려움들은 대부분 API 호출 제약사항이 지켜지지 않아 발생하는 경우가 많습니다. Navigation SDK는 내비게이션의 모든 상태를 관리하기 때문에, 내비게이션 상태에 따라 동작하지 않는 API 호출 제약사항이 존재합니다.
즉, 호출 조건이 맞아야만 정상적으로 동작하는 API 들이 존재하며, 이와 관련된 대표적인 사례는 다음과 같습니다.
사례 1. 주행 안내 시작 API(runGuidance) 호출 시에 주행이 되지 않는 현상
사례 2. 주행 안내 시작 API(runGuidance) 호출 시에 주행이 경로 선을 따라가지 않는 현상
사례 3. 맵 아이콘 표출 API(addMapIcon)를 호출해도 맵 아이콘이 지도에 표출되지 않는 현상
주행 안내를 하기 위해서는 먼저 길 찾기 API를 통해 RouteID를 획득해야 합니다. RouteID는 마지막으로 호출된 길 찾기 API의 RouteID만 유효하나, 이전의 길 찾기를 통해 얻어온 RouteID로 안내 시작을 호출하여 주행 자체가 시작되지 않는 Case가 많습니다. 길 찾기 API를 여러번 호출할 때 SDK가 모든 RouteID를 누적하는 구조가 아니라, 마지막 길 찾기 API의 RouteID만 유효한 상태임에 대한 인지가 필요합니다.
주행 안내(runGuidance)와 모의 주행(startSimulation)은 배타적으로 동작하는 구조이며 시작과 종료 API의 Pair를 맞춰서 호출해야 하는 API입니다.
주행 안내
시작 : runGuidance
종료 : cancelRoute
모의 주행
시작 : startSimulation
종료 : finishSimulation
즉, runGuidance 상태에서 cancelRoute를 호출하지 않고, 모의주행 API인 startSimulation을 호출하여 발생하는 현상이며, 반대의 경우도 동일합니다.
원활한 주행 안내를 위해서는 runGuidance API 호출 후 startSimulation API를 호출하는 경우, runGuidance -> cancelRoute -> startSimulation을 호출해야 합니다.
반대의 경우, starSimulation -> finishSimulation -> runGuidance 순서로 호출해야 합니다.
iNAVI Navigation SDK의 구조상 맵 아이콘을 지도에 바로 등록하는 구조가 아닌, 맵 아이콘을 관리하는 Overlay라는 투명 Layer에 추가하고, 그 이후 Overlay를 지도에 등록하는 방식으로 동작합니다. 해당 Case 는 맵 아이콘을 바로 지도에 등록하여 발생한 현상입니다.
해당 현상이 발생하는 경우 createMapOverlay API를 통해 Overlay 생성 후, addMapIcon API 호출 시 생성된 Overlay를 같이 전달하면 MapIcon이 정상 표출됩니다. Overlay 구조는 아래 이미지를 참고하시면 됩니다.
iNAVI Navigation SDK의 유용한 기능들을 기반으로, 내비게이션이 필요한 앱에는 모두 사용 가능하며 현재는 택시 기사 앱, 물류배송 앱 등 다양한 분야에 서비스가 지원되고 있습니다.
—
by 아이나비시스템즈 PmG셀
#SDK #안드로이드SDK #IOSSDK #아이나비에어 #3rdparty #지도 #내비게이션 #아이나비지도 #아이나비시스템즈