Co to jest niestandardowa nawigacja?

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ć.

  1. Utwórz sesję nawigacyjną przy użyciu GMSNavigationService.createNavigationSession i rozpocznij nawigację za pomocą wywołania setDestination. Gdy środowisko nawigacyjne Google wywołuje nawigatora za pomocą widoku mapy nawigacyjnej, interfejs GMSNavigationServices 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.
  2. 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.
  3. 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:
    1. Zaimplementuj pola zawierające tylko tekst do prostego przesyłania ekranu ze wskazówkami.
    2. projektować i wypełniać pola w interfejsie użytkownika,
  4. 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`];