瀏覽路線

請按照本指南的說明,繪製應用程式中前往單一目的地的路線。 也就是使用 Navigation SDK for iOS

總覽

  1. 按照說明,將 Navigation SDK 整合到您的應用程式中 在「設定專案」部分中。
  2. 設定 GMSMapView
  3. 提示使用者接受條款及細則,然後授權所在位置 服務與背景通知
  4. 建立包含一或多個目的地的陣列。
  5. 定義 GMSNavigator 則可控制即時路線導航。

,瞭解如何調查及移除這項存取權。

查看程式碼

提示使用者進行必要的授權

使用 Navigation SDK 前,使用者必須同意 條款及細則,以及授權使用定位服務 ( 導覽所需的費用如果應用程式會在背景執行,必須一併在背景執行 提示使用者授權指引快訊通知。本節列出 如何顯示必要的授權提示

授權定位服務

Navigation SDK 使用定位服務, 使用者授權。啟用定位服務並顯示授權 對話方塊中,請採取下列步驟:

  1. NSLocationAlwaysUsageDescription 鍵新增至 Info.plist
  2. 請為值新增簡短說明,說明應用程式需要位置資訊的原因 免費 Google Cloud 服務例如:「這個應用程式需要相關權限,才能使用定位服務 即時路況導航」

  3. 如要顯示授權對話方塊,請呼叫以下應用程式的 requestAlwaysAuthorization(): 位置管理員執行個體

Swift

self.locationManager.requestAlwaysAuthorization()

Objective-C

[_locationManager requestAlwaysAuthorization];

為背景指引授權快訊通知

Navigation SDK 需要使用者權限才能提供快訊 當應用程式在背景執行時,系統會發送通知。加入下列程式碼 提示使用者授予顯示這些通知的權限:

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

接受條款及細則

使用下列程式碼顯示條款及細則對話方塊,然後啟用 導覽按鈕。請注意,本範例包括 定位服務和導航快訊通知的程式碼 (如下所示) )。

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

建立路徑並開始導航

如要繪製路線,請使用陣列呼叫導覽器的 setDestinations() 方法 包含一或多個想造訪的目的地 (GMSNavigationWaypoint)。如果成功 就會在地圖上顯示路線如要在路線上開始導航, 開頭是第一個目的地,請將其中的 isGuidanceActive 設為 true 回呼。

在下列範例中:

  • 建立具有兩個目的地的新路徑。
  • 開始指引。
  • 啟用背景指引通知。
  • 模擬沿路線行駛 (選用)。
  • 將相機模式設定為「跟隨」(選用)。

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

如要進一步瞭解地點 ID,請參閱「地點 ID」。

設定交通方式

交通方式會決定要擷取的路線類型及交通方式 課程內容取決於使用者的課程你可以從四種交通方式中選擇一種, 路線:開車、騎自行車、步行和計程車。在開車和計程車模式中,使用者的賽道是 運輸;像是騎自行車和步行模式? 。

設定 travelMode 屬性,如以下範例所示:

Swift

self.mapView.travelMode = .cycling

Objective-C

_mapView.travelMode = GMSNavigationTravelModeCycling;

設定要避開的道路

使用 avoidsHighwaysavoidsTolls BOOL 屬性,即可避免 沿途的高速公路和/或收費路段

Swift

self.mapView.navigator?.avoidsTolls = true

Objective-C

_mapView.navigator.avoidsTolls = YES;

PlaceID 搜尋器

您可以使用 PlaceID Finder ,找出用於路線目的地的地點 ID。使用 GMSNavigationWaypointplaceID 新增目的地。

浮動文字

您可以在應用程式的任何位置加入浮動文字,但前提是 Google 這不在涵蓋範圍內Navigation SDK 不支援錨定 傳送至地圖上的經緯度,或是標籤。如需更多資訊 請參閱資訊視窗