Was ist die benutzerdefinierte Navigation?

Eine benutzerdefinierte Navigation kann alles bedeuten, von einer App, die die Routenführung vollständig mit der Navigation nur als Hintergrundprozess ausschaltet, bis hin zu einer App, die eine stark angepasste Anleitung auf einen Bildschirm projiziert, der sich von dem Gerät unterscheidet, auf dem der Navigator ausgeführt wird.

Was ist die benutzerdefinierte Navigation?

  • Navigation starten: Sie erstellen eine Navigationssitzung Wie bei der Google-Navigation umfasst auch eine benutzerdefinierte Navigation weiterhin das Erstellen einer Navigationsinstanz und das Festlegen des Ziels. Mit einer angepassten Navigation können Sie jedoch zuerst mit GMSNavigationServices eine Navigationssitzung einrichten. Eine Navigationssitzung ist ein zustandsbehaftetes Objekt ohne UI, das entweder mit oder ohne einen Ansichts-Controller ausgeführt werden kann.

    Demo ansehen:Der Download des Navigation SDK enthält eine Demo, mit der Sie sich ein Beispiel für eine Navigation ansehen können, bei der von der detaillierten Routenführung über die Standardnavigation zu einer Navigation gewechselt wird, bei der nur der Gerätestandort entlang einer Polylinie angezeigt wird.

  • Aktive Navigation – Sie stellen das Tool bereit. Hier ist ein weiterer wichtiger Unterschied zwischen einer von Google bereitgestellten und einer benutzerdefinierten Navigation. Anstatt die Anleitung an den integrierten Ereignismanager des Navigation SDK zu übergeben, aktivieren Sie den detaillierten Feed und implementieren Event-Handler über GMSNavigatorListener. So kann die App auf die unter Auf Navigationsereignisse warten beschriebenen Ereignisse reagieren.

  • Navigation beenden – selbstverständlich: Wie bei der Google-Navigation müssen Sie auch bei der benutzerdefinierten Navigation die Navigation so beenden, wie es für die jeweilige App am besten geeignet ist.

In der folgenden Tabelle werden einige Szenarien für die benutzerdefinierte Navigation beschrieben.

Beispiel

Allgemeine Schritte

Für kleine Geräte wie Zweiräder müssen Sie eine Fahrerführung in Textform anbieten.

Erstellen Sie Ihren Navigator und richten Sie die detaillierte Routenführung als Datenfeed für ein kleines Display ein, während die Navigation auf dem Mobiltelefon des Fahrers außerhalb des unmittelbaren Sichtfelds des Fahrers ausgeführt wird. Weitere Informationen finden Sie unter Schritt-für-Schritt-Datenfeed aktivieren.

Fahrer, die Ihre App verwenden, benötigen für den Großteil ihrer Fahrt eine Übersichtskarte mit nur minimaler detaillierter Routenführung für städtische Straßen.

Ihre App sollte es Fahrern ermöglichen, die Google-Navigation nach Bedarf zu starten und zu beenden, ohne die Einstellungen des Navigators für Ziel und Fahrtmodus zu ändern.

Für Kunden von Mobilitätsdiensten: Fahrer nutzen etablierte Routen oft gut und benötigen keine Anleitung. Sie müssen jedoch dafür sorgen, dass Ihr Fahrzeugverwaltungssystem Lieferungen oder Fahrten verwalten kann.

Richten Sie einen Navigator ein. Legen Sie das Ziel fest und erhalten Sie Standortaktualisierungen. Binden Sie das Driver SDK in Ihre Anwendung ein. Weitere Informationen finden Sie unter „Erste Schritte mit dem Driver SDK for On-demand Rides & Deliveries“ oder unter Last Mile Fleet Solution.

Individuelle Anleitung erstellen

In diesem Abschnitt werden die übergeordneten Schritte beschrieben, die Sie zum Erstellen einer benutzerdefinierten Anleitung ausführen.

Dieser Vorgang unterscheidet sich von dem unter Route navigieren beschriebenen Prozess:

  • Zuerst richten Sie unabhängig eine Navigationssitzung ein und rufen eine Navigator-Instanz über die Sitzung ab, anstatt den Ansichts-Controller aufzurufen.
  • Sie richten einen Event-Listener ein, um auf Navigationsereignisse zu reagieren und diese zu verwalten.

  1. Erstellen Sie eine Navigationssitzung mit GMSNavigationService.createNavigationSession und starten Sie die Navigation mit einem setDestination-Aufruf. Wenn die Google-Navigation den Navigator über die Kartenansicht für die Navigation aufruft, wird über GMSNavigationServices ein Ereignisstream einer Navigationssitzung unabhängig von einer UI-Instanz gesteuert und empfangen. Das bedeutet, dass sie entweder ohne UI ausgeführt oder an jede beliebige UI-basierte Umgebung übergeben werden kann. Bei diesem Ansatz wird die Navigationssitzung in Ihrer App weiter ausgeführt, bis die letzte Referenz daraus entfernt wird.
  2. Richten Sie einen Anbieter für die Standortbestimmung ein. Verwenden Sie den Standortanbieter, wenn Ihre App eine kontinuierliche Standortüberwachung haben soll, z. B. wenn eine Navigationsansicht mit einem blauen Punkt entlang der Route angezeigt wird.
  3. Richten Sie einen Listener für eine detaillierte detaillierte Anleitung ein, indem Sie das GMSNavigatorListener-Protokoll implementieren. Dann wandeln Sie diese Informationen in die für Ihre benutzerdefinierte Navigation benötigte Art um. Beispiel:
    1. Implementieren Sie reine Textfelder für ein einfaches Bildschirmstreaming von Wegbeschreibungen.
    2. Entwerfen Sie Felder für Ihre eigene Benutzeroberfläche und füllen Sie sie aus.
  4. Richten Sie einen Navigationssimulator ein. Dies ist für Entwicklung und Tests erforderlich.

Unabhängige Navigationssitzung erstellen

Die folgenden Code-Snippets aus der Demo zeigen die vom Ansichts-Controller unabhängige Navigation. Mit dem Code wird dann eine Übersichtskarte hinzugefügt, die so konfiguriert ist, dass die aktuelle, an der Straße eingezeichnete Position angezeigt wird.

// 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;

Navigation von der benutzerdefinierten Oberfläche an die Google-Umgebung übergeben

Dieses Code-Snippet zeigt, wie Nutzer in Ihrer App die Google-Navigation über eine benutzerdefinierte Navigation aufrufen können. Dieses Code-Snippet zeigt auch, wie Ihre App diesen Übergang beim Teilen der Karte vornimmt.

`UIButton *button = [UIButton buttonWithType:UIButtonTypePlain`];

[`button addTarget:self action:@selector(didTapEnterGoogleNavigationButton:)
forControlState:[_directionsButton addTarget:self`];

`…`

[`_mapView enableNavigationWithSession:_navigationSession`];