Menavigasi rute

Ikuti panduan ini untuk memplot rute dalam aplikasi Anda ke satu tujuan, menggunakan Navigation SDK for iOS.

Ringkasan

  1. Integrasikan Navigation SDK ke dalam aplikasi Anda, seperti yang dijelaskan di bagian Menyiapkan project.
  2. Konfigurasi a GMSMapView.
  3. Minta pengguna untuk menyetujui persyaratan dan ketentuan, serta mengotorisasi layanan lokasi dan notifikasi latar belakang.
  4. Buat array yang berisi satu atau beberapa tujuan.
  5. Tentukan GMSNavigator untuk mengontrol navigasi belokan demi belokan.

Melihat kode

Meminta otorisasi yang diperlukan kepada pengguna

Sebelum menggunakan Navigation SDK, pengguna harus menyetujui persyaratan dan ketentuan, serta mengotorisasi penggunaan layanan lokasi, yang diperlukan untuk navigasi. Jika aplikasi Anda akan berjalan di latar belakang, aplikasi juga harus meminta pengguna untuk mengotorisasi notifikasi pemberitahuan panduan. Bagian ini menunjukkan cara menampilkan perintah otorisasi yang diperlukan.

Mengotorisasi layanan lokasi

Navigation SDK menggunakan layanan lokasi, yang memerlukan otorisasi pengguna. Untuk mengaktifkan layanan lokasi dan menampilkan dialog otorisasi, ikuti langkah-langkah berikut:

  1. Tambahkan kunci NSLocationWhenInUseUsageDescription dan NSLocationAlwaysAndWhenInUseUsage ke Info.plist.
  2. Untuk nilainya, tambahkan penjelasan singkat tentang alasan aplikasi Anda memerlukan layanan lokasi. Misalnya: "Aplikasi ini memerlukan izin untuk menggunakan layanan lokasi untuk navigasi belokan demi belokan."

  3. Untuk menampilkan dialog otorisasi, panggil metode requestAlwaysAuthorization() dari instance pengelola lokasi.

Swift

self.locationManager.requestAlwaysAuthorization()

Objective-C

[_locationManager requestAlwaysAuthorization];

Lihat dokumentasi Apple lengkap untuk otorisasi layanan lokasi.

Mengotorisasi notifikasi pemberitahuan untuk panduan latar belakang

Navigation SDK memerlukan izin pengguna untuk memberikan notifikasi pemberitahuan saat aplikasi berjalan di latar belakang. Tambahkan kode berikut untuk meminta izin pengguna untuk menampilkan notifikasi ini:

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");
     }
   }];

Menyetujui persyaratan dan ketentuan

Gunakan kode berikut untuk menampilkan dialog persyaratan dan ketentuan, serta mengaktifkan navigasi saat pengguna menyetujui persyaratan tersebut. Perhatikan bahwa contoh ini menyertakan kode untuk layanan lokasi dan notifikasi pemberitahuan panduan (ditampilkan sebelumnya).

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.
   }
 }];

Membuat rute dan memulai panduan

Untuk memplot rute, panggil metode setDestinations() Navigator dengan array satu atau beberapa tujuan (GMSNavigationWaypoint) yang akan dikunjungi. Jika berhasil dihitung, rute akan ditampilkan di peta. Untuk memulai panduan di sepanjang rute, tetapkan isGuidanceActive ke true dalam callback.

Contoh berikut menampilkan:

  • Membuat rute baru dengan satu tujuan.
  • Memulai panduan.
  • Mengaktifkan notifikasi panduan latar belakang.
  • Menyimulasikan perjalanan di sepanjang rute (opsional).
  • Menetapkan mode kamera ke "ikuti" (opsional).

Swift

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

  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"],

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

Untuk mempelajari ID Tempat, lihat ID Tempat.

Skenario multi-perhentian

Anda dapat mengonfigurasi maksimum 25 titik jalan.

Metode setDestinations tidak mendukung perjalanan multi-perhentian. Gunakan continueToNextDestinationWithCompletion() untuk memajukan titik jalan ke segmen perjalanan berikutnya.

Menetapkan moda transportasi

Moda transportasi menentukan jenis rute yang akan diambil, dan cara menentukan jalur pengguna. Anda dapat menetapkan salah satu dari empat moda transportasi untuk rute: mengemudi, bersepeda, berjalan kaki, dan taksi. Dalam mode mengemudi dan taksi, jalur pengguna didasarkan pada arah perjalanan; dalam mode bersepeda dan berjalan kaki, jalur diwakili oleh arah perangkat menghadap (ke bagian atas perangkat dalam mode lanskap).

Tetapkan properti travelMode tampilan peta, seperti yang ditunjukkan dalam contoh berikut:

Swift

self.mapView.travelMode = .cycling

Objective-C

_mapView.travelMode = GMSNavigationTravelModeCycling;

Menetapkan jalan yang akan dihindari

Gunakan properti avoidsHighways dan avoidsTolls BOOL untuk menghindari jalan raya dan/atau jalan tol di sepanjang rute.

Swift

self.mapView.navigator?.avoidsTolls = true

Objective-C

_mapView.navigator.avoidsTolls = YES;

Pencari PlaceID

Anda dapat menggunakan Pencari PlaceID untuk menemukan ID tempat yang akan digunakan untuk tujuan rute. Tambahkan tujuan dari placeID dengan GMSNavigationWaypoint.

Teks mengambang

Anda dapat menambahkan teks mengambang di mana saja dalam aplikasi, selama atribusi Google tidak tercakup. Navigation SDK tidak mendukung penjangkaran teks ke lintang/bujur di peta, atau ke label. Untuk mengetahui informasi selengkapnya, lihat Jendela info.