소개
Navigation SDK (Nav SDK)는 고객과 운전자, 특히 신규 운전자 또는 해당 지역에 익숙하지 않은 운전자에게 매우 유용한 최고 수준의 경로 안내 기능을 제공합니다. 하지만 경로 안내 UI로 운전자의 주의를 도로에서 벗어나게 하고 싶지 않지만 차량 위치를 추적하고 운전자가 따르는 경로와 관련된 이벤트를 수신 대기하려는 특정 사용 사례가 있습니다. 예를 들어 트럭 운전자, 특히 위험물을 운송하는 트럭 운전자가 있습니다. 짧은 거리를 걷는 등 다양한 방식으로 배송하는 다른 회사도 세부 경로 안내를 사용 설정할 필요가 없을 수 있으며, 이렇게 하면 기기의 배터리 수명을 절약할 수 있습니다.
범위
이 문서에서는 회사가 Nav SDK에서 내비게이션 지도 (뷰)를 숨기면서도 위치 추적, 이벤트 구독, 콜백과 관련하여 Nav SDK의 모든 기능을 활용하는 방법을 설명합니다. 헤드리스 모드에서 Nav SDK에서 캡처한 데이터를 사용하여 차량을 추적하고 도착 예정 시간을 더 정확하게 파악하는 기능을 개선할 수 있으며, 궁극적으로 투명성과 효율성을 높일 수 있습니다.
Navigation SDK
Navigation SDK는 운전자 앱에 추가되는 네이티브 Android / iOS 라이브러리입니다. 모빌리티의 맥락에서 다음을 담당합니다.
- 실행 중인 앱에서 도로에 스냅된 위치를 가져옵니다. 도로에 스냅된 위치는 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);
보시다시피 뷰는 내비게이션 환경을 그리는 데 사용해야 하는 레이아웃을 가리키며, 이 경우 SupportNavigationFragment가 아닌 NavigationView가 생성됩니다.
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 구성요소 (예: 전환)에 연결할 수 있습니다.
|
|
| 활성 내비게이션 (헤드리스 사용 중지)으로 실행되는 Nav 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에서 경로 안내 알림 수정을 참고하세요.