소개
Navigation SDK (Nav SDK)는 고객과 운전자, 특히 신규 운전자나 해당 지역에 익숙하지 않은 운전자에게 매우 유용한 동급 최고의 턴바이턴 기능을 제공합니다. 하지만 회전별 탐색 UI로 운전자의 주의를 도로에서 떼고 싶지 않지만 차량 위치를 추적하고 운전자가 따르는 경로와 관련된 이벤트를 수신하고 싶은 특정 사용 사례가 있습니다. 트럭 운전자가 그 예입니다. 특히 위험물을 운송하는 경우에 해당합니다. 짧은 거리를 걸어서 배송하는 등 다른 방식으로 배송하는 회사는 경로 안내를 사용 설정하지 않아도 될 수 있으며, 이렇게 하면 기기의 배터리 수명을 절약할 수 있습니다.
범위
이 문서에서는 회사가 탐색 SDK에서 탐색 지도 (뷰)를 숨기면서도 위치 추적, 이벤트 구독, 콜백과 관련하여 탐색 SDK의 모든 기능을 활용하는 방법을 설명합니다. 헤드리스 모드에서 Nav SDK를 통해 캡처된 데이터는 차량을 추적하고 예상 도착 시간을 더 정확하게 파악하는 기능을 개선하는 데 사용할 수 있으며, 이는 궁극적으로 투명성과 효율성으로 이어집니다.
Navigation SDK
Navigation SDK는 드라이버 앱에 추가되는 네이티브 Android / iOS 라이브러리입니다. 모빌리티 맥락에서 Navigation SDK는 다음을 담당합니다.
- 이를 실행하는 앱에서 도로에 스냅된 위치를 가져옵니다. 도로에 스냅된 위치는 Android의 FusedLocationProvider (FLP)보다 정확합니다. Google의 도로 네트워크를 사용하여 위치를 가장 가까운 도로 구간에 스냅하므로 FLP의 예상 도착 시간과 기타 정보가 훨씬 더 정확해집니다.
- 운전자가 실시간 교통정보와 기타 경로 제한을 고려하여 A 지점에서 B 지점까지 효율적으로 이동할 수 있는 턴바이턴 환경
- 이벤트 리스너와 등록된 콜백을 통해 경로 진행 상황, 위치, 속도 등을 기반으로 이벤트를 실행합니다.
기본 환경
고객이 Nav SDK를 구현할 때는 턴바이턴 기능이 필요하다고 가정합니다. 따라서 Nav SDK 문서 (Android 및 iOS)에서는 단계별 안내가 사용 설정된 Nav SDK를 구현하는 방법을 안내합니다.
Android에서는 SupportNavigationFragment 또는 NavigationView를 사용하여 앱에서 세부 경로 지도를 렌더링하는 반면 iOS에서는 GMSMapView를 사용합니다. 이러한 UI 요소를 사용하면 앱에 대화형 지도와 세부 경로 안내 UI를 추가할 수 있습니다.
다음 섹션에서는 Android와 iOS 모두에서 턴바이턴 내비게이션이 사용 설정된 기본 Nav SDK 코드와 헤드리스 Nav SDK 코드를 비교하여 필요한 변경사항을 강조합니다.
솔루션
Android
Android에서는 Nav SDK 샘플 앱의 일부로 제공되는 Java 코드입니다.
@Override
@SuppressLint("MissingPermission")
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Obtain a reference to the NavigationFragment
setContentView(R.layout.activity_nav_fragment);
mNavFragment = (SupportNavigationFragment) getSupportFragmentManager().findFragmentById(R.id.navigation_fragment);
보시다시피 뷰는 탐색 환경을 그리는 데 사용해야 하는 레이아웃을 가리키며, 이 경우 NavigationView가 아닌 SupportNavigationFragment가 생성됩니다.
헤드리스 모드에서 Nav SDK가 시작되도록 하려면 이 두 명령어를 삭제하면 됩니다. 헤드리스와 비헤드리스 (활성 탐색) 간에 전환하려는 경우 변수를 사용하여 헤드리스를 사용해야 하는지 여부를 확인할 수 있습니다. 예를 들면 다음과 같습니다.
Boolean mHeadless = true;
그런 다음 다음과 같이 나중에 사용할 수 있습니다.
@Override
@SuppressLint("MissingPermission")
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Obtain a reference to the NavigationFragment
if(!mHeadless) {
setContentView(R.layout.activity_nav_fragment);
mNavFragment =
(SupportNavigationFragment)
getSupportFragmentManager().findFragmentById(R.id.navigation_fragment);
}
mHeadless
변수는 헤드리스를 사용 설정하거나 사용 중지하는 UI 구성요소 (예: 전환 버튼)에 연결할 수 있습니다.
![]() |
![]() |
활성 탐색으로 실행되는 탐색 SDK (헤드리스 꺼짐) | 동일한 앱이지만 이제 헤드리스 모드에서 Nav SDK가 실행됨 |
위 오른쪽 예에서 볼 수 있듯이 Nav SDK 탐색은 장면 아래에서 실행되지만 턴바이턴 환경은 사용 중지되어 있습니다.
iOS
iOS에서 MapView 초기화 중에 다음 설정을 추가하면 헤드리스 모드를 매우 쉽게 실행할 수 있습니다. \
mapView.isHidden = true
예를 들면 다음과 같습니다.
/// The main map view.
private lazy var mapView: GMSMapView = {
let mapView = GMSMapView(frame: .zero)
mapView.isHidden = true /// Make it headless!
mapView.isNavigationEnabled = true
mapView.settings.compassButton = true
mapView.delegate = self
return mapView
}()
화면은 UI가 구현된 방식에 따라 달라지며 스크린샷은 mapView 숨기기의 효과를 보여주기 위한 것입니다.
![]() |
![]() |
다음에서 활성 내비게이션이 실행 중입니다.
iOS 샘플 앱 |
헤드리스 모드의 동일한 앱 |
구현 관련 고려사항
헤드리스 모드는 화면에서 탐색 지도를 숨기는 것 외에는 아무것도 아니므로 화면 시간만 저장되어 기기의 배터리 시간이 늘어납니다. 하지만 Nav SDK는 계속 실행되므로 위치 업데이트와 모든 이벤트 콜백이 정상적으로 트리거되므로 이 구성을 사용하는 데 부작용은 없습니다.
결론
이 문서에서는 Nav SDK의 유연성과 제한사항이 있는 다양한 운영체제에서 달성할 수 있는 사항을 보여줍니다. 또한 고객이 운전 경험을 맞춤설정하여 주의를 분산시키지 않고 안전을 개선할 수 있습니다.
추가 리소스
앞서 언급한 이유로 탐색 중에 알림을 사용 중지해야 하는 경우에도 가능합니다. Nav SDK에서 세부 경로 알림 수정을 참고하세요.