Poruszanie się po trasie

Skorzystaj z tego przewodnika, aby wyznaczyć w aplikacji trasę do jednego miejsca docelowego. przy użyciu pakietu Navigation SDK na iOS.

Omówienie

  1. Zintegruj pakiet SDK nawigacji z aplikacją zgodnie z opisem znajdziesz w sekcji Skonfiguruj projekt.
  2. Skonfiguruj GMSMapView.
  3. Pytaj użytkownika o zaakceptowanie warunków korzystania z usługi i autoryzację lokalizacji i powiadomienia w tle.
  4. Utwórz tablicę zawierającą co najmniej jedno miejsce docelowe.
  5. Zdefiniuj element GMSNavigator do sterowania nawigacją zakręt po zakręcie.

.

Zobacz kod

Pytaj użytkownika o niezbędne autoryzacje

Przed rozpoczęciem korzystania z pakietu Navigation SDK użytkownik musi wyrazić zgodę na Warunków korzystania z usługi oraz upoważniania do korzystania z usług lokalizacyjnych, wymagane do nawigacji. Jeśli aplikacja działa w tle, musi też proszą użytkownika o autoryzowanie powiadomień o alertach dotyczących wskazówek. Ta sekcja pokazuje jak wyświetlać wymagane prośby o autoryzację.

Autoryzacja usług lokalizacyjnych

Pakiet Navigation SDK korzysta z usług lokalizacyjnych, które wymagają autoryzacją użytkownika. Aby włączyć usługi lokalizacyjne i wyświetlić autoryzację , wykonaj te czynności:

  1. Dodaj klucz NSLocationAlwaysUsageDescription do Info.plist.
  2. Jako wartość podaj krótkie wyjaśnienie, dlaczego aplikacja wymaga dostępu do lokalizacji. usług Google. Na przykład: „Ta aplikacja wymaga uprawnień do korzystania z usług lokalizacyjnych dla: szczegółowe wskazówki dojazdu."

  3. Aby wyświetlić okno autoryzacji, wywołaj requestAlwaysAuthorization() z instancję menedżera lokalizacji.

Swift

self.locationManager.requestAlwaysAuthorization()

Objective-C

[_locationManager requestAlwaysAuthorization];

Autoryzuj powiadomienia o alertach na potrzeby wskazówek w tle

Aby wysyłać alerty, pakiet Navigation SDK wymaga zgody użytkownika powiadomienia, gdy aplikacja działa w tle. Dodaj ten kod aby wyświetlić użytkownikowi prośbę o zgodę na wyświetlanie tych powiadomień:

Swift

UNUserNotificationCenter.current().requestAuthorization(options: [.alert]) {
  granted, error in
    // Handle denied authorization to display notifications.
    if !granted || error != nil {
      print("User rejected request to display notifications.")
    }
}

Objective-C

// Request authorization for alert notifications.
UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
UNAuthorizationOptions options = UNAuthorizationOptionAlert;
[center requestAuthorizationWithOptions:options
                      completionHandler:
 ^(
   BOOL granted,
   NSError *_Nullable error) {
     if (!error && granted) {
       NSLog(@"iOS Notification Permission: newly Granted");
     } else {
       NSLog(@"iOS Notification Permission: Failed or Denied");
     }
   }];

Zaakceptuj Warunki korzystania z usługi.

Użyj poniższego kodu, aby wyświetlić okno z warunkami korzystania z usługi i włączyć nawigacji po zaakceptowaniu warunków przez użytkownika. Pamiętaj, że ten przykład zawiera kod usług lokalizacyjnych i alertów dotyczących wskazówek (widocznych wcześniej).

Swift

  let termsAndConditionsOptions = GMSNavigationTermsAndConditionsOptions(companyName: "Ride Sharing Co.")

  GMSNavigationServices.showTermsAndConditionsDialogIfNeeded(
    with: termsAndConditionsOptions) { termsAccepted in
    if termsAccepted {
      // Enable navigation if the user accepts the terms.
      self.mapView.isNavigationEnabled = true
      self.mapView.settings.compassButton = true

      // Request authorization to use location services.
      self.locationManager.requestAlwaysAuthorization()

      // Request authorization for alert notifications which deliver guidance instructions
      // in the background.
    UNUserNotificationCenter.current().requestAuthorization(options: [.alert]) {
      granted, error in
        // Handle rejection of notification authorization.
        if !granted || error != nil {
          print("Authorization to deliver notifications was rejected.")
        }
      }
    } else {
      // Handle rejection of terms and conditions.
    }
  }

Objective-C

GMSNavigationTermsAndConditionsOptions *termsAndConditionsOptions = [[GMSNavigationTermsAndConditionsOptions alloc] initWithCompanyName:@"Ride Sharing Co."];

[GMSNavigationServices
  showTermsAndConditionsDialogIfNeededWithOptions:termsAndConditionsOptions
  callback:^(BOOL termsAccepted) {
   if (termsAccepted) {
     // Enable navigation if the user accepts the terms.
     _mapView.navigationEnabled = YES;
     _mapView.settings.compassButton = YES;

     // Request authorization to use the current device location.
     [_locationManager requestAlwaysAuthorization];

     // Request authorization for alert notifications which deliver guidance instructions
     // in the background.
     UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
     UNAuthorizationOptions options = UNAuthorizationOptionAlert;
     [center requestAuthorizationWithOptions:options
                           completionHandler:
     ^(
       BOOL granted,
       NSError *_Nullable error) {
         if (!error && granted) {
           NSLog(@"iOS Notification Permission: newly Granted");
         } else {
           NSLog(@"iOS Notification Permission: Failed or Denied");
         }
       }];
   } else {
     // Handle rejection of the terms and conditions.
   }
 }];

Utwórz trasę i włącz wskazówki

Aby wyznaczyć trasę, wywołaj metodę setDestinations() nawigatora z tablicą zawierające co najmniej jedno miejsce docelowe (GMSNavigationWaypoint), które chcesz odwiedzić. Jeśli udało się trasa zostanie wyświetlona na mapie. Aby włączyć wskazówki na trasie, zaczynając od pierwszego miejsca docelowego, ustaw isGuidanceActive na true w oddzwanianie.

Oto przykład:

  • Tworzę nową trasę z dwoma miejscami docelowymi.
  • Wskazówki wstępne.
  • Włączam powiadomienia ze wskazówkami w tle.
  • Symulowanie podróży wzdłuż trasy (opcjonalnie).
  • Ustawianie trybu aparatu na „Obserwuj” (opcjonalne).

Swift

func startNav() {
  var destinations = [GMSNavigationWaypoint]()
  destinations.append(GMSNavigationWaypoint.init(placeID: "ChIJnUYTpNASkFQR_gSty5kyoUk",
                                                 title: "PCC Natural Market")!)
  destinations.append(GMSNavigationWaypoint.init(placeID:"ChIJJ326ROcSkFQRBfUzOL2DSbo",
                                                 title:"Marina Park")!)

  mapView.navigator?.setDestinations(destinations) { routeStatus in
    self.mapView.navigator?.isGuidanceActive = true
    self.mapView.locationSimulator?.simulateLocationsAlongExistingRoute()
    self.mapView.cameraMode = .following
  }
}

Objective-C

- (void)startNav {
  NSArray<GMSNavigationWaypoint *> *destinations =
  @[[[GMSNavigationWaypoint alloc] initWithPlaceID:@"ChIJnUYTpNASkFQR_gSty5kyoUk"
                                             title:@"PCC Natural Market"],
    [[GMSNavigationWaypoint alloc] initWithPlaceID:@"ChIJJ326ROcSkFQRBfUzOL2DSbo"
                                             title:@"Marina Park"]];

  [_mapView.navigator setDestinations:destinations
                             callback:^(GMSRouteStatus routeStatus){
                               [_mapView.locationSimulator simulateLocationsAlongExistingRoute];
                               _mapView.navigator.guidanceActive = YES;
                               _mapView.cameraMode = GMSNavigationCameraModeFollowing;
                             }];
}

Więcej informacji o identyfikatorach miejsc znajdziesz w artykule Identyfikatory miejsc.

Wybierz środek transportu

Tryb podróży określa, jaki rodzaj trasy zostanie pobrany oraz w jaki sposób przeszkody użytkownika. Możesz ustawić jeden z czterech trybów podróży dla trasa: samochodem, rowerem, pieszo lub taksówką. W trybie samochodowym i taksówkowym trasa użytkownika jest taka: w zależności od kierunku jazdy; w trybie spacerowym i rowerowym trasa jest oznaczany kierunkiem, w którym jest ustawione urządzenie.

Ustawianie travelMode w widoku mapy, jak w poniższym przykładzie:

Swift

self.mapView.travelMode = .cycling

Objective-C

_mapView.travelMode = GMSNavigationTravelModeCycling;

Ustaw drogi, których chcesz unikać

Aby tego uniknąć, używaj właściwości avoidsHighways i avoidsTolls BOOL. autostradami lub drogami płatnymi wzdłuż trasy.

Swift

self.mapView.navigator?.avoidsTolls = true

Objective-C

_mapView.navigator.avoidsTolls = YES;

Wyszukiwarka PlaceID

Możesz skorzystać z wyszukiwarki PlaceID , by znaleźć identyfikatory miejsc, których możesz użyć w przypadku celów podróży. Dodaj miejsce docelowe z: placeID z: GMSNavigationWaypoint.

Tekst pływający

Możesz dodawać tekst pływający w dowolnym miejscu w aplikacji, gdy korzystasz z tagu Google atrybucja nie jest brana pod uwagę. Pakiet Navigation SDK nie obsługuje zakotwiczenia szerokości i długości geograficznej na mapie lub etykiety. Aby dowiedzieć się więcej, zobacz Okna informacyjne.