이 페이지에서는 맞춤 탐색 환경의 일부로 맞춤 안내를 만들기 위해 따르는 대략적인 단계를 설명합니다.
이 프로세스는 경로 탐색에 설명된 프로세스와 다음과 같이 다릅니다.
- 먼저 탐색 세션을 독립적으로 설정하고 뷰 컨트롤러를 호출하는 대신 세션을 통해 탐색기 인스턴스를 가져옵니다.
- 탐색 이벤트에 응답하고 이를 관리하도록 이벤트 리스너를 설정합니다.
탐색 세션을 만들고
GMSNavigationService.createNavigationSession호출로 탐색을 시작합니다.setDestinationGoogle 탐색 환경에서 탐색 지도 뷰를 통해 탐색기를 호출하는 경우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`];