Điều hướng một tuyến đường

Hãy làm theo hướng dẫn này để vạch ra một tuyến đường trong ứng dụng tới một đích đến duy nhất. bằng cách sử dụng SDK điều hướng dành cho iOS.

Tổng quan

  1. Tích hợp SDK điều hướng vào ứng dụng của bạn, như được mô tả trong phần Thiết lập dự án của bạn.
  2. Định cấu hình GMSMapView.
  3. Nhắc người dùng chấp nhận các điều khoản và điều kiện cũng như cấp quyền truy cập thông tin vị trí và thông báo nền.
  4. Tạo một mảng chứa một hoặc nhiều đích đến.
  5. Định nghĩa GMSNavigator để kiểm soát tính năng điều hướng từng chặng.

    • Thêm đích đến bằng cách sử dụng setDestinations.
    • Đặt isGuidanceActive đến true để bắt đầu đi theo chỉ dẫn.
    • Sử dụng simulateLocationsAlongExistingRoute để mô phỏng tiến trình của xe dọc theo tuyến đường, để thử nghiệm, gỡ lỗi và giới thiệu ứng dụng của bạn.

Xem mã

Nhắc người dùng về các hoạt động uỷ quyền cần thiết

Trước khi sử dụng SDK điều hướng, người dùng phải đồng ý với các điều khoản và điều kiện và cho phép sử dụng dịch vụ vị trí, tức là cần thiết để điều hướng. Nếu chạy ở chế độ nền thì ứng dụng của bạn cũng phải nhắc người dùng cho phép thông báo cảnh báo hướng dẫn. Phần này cho thấy cách hiển thị lời nhắc uỷ quyền bắt buộc.

Uỷ quyền dịch vụ vị trí

SDK điều hướng sử dụng dịch vụ vị trí, vốn yêu cầu uỷ quyền của người dùng. Để bật dịch vụ vị trí và hiển thị trạng thái uỷ quyền hãy thực hiện các bước sau:

  1. Thêm khoá NSLocationAlwaysUsageDescription vào Info.plist.
  2. Đối với giá trị này, hãy thêm nội dung giải thích ngắn về lý do ứng dụng của bạn cần có thông tin vị trí luôn miễn phí. Ví dụ: "Ứng dụng này cần có quyền sử dụng dịch vụ vị trí cho đường đi từng chặng".

  3. Để hiển thị hộp thoại uỷ quyền, hãy gọi requestAlwaysAuthorization() của phiên bản trình quản lý vị trí.

Swift

self.locationManager.requestAlwaysAuthorization()

Objective-C

[_locationManager requestAlwaysAuthorization];

Cho phép thông báo cảnh báo để xem hướng dẫn ở chế độ nền

SDK điều hướng cần có sự cho phép của người dùng để đưa ra cảnh báo khi ứng dụng đang chạy trong nền. Thêm mã sau để nhắc người dùng cấp quyền hiển thị những thông báo này:

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

Chấp nhận điều khoản và điều kiện

Sử dụng mã sau để hiện hộp thoại điều khoản và điều kiện, đồng thời bật thao tác khi người dùng chấp nhận các điều khoản. Xin lưu ý rằng ví dụ này bao gồm mã cho dịch vụ vị trí và thông báo cảnh báo hướng dẫn (hiển thị trước đó).

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

Tạo tuyến đường và bắt đầu hướng dẫn

Để vẽ đồ thị một tuyến đường, hãy gọi phương thức setDestinations() của Trình điều hướng bằng một mảng chứa một hoặc nhiều đích đến (GMSNavigationWaypoint) cần truy cập. Nếu thành công đã tính toán, thì tuyến đường sẽ được hiển thị trên bản đồ. Để bắt đầu hướng dẫn dọc theo tuyến đường, bắt đầu với đích đến đầu tiên, hãy đặt isGuidanceActive thành true trong .

Sau đây là ví dụ minh hoạ:

  • Tạo tuyến đường mới có 2 điểm đến.
  • Đang bắt đầu hướng dẫn.
  • Bật thông báo hướng dẫn ở chế độ nền.
  • Mô phỏng việc đi lại dọc theo tuyến đường (không bắt buộc).
  • Đặt chế độ máy ảnh thành "theo dõi" (không bắt buộc).

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

Để tìm hiểu về Mã địa điểm, vui lòng tham khảo bài viết Mã địa điểm.

Đặt phương tiện đi lại

Chế độ đi lại xác định loại tuyến đường sẽ được tìm nạp và cách thức khoá học của người dùng sẽ được xác định. Bạn có thể đặt một trong bốn chế độ đi lại cho tuyến đường: lái xe, đi xe đạp, đi bộ và taxi. Ở chế độ lái xe và taxi, khoá học của người dùng là dựa trên hướng di chuyển; ở chế độ đi xe đạp và đi bộ. được biểu thị bằng hướng của thiết bị.

Đặt travelMode của chế độ xem bản đồ, như được thể hiện trong ví dụ sau:

Swift

self.mapView.travelMode = .cycling

Objective-C

_mapView.travelMode = GMSNavigationTravelModeCycling;

Đặt đường cần tránh

Sử dụng các thuộc tính avoidsHighwaysavoidsTolls BOOL để tránh đường cao tốc và/hoặc đường có thu phí dọc theo một tuyến đường.

Swift

self.mapView.navigator?.avoidsTolls = true

Objective-C

_mapView.navigator.avoidsTolls = YES;

Trình tìm mã PlaceID

Bạn có thể sử dụng Trình tìm mã địa điểm để tìm mã địa điểm để dùng cho các điểm đến trong tuyến đường. Thêm một điểm đến qua placeID bằng GMSNavigationWaypoint.

Văn bản nổi

Bạn có thể thêm văn bản nổi ở bất cứ đâu trong ứng dụng của mình, miễn là chúng tôi không đề cập đến mô hình phân bổ giá trị đóng góp. SDK điều hướng không hỗ trợ neo văn bản thành một vĩ độ/kinh độ trên bản đồ hoặc cho một nhãn. Để biết thêm thông tin, xem Cửa sổ thông tin.