自訂導覽體驗是指,從只將導航引導為背景程序完全消失的應用程式,到將高度客製化指南導向特定畫面 (與執行導覽器裝置不同) 的應用程式,都是自訂的導覽體驗。
什麼是自訂導覽體驗?
開始導航—建立導航工作階段。與 Google 導航體驗一樣,自訂導覽體驗仍需建立導覽執行個體及設定目的地。不過,如果使用自訂導覽體驗,請先使用
GMSNavigationServices
建立導覽工作階段。導覽工作階段是一種輸出狀態的非 UI 物件,可透過檢視控制器或無 UI 控制器運作。查看示範:瀏覽版 SDK 內含一個可執行的示範,您可以參考此範例,瞭解在標準導航功能從即時路線指引切換至導航體驗 (其中只顯示裝置位置沿著道路折線移動)。
主動導航 (由您提供)。以下是 Google 提供的導覽體驗與自訂導覽體驗的另一個主要差異。您無須將指引傳送給 Navigation SDK 的內建事件管理員,而是透過
GMSNavigatorListener
啟用即時路線動態饋給並實作事件處理常式。如此一來,您的體驗就能回應「監聽導覽事件」中所述的事件。結束導航 (由您自行提供)。和 Google 導航體驗一樣,自訂導覽也規定您必須以最適合應用程式使用體驗的方式終止導覽。
下表說明部分自訂導覽情境。
情境示例 |
高階步驟 |
---|---|
您需要為小型裝置 (例如雙輪車輛) 提供純文字的駕駛指引。 |
建立導航器,並將即時路線指引設定為小螢幕裝置的資料動態饋給,同時駕駛人會在駕駛的手機上執行即時語音指示。請參閱「啟用即時路線資料動態饋給」。 |
使用您應用程式的駕駛人都希望能在大部分的旅程中取得總覽地圖,而且只針對城市街道提供即時路線指引。 |
應用程式應讓駕駛人視需求進入及離開 Google 導航體驗,不必更改目的地和行程模式的導覽器設定。 |
行動交通服務客戶:駕駛人經常行經的既熟悉路線,完全不需指引,但需要確保車輛管理系統能管理配送或行程。 |
設定導覽器。設定目的地並取得位置更新通知。將 Driver SDK 整合至應用程式。詳情請參閱「隨選乘車與外送服務」或「Last Mile Fleet Solution」的驅動程式 SDK 入門說明。 |
建立自訂指引
本節說明建立自訂指南的高階步驟。
這項程序與瀏覽路徑中所述的程序不同,如下所示:
- 首先要單獨建立導覽工作階段,並透過工作階段取得導覽器執行個體,而非呼叫檢視控制器。
- 您可以設定事件監聽器來回應及管理導航事件。
- 使用
GMSNavigationService.createNavigationSession
建立導覽工作階段,並透過setDestination
呼叫開始導航。Google 導覽體驗透過導覽地圖檢視畫面叫用導覽器時,GMSNavigationServices
可控制及接收來自 UI 執行個體的導覽工作階段事件串流。這表示它可以在沒有 UI 的情況下執行,或傳遞至「任何」以 UI 為基礎的體驗。使用這個方法,導覽工作階段會繼續在應用程式中執行,直到將最後一個參照從中移除為止。 - 打造道路施工的定位服務供應商。如果您希望應用程式持續監控位置,例如顯示路線沿途的藍點,請使用位置提供者。
- 透過實作
GMSNavigatorListener
通訊協定來設定事件監聽器以取得詳細的即時路線指引。然後將這些資訊轉換為自訂導覽體驗所需的任何項目。例如:- 實作純文字欄位,用於簡易的方向螢幕轉換。
- 為自己的 UI 設計及填入欄位。
- 設定導覽模擬工具。此為開發與測試的必要條件。
建立獨立的導覽工作階段
示範中的下列程式碼片段顯示從檢視控制器獨立建立的導覽。接著,程式碼會新增總覽地圖,以顯示目前道路封閉位置。
// 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;
將自訂體驗傳遞至 Google 服務
本程式碼片段說明應用程式如何讓使用者透過自訂導覽體驗進入 Google 導航體驗。此外,這個程式碼片段也會顯示應用程式如何在共用地圖時進行這項轉換。
`UIButton *button = [UIButton buttonWithType:UIButtonTypePlain`];
[`button addTarget:self action:@selector(didTapEnterGoogleNavigationButton:)
forControlState:[_directionsButton addTarget:self`];
`…`
[`_mapView enableNavigationWithSession:_navigationSession`];