Hãy làm theo hướng dẫn này để vẽ một tuyến đường trong ứng dụng của bạn đến một điểm đến duy nhất bằng cách sử dụng Navigation SDK cho iOS.
Tổng quan
- Tích hợp Navigation SDK vào ứng dụng của bạn như mô tả trong phần Thiết lập dự án.
- Định cấu hình a
GMSMapView. - Nhắc người dùng chấp nhận các điều khoản và điều kiện, đồng thời cho phép dịch vụ vị trí và thông báo trong nền.
- Tạo một mảng chứa một hoặc nhiều điểm đến.
Xác định
GMSNavigatorđể kiểm soát tính năng chỉ đường từng chặng.- Thêm điểm đến bằng cách sử dụng
setDestinations. - Đặt
isGuidanceActivethànhtrueđể bắt đầu chỉ đường. - Sử dụng
simulateLocationsAlongExistingRouteđể mô phỏng tiến trình của xe dọc theo tuyến đường nhằm mục đích kiểm thử, gỡ lỗi và minh hoạ ứng dụng của bạn.
- Thêm điểm đến bằng cách sử dụng
Xem mã
Nhắc người dùng cấp các quyền cần thiết
Trước khi sử dụng Navigation SDK, người dùng phải đồng ý với các điều khoản và điều kiện, đồng thời cho phép sử dụng dịch vụ vị trí (bắt buộc để chỉ đường). Nếu chạy trong nền, ứ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 chỉ đường. Phần này trình bày cách hiển thị lời nhắc cấp quyền bắt buộc.
Cho phép dịch vụ vị trí
Navigation SDK sử dụng dịch vụ vị trí, yêu cầu người dùng cho phép. Để bật dịch vụ vị trí và hiển thị hộp thoại cho phép, hãy làm theo các bước sau:
Bật các tính năng vị trí và nền trong Xcode:
- Mở mục tiêu của bạn trong Xcode rồi chọn thẻ Signing &Capabilities (Ký và các tính năng). Để biết thông tin chi tiết, hãy xem hướng dẫn của Apple về cách thêm các tính năng vào ứng dụng của bạn.
- Thêm các tính năng Location (Always) (Vị trí (Luôn luôn)) và Location (When In Use) (Vị trí (Khi sử dụng)). Trong trường văn bản cho từng tính năng, hãy thêm một lời giải thích ngắn gọn về lý do ứng dụng của bạn yêu cầu dịch vụ vị trí (ví dụ: "Ứng dụng này cần có quyền sử dụng dịch vụ vị trí để chỉ đường từng chặng").
- Thêm tính năng Background Modes (Chế độ nền), sau đó chọn hộp đánh dấu Location updates (Cập nhật vị trí). Nếu không có khả năng này, ứng dụng sẽ gặp sự cố khi bắt đầu chỉ đường. Để biết thông tin chi tiết, hãy xem hướng dẫn của Apple về cách xử lý các bản cập nhật vị trí ở chế độ nền.
Để hiển thị hộp thoại cho phép, hãy gọi
requestAlwaysAuthorization()phương thức của thực thể trình quản lý vị trí.
Swift
self.locationManager.requestAlwaysAuthorization()
Objective-C
[_locationManager requestAlwaysAuthorization];
Xem tài liệu đầy đủ của Apple về việc cho phép dịch vụ vị trí.
Cho phép thông báo cảnh báo để chỉ đường trong nền
Navigation SDK cần có sự cho phép của người dùng để cung cấp thông báo cảnh báo khi ứng dụng đang chạy trong nền. Hãy thêm mã sau đây để nhắc người dùng cho phép hiển thị các 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 các điều khoản và điều kiện
Sử dụng mã sau đây để hiển thị hộp thoại điều khoản và điều kiện, đồng thời cho phép chỉ đường 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 chỉ đường (đã trình bày 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 chỉ đường
Để vẽ 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 gồm
một hoặc nhiều
GMSNavigationWaypoint
điểm đến cần ghé thăm. Nếu tính toán thành công, tuyến đường sẽ xuất hiện trên bản đồ. Để bắt đầu chỉ đường dọc theo tuyến đường, hãy đặt isGuidanceActive thành true trong lệnh gọi lại.
Ví dụ sau đây cho thấy:
- Tạo một tuyến đường mới có một điểm đến.
- Bắt đầu chỉ đường.
- Bật thông báo chỉ đường trong nền.
- Mô phỏng hành trình dọc theo tuyến đường (không bắt buộc).
- Đặt chế độ máy ảnh thành "follow" (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")!)
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;
}];
}
Để tìm hiểu về Mã địa điểm, hãy tham khảo bài viết Mã địa điểm.
Các tình huống có nhiều điểm dừng
Bạn có thể định cấu hình tối đa 25 điểm tham chiếu.
Phương thức setDestinations không hỗ trợ hành trình có nhiều điểm dừng. Sử dụng
continueToNextDestinationWithCompletion()
để chuyển điểm tham chiếu sang chặng tiếp theo của hành trình.
Đặt cách di chuyển
Cách di chuyển xác định cả loại tuyến đường cần tìm nạp và cách xác định lộ trình của người dùng. Bạn có thể đặt một trong 4 cách di chuyển cho một tuyến đường: lái xe, đi xe đạp, đi bộ và đi taxi. Ở chế độ lái xe và đi taxi, lộ trình của người dùng dựa trên hướng di chuyển; ở chế độ đi xe đạp và đi bộ, lộ trình được biểu thị bằng hướng mà thiết bị đang hướng tới (hướng lên trên cùng của thiết bị ở chế độ ngang).
Đặt thuộc tính
travelMode
của khung hiển thị bản đồ như trong ví dụ sau:
Swift
self.mapView.travelMode = .cycling
Objective-C
_mapView.travelMode = GMSNavigationTravelModeCycling;
Đặt các con đường cần tránh
Sử dụng các thuộc tính avoidsHighways và avoidsTolls BOOL để tránh đường cao tốc, đường thu phí hoặc cả hai dọc theo một tuyến đường.
Swift
self.mapView.navigator?.avoidsTolls = true
Objective-C
_mapView.navigator.avoidsTolls = YES;
Công cụ tìm PlaceID
Bạn có thể sử dụng Công cụ tìm PlaceID
để tìm mã địa điểm cần dùng cho các điểm đến trên tuyến đường. Thêm một điểm đến từ a
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à thông tin ghi nhận của Google không bị che khuất. Navigation SDK không hỗ trợ neo văn bản vào các toạ độ cụ thể (vĩ độ, kinh độ) trên bản đồ hoặc vào nhãn. Để biết thêm thông tin, hãy xem Cửa sổ thông tin.