Tạo hướng dẫn tùy chỉnh
Sử dụng bộ sưu tập để sắp xếp ngăn nắp các trang
Lưu và phân loại nội dung dựa trên lựa chọn ưu tiên của bạn.
Trang này trình bày các bước chung mà bạn cần thực hiện để tạo hướng dẫn tuỳ chỉnh trong trải nghiệm điều hướng tuỳ chỉnh.
Quy trình này khác với quy trình được mô tả trong phần Chỉ đường theo tuyến đường ở những điểm sau:
- Trước tiên, bạn thiết lập một phiên điều hướng độc lập và lấy một thực thể trình điều hướng thông qua phiên này thay vì gọi trình điều khiển chế độ xem.
- Bạn thiết lập một trình nghe sự kiện để phản hồi và quản lý các sự kiện điều hướng.
- Tạo một phiên điều hướng bằng
GMSNavigationService.createNavigationSession
và bắt đầu điều hướng bằng lệnh gọi setDestination
. Khi trải nghiệm điều hướng của Google gọi trình điều hướng thông qua chế độ xem bản đồ điều hướng, GMSNavigationServices
sẽ kiểm soát và nhận một luồng sự kiện từ một phiên điều hướng độc lập với một thực thể giao diện người dùng. Điều này có nghĩa là nó có thể chạy mà không cần giao diện người dùng hoặc được truyền đến bất kỳ trải nghiệm dựa trên giao diện người dùng nào. Với phương pháp này, phiên điều hướng sẽ tiếp tục chạy trong ứng dụng của bạn cho đến khi tham chiếu cuối cùng bị xoá khỏi ứng dụng.
- Thiết lập một nhà cung cấp vị trí được gắn vào đường. Sử dụng trình cung cấp vị trí nếu bạn muốn ứng dụng của mình liên tục theo dõi vị trí, chẳng hạn như khi hiển thị một khung hiển thị điều hướng có dấu chấm màu xanh dương dọc theo tuyến đường.
- Thiết lập một trình nghe để nhận hướng dẫn chi tiết từng chặng bằng cách triển khai giao thức
GMSNavigatorListener
. Sau đó, hãy chuyển đổi thông tin đó thành bất cứ thứ gì cần thiết cho trải nghiệm điều hướng tuỳ chỉnh của bạn. Ví dụ:
- Triển khai các trường chỉ có văn bản để truyền màn hình chỉ đường một cách đơn giản.
- Thiết kế và điền sẵn các trường cho giao diện người dùng của riêng bạn.
- Thiết lập trình mô phỏng điều hướng. Điều này là cần thiết cho quá trình phát triển và kiểm thử.
Tạo một phiên điều hướng độc lập
Đoạn mã sau đây trong bản minh hoạ cho thấy hoạt động điều hướng được thiết lập độc lập với trình điều khiển khung hiển thị. Sau đó, mã này sẽ thêm một bản đồ tổng quan được định cấu hình để cho thấy vị trí hiện tại được gắn vào đường.
// Create the navigation session.
_navigationSession = [GMSNavigationServices createNavigationSession];
GMSRoadSnappedLocationProvider *roadSnappedLocationProvider =
_navigationSession.roadSnappedLocationProvider;
[roadSnappedLocationProvider startUpdatingLocation];
GMSNavigator *navigator = _navigationSession.navigator;
[navigator addListener:self];
navigator.voiceGuidance = GMSNavigationVoiceGuidanceSilent;
navigator.sendsBackgroundNotifications = NO;
_navigationSession.started = YES;
[navigator setDestinations:@[ destination ]
callback:^(GMSRouteStatus routeStatus) {
// …handle changes in route status.
}];
// Add an overview map.
_mapView = [[GMSMapView alloc] initWithFrame:CGRectZero];
[self.mainStackView addArrangedSubview:_mapView];
[self.mainStackView setNeedsLayout];
_mapView.settings.compassButton = YES;
_mapView.delegate = self;
_mapView.myLocationEnabled = YES;
_mapView.roadSnappedMyLocationSource = roadSnappedLocationProvider;
Truyền thông tin điều hướng từ trải nghiệm tuỳ chỉnh sang trải nghiệm trên Google
Đoạn mã này minh hoạ cách ứng dụng của bạn có thể cho phép người dùng truy cập vào trải nghiệm điều hướng của Google từ một trải nghiệm điều hướng tuỳ chỉnh. Đoạn mã này cũng cho biết cách ứng dụng của bạn thực hiện quá trình chuyển đổi này trong khi chia sẻ bản đồ.
`UIButton *button = [UIButton buttonWithType:UIButtonTypePlain`];
[`button addTarget:self action:@selector(didTapEnterGoogleNavigationButton:)
forControlState:[_directionsButton addTarget:self`];
`…`
[`_mapView enableNavigationWithSession:_navigationSession`];
Trừ phi có lưu ý khác, nội dung của trang này được cấp phép theo Giấy phép ghi nhận tác giả 4.0 của Creative Commons và các mẫu mã lập trình được cấp phép theo Giấy phép Apache 2.0. Để biết thông tin chi tiết, vui lòng tham khảo Chính sách trang web của Google Developers. Java là nhãn hiệu đã đăng ký của Oracle và/hoặc các đơn vị liên kết với Oracle.
Cập nhật lần gần đây nhất: 2025-09-04 UTC.
[null,null,["Cập nhật lần gần đây nhất: 2025-09-04 UTC."],[[["\u003cp\u003eCreate custom turn-by-turn navigation experiences on iOS by establishing an independent navigation session using \u003ccode\u003eGMSNavigationServices\u003c/code\u003e.\u003c/p\u003e\n"],["\u003cp\u003eImplement the \u003ccode\u003eGMSNavigatorListener\u003c/code\u003e protocol to receive and utilize detailed guidance information for your custom UI elements.\u003c/p\u003e\n"],["\u003cp\u003eUtilize a road-snapped location provider for continuous location updates and accurate positioning on the route.\u003c/p\u003e\n"],["\u003cp\u003eSet up a navigation simulator for development and testing purposes to ensure the functionality of your custom navigation experience.\u003c/p\u003e\n"],["\u003cp\u003eTransition seamlessly from a custom navigation experience to the full Google Maps navigation experience, optionally sharing the existing map instance.\u003c/p\u003e\n"]]],["The core process involves creating a navigation session independently using `GMSNavigationService.createNavigationSession`, distinct from route navigation. A road-snapped location provider is established for continuous monitoring. Implement `GMSNavigatorListener` to set up turn-by-turn guidance, translating the information into your app's custom navigation UI. Set up a navigation simulator for testing. The navigation session persists until the last reference is removed. A custom experience can also be transition to the default google navigation experience.\n"],null,["# Create customized guidance\n\nThis page covers the high-level steps you follow to create customized guidance\nas part of a [custom navigation\nexperience](/maps/documentation/navigation/ios-sdk/intro-custom-nav). \n**This process differs from the process described in\n[Navigate a\nroute](/maps/documentation/navigation/ios-sdk/route) as follows:**\n\n- You first establish a navigation session independently and obtain a navigator instance through the session rather than by calling the view controller.\n- You set up an event listener to respond to and manage navigation events.\n\n1. **Create a navigation session** using [`GMSNavigationService.createNavigationSession`](/maps/documentation/navigation/ios-sdk/reference/objc/Classes/GMSNavigationServices#+createnavigationsession) and begin navigation with a `setDestination` call. Where the Google navigation experience invokes the navigator through the navigation map view, the `GMSNavigationServices` controls and receives a stream of events from a navigation session *independently* from a UI instance. This means it can either run without a UI, or get passed to *any* UI-based experience. With this approach, the navigation session continues to run in your app until the last reference is removed from it.\n2. **Establish a road-snapped location provider**. Use the location provider if you want your app to have continuous location monitoring, such as when displaying a navigation view with a blue dot along the route.\n3. **Set up a listener for detailed turn-by-turn guidance** by implementing the `GMSNavigatorListener` protocol. Then, transform that information into whatever is needed for your custom navigation experience. For example:\n 1. Implement text-only fields for simple screen casting of directions.\n 2. Design and populate fields for your own UI.\n4. **Set up a navigation simulator**. This is necessary for development and testing.\n\nCreate an independent navigation session\n----------------------------------------\n\nThe following code snippet from the demo shows navigation established\nindependently from the view controller. The code then adds an overview map\nconfigured to show the current road-snapped location. \n\n // Create the navigation session.\n\n _navigationSession = [GMSNavigationServices createNavigationSession];\n GMSRoadSnappedLocationProvider *roadSnappedLocationProvider =\n _navigationSession.roadSnappedLocationProvider;\n [roadSnappedLocationProvider startUpdatingLocation];\n GMSNavigator *navigator = _navigationSession.navigator;\n [navigator addListener:self];\n navigator.voiceGuidance = GMSNavigationVoiceGuidanceSilent;\n navigator.sendsBackgroundNotifications = NO;\n _navigationSession.started = YES;\n [navigator setDestinations:@[ destination ]\n callback:^(GMSRouteStatus routeStatus) {\n // ...handle changes in route status.\n }];\n\n // Add an overview map.\n _mapView = [[GMSMapView alloc] initWithFrame:CGRectZero];\n [self.mainStackView addArrangedSubview:_mapView];\n [self.mainStackView setNeedsLayout];\n _mapView.settings.compassButton = YES;\n _mapView.delegate = self;\n _mapView.myLocationEnabled = YES;\n _mapView.roadSnappedMyLocationSource = roadSnappedLocationProvider;\n\nPassing navigation from a custom experience to the Google experience\n--------------------------------------------------------------------\n\nThis code snippet illustrates how your app can allow the user to enter the\nGoogle navigation experience from a custom navigation experience. This code\nsnippet also shows how your app makes this transition while sharing the map. \n\n `UIButton *button = [UIButton buttonWithType:UIButtonTypePlain`];\n\n [`button addTarget:self action:@selector(didTapEnterGoogleNavigationButton:)\n forControlState:[_directionsButton addTarget:self`];\n\n `...`\n\n [`_mapView enableNavigationWithSession:_navigationSession`];"]]