이 페이지에서는 맞춤 탐색 환경의 일부로 맞춤 안내를 만드는 데 필요한 대략적인 단계를 설명합니다.
이 프로세스는 다음과 같이 경로 탐색에 설명된 프로세스와 다릅니다.
- 먼저 탐색 세션을 독립적으로 설정하고 뷰 컨트롤러를 호출하는 대신 세션을 통해 탐색기 인스턴스를 가져옵니다.
- 탐색 이벤트에 응답하고 이를 관리하는 이벤트 리스너를 설정합니다.
GMSNavigationService.createNavigationSession
를 사용하여 탐색 세션을 만들고setDestination
호출로 탐색을 시작합니다. Google 내비게이션 환경이 내비게이션 지도 뷰를 통해 내비게이션을 호출하는 경우GMSNavigationServices
는 UI 인스턴스와 독립적으로 내비게이션 세션의 이벤트 스트림을 제어하고 수신합니다. 즉, UI 없이 실행되거나 모든 UI 기반 환경에 전달될 수 있습니다. 이 접근 방식을 사용하면 마지막 참조가 앱에서 삭제될 때까지 탐색 세션이 앱에서 계속 실행됩니다.- 도로에 맞춰진 위치 정보 제공자 설정 경로를 따라 파란색 점이 있는 탐색 뷰를 표시할 때와 같이 앱에서 지속적인 위치 모니터링을 사용하려면 위치 제공자를 사용하세요.
GMSNavigatorListener
프로토콜을 구현하여 세부적인 경로 안내를 위한 리스너를 설정합니다. 그런 다음 이 정보를 맞춤 탐색 환경에 필요한 것으로 변환합니다. 예를 들면 다음과 같습니다.- 경로를 간단하게 화면 전송하기 위해 텍스트 전용 필드를 구현합니다.
- 자체 UI의 필드를 설계하고 채웁니다.
- 탐색 시뮬레이터를 설정합니다. 이는 개발 및 테스트에 필요합니다.
독립적인 탐색 세션 만들기
데모의 다음 코드 스니펫은 뷰 컨트롤러와는 별개로 설정된 탐색을 보여줍니다. 그런 다음 코드는 현재 도로 스냅 위치를 표시하도록 구성된 개요 지도를 추가합니다.
// Create the navigation session.
_navigationSession = [GMSNavigationServices createNavigationSession];
GMSRoadSnappedLocationProvider *roadSnappedLocationProvider =
_navigationSession.roadSnappedLocationProvider;
[roadSnappedLocationProvider startUpdatingLocation];
GMSNavigator *navigator = _navigationSession.navigator;
[navigator addListener:self];
navigator.voiceGuidance = GMSNavigationVoiceGuidanceSilent;
navigator.sendsBackgroundNotifications = NO;
_navigationSession.started = YES;
[navigator setDestinations:@[ destination ]
callback:^(GMSRouteStatus routeStatus) {
// …handle changes in route status.
}];
// Add an overview map.
_mapView = [[GMSMapView alloc] initWithFrame:CGRectZero];
[self.mainStackView addArrangedSubview:_mapView];
[self.mainStackView setNeedsLayout];
_mapView.settings.compassButton = YES;
_mapView.delegate = self;
_mapView.myLocationEnabled = YES;
_mapView.roadSnappedMyLocationSource = roadSnappedLocationProvider;
맞춤 환경에서 Google 환경으로 탐색 전달
이 코드 스니펫은 앱에서 사용자가 맞춤 탐색 환경에서 Google 탐색 환경으로 이동할 수 있도록 허용하는 방법을 보여줍니다. 이 코드 스니펫은 앱이 지도를 공유하는 동안 이 전환을 실행하는 방법도 보여줍니다.
`UIButton *button = [UIButton buttonWithType:UIButtonTypePlain`];
[`button addTarget:self action:@selector(didTapEnterGoogleNavigationButton:)
forControlState:[_directionsButton addTarget:self`];
`…`
[`_mapView enableNavigationWithSession:_navigationSession`];