Spersonalizowana nawigacja może obejmować wszystko: od aplikacji, która całkowicie eliminuje wskazówki skrętu, gdy nawigacja działa tylko w tle, po aplikację, która wyświetla wysoce dostosowane wskazówki na ekranie niezależnym od urządzenia, na którym działa nawigator.
Czym jest niestandardowa nawigacja?
Rozpocznij nawigację – tworzysz sesję nawigacji. Tak jak w przypadku nawigacji Google, niestandardowa nawigacja nadal obejmuje utworzenie instancji nawigacji i ustawienie miejsca docelowego. Aby jednak osiągnąć to, korzystając ze spersonalizowanej nawigacji, musisz najpierw utworzyć sesję nawigacji za pomocą
GMSNavigationServices
. Sesja nawigacyjna to bezpretensjonalny obiekt bez interfejsu użytkownika, który może działać z kontrolerem widoku lub bez niego.Zobacz prezentację: w pobranym pakiecie SDK do nawigacji znajduje się prezentacja, którą możesz uruchomić, by zobaczyć przykład nawigacji przełączający się między szczegółowymi wskazówkami nawigacji w ramach standardowej nawigacji a nawigacją, która pokazuje tylko lokalizację urządzenia poruszającą się wzdłuż linii łamanej drogi.
Aktywna nawigacja – udostępniasz ją. Oto kolejna kluczowa różnica między nawigacją udostępnianą przez Google a niestandardową nawigacją. Zamiast przekazywać wskazówki wbudowanemu menedżerowi zdarzeń w nawigacji SDK, możesz włączyć szczegółowy kanał i zaimplementować moduły obsługi zdarzeń za pomocą interfejsu
GMSNavigatorListener
. Dzięki temu usługa będzie mogła reagować na zdarzenia opisane w sekcji Nasłuchiwanie zdarzeń nawigacji.Zakończ nawigację – podajesz je samodzielnie. Podobnie jak w przypadku nawigacji Google, niestandardowa nawigacja wymaga również zakończenia nawigacji w sposób najlepiej pasujący do aplikacji.
W poniższej tabeli opisano kilka niestandardowych scenariuszy dotyczących nawigacji.
Przykładowy scenariusz |
Kroki ogólne |
---|---|
W przypadku małych urządzeń, takich jak pojazdy dwukołowe, musisz podawać wskazówki tylko dla kierowcy. |
Utwórz nawigację zakręt po zakręcie jako plik ze szczegółowymi danymi przesyłanymi na urządzenie z małym ekranem, gdy nawigator działa na telefonie komórkowym kierowcy poza jego bezpośrednim widokiem. Zobacz Włączanie przesyłania danych zakręt po zakręcie. |
Kierowcy korzystający z Twojej aplikacji chcą mieć mapę poglądową z poziomu mapy z niewielkimi informacjami zakręt po zakręcie. |
Twoja aplikacja powinna umożliwiać kierowcom włączanie i wyłączanie nawigacji Google według potrzeb bez zmieniania ustawień nawigatora dotyczących miejsca docelowego i trybu podróży. |
Klienci korzystający z usług mobilnych: kierowcy często pokonują ustalone trasy i w ogóle nie potrzebują pomocy. Potrzebujesz jednak sposobu, by system zarządzania pojazdem mógł zarządzać dostawami lub podróżami. |
Skonfiguruj nawigator. Ustaw miejsce docelowe i pobierz aktualizacje lokalizacji. Zintegruj pakiet SDK Driver ze swoją aplikacją. Więcej informacji znajdziesz w artykułach Pierwsze kroki z pakietem Driver SDK do obsługi Przejazdów i dostaw na żądanie oraz Rozwiązanie Last Mile Fleet Solution. |
Utwórz spersonalizowane wskazówki
W tej sekcji omawiamy ogólne kroki, które należy wykonać, aby utworzyć dostosowane wskazówki.
Ten proces różni się od procesu opisanego w sekcji Nawigowanie po trasie w ten sposób:
- Najpierw należy utworzyć sesję nawigacji niezależnie i uzyskać w niej instancję nawigatora, zamiast wywoływać kontroler widoku.
- Możesz skonfigurować detektor zdarzeń, aby odpowiadać na zdarzenia nawigacji i nimi zarządzać.
- Utwórz sesję nawigacyjną przy użyciu
GMSNavigationService.createNavigationSession
i rozpocznij nawigację za pomocą wywołaniasetDestination
. Gdy środowisko nawigacyjne Google wywołuje nawigatora za pomocą widoku mapy nawigacyjnej, interfejsGMSNavigationServices
kontroluje i odbiera strumień zdarzeń z sesji nawigacji niezależnie z instancji interfejsu. Oznacza to, że może działać bez interfejsu użytkownika lub przejść do dowolnego innego interfejsu. Przy tym podejściu sesja nawigacyjna będzie działać w aplikacji, dopóki nie usuniesz z niej ostatniego odniesienia. - Utwórz dostawcę usług lokalizacyjnych dla dróg. Wybierz dostawcę lokalizacji, jeśli chcesz, aby aplikacja stale monitorowała lokalizację, np. w widoku nawigacji z niebieską kropką wzdłuż trasy.
- Skonfiguruj detektor, aby uzyskać szczegółowe wskazówki zakręt po zakręcie, implementując protokół
GMSNavigatorListener
. Następnie przekształć te informacje w elementy, które są potrzebne do niestandardowej nawigacji. Na przykład:- Zaimplementuj pola zawierające tylko tekst do prostego przesyłania ekranu ze wskazówkami.
- projektować i wypełniać pola w interfejsie użytkownika,
- Skonfiguruj symulator nawigacji. Jest to niezbędne do programowania i testowania.
Utwórz niezależną sesję nawigacji
Poniższe fragmenty kodu z demonstracji pokazują nawigację utworzoną niezależnie od kontrolera widoku. Następnie dodaje do niego mapę ogólną skonfigurowaną tak, aby pokazywała aktualną lokalizację przypisaną do danego obszaru.
// 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;
Przekazywanie nawigacji z niestandardowego interfejsu do środowiska Google
Ten fragment kodu ilustruje, jak aplikacja może umożliwiać użytkownikowi dostęp do nawigacji Google z poziomu niestandardowej nawigacji. Ten fragment kodu pokazuje też, jak aplikacja wykonuje tę zmianę podczas udostępniania mapy.
`UIButton *button = [UIButton buttonWithType:UIButtonTypePlain`];
[`button addTarget:self action:@selector(didTapEnterGoogleNavigationButton:)
forControlState:[_directionsButton addTarget:self`];
`…`
[`_mapView enableNavigationWithSession:_navigationSession`];