常见问题解答
产品详情
- Navigation SDK 服务条款通知应如何显示?
- 语音指导支持哪些语言?
- 当驾驶员退出导航模式时,方位是否会保持不变?
- 开始或更改路线时,是否可以使用折线?
- 应用用户是否需要安装 Google 地图移动版?
- Navigation SDK 是否可以识别餐馆和其他目的地附近的停车位?
- Navigation SDK 在接近转弯点时是否会在车道中显示交通方向?
问题
网络
数据
- 我能否在开始路线之前检索行程中的所有经停点/目的地?
- 在路线开始时,是否提供精细路线引导?
- 如何向应用用户传达预计到达时间 (ETA)?
- 如果导航不在前台运行,是否可以使用
RoadSnappedLocationProvider
获取司机的当前贴合位置? - Navigation SDK 是否支持地理围栏?
- 导航应用在后台运行时,我可以停用通知吗?
界面自定义
路由
- 我可以向司机提供特定路线或移除替代路线吗?
- 我可以向司机显示与默认目的地位置不同的目的地标签吗?
- 我能否使用 Navigation SDK 来跟踪偏离已定义路径的情况?
- 司机可以在不完成路线的情况下退出导航吗?
模拟器
Workflows
移动服务
- 对于出行服务客户,使用 Navigation SDK 有何不同?
- 如何判断我是否是 Mobility Services 客户?
- 对于移动服务客户,Navigation SDK 的结算方式是怎样的?
- 哪些 Navigation SDK API 只能由 Mobility Services 客户使用?
- 如果我是 Mobility Services 客户,是否也可以使用非 Mobility Services 实现的 Navigation SDK?
产品详情
- 您的应用必须实现一个对话框,其中包含 Navigation SDK 服务条款通知,每位司机都必须接受该条款。此对话框可让驾驶员有机会同意服务条款。Navigation SDK 随附了一份条款文本文件。
- 在 Android 中,使用
NavigationApi.showTermsAndConditionsDialog
方法显示包含条款的对话框。 - 在 iOS 中,调用
GMSNavigationServices.showTermsAndConditionsDialogIfNeededWithCompanyName
。 - Google 地图移动版支持的任何语言都可自动用于 Navigation SDK。 设备具有默认系统语言,应用无法更改该设置;不过,应用可支持 70 多种语言。
-
可以。在 Android 中,
LocationListener
一旦启动,就会继续在后台运行。应用会继续进行道路贴合,并保持方位角。在 iOS 中,如需在后台继续接收位置和方位更新,请实现道路贴合并将
allowsBackgroundLocationUpdates
设置为YES
。 -
可以。创建或更改路线时,
RouteChangeListener
会提供多段线。 - 不需要,Navigation SDK 不需要在设备上安装 Google Maps Mobile。
- 不可以,Navigation SDK 目前不提供此功能。
- 可以。流量方向默认处于可用状态并显示。
问题
- 在 Xcode 12 中,无法针对模拟器正确构建应用。如何解决此问题?
-
如需解决此问题,请打开您的 Xcode 项目对应的“Build Settings”,然后将
arm64
添加到Excluded Architectures
(仅适用于“iOS 模拟器”build)。如需了解详情,请查看下面的 StackOverflow 会话。
- GMSMapView 无法加载。
-
如果 GMSMapView 未加载,请执行以下操作:
- 检查 Cloud 控制台中是否已启用 NavSDK。
- 如果已安装 Nav SDK,但您的项目未使用 Nav SDK API,请从二进制文件中移除该 SDK。
网络
- Navigation SDK 如何处理连接不畅的情况?
- Navigation SDK 会预先缓存每次行程的路线。 预缓存的信息包括 15-20 分钟的路线信息,以及在司机偏离路线时可供选择的替代路线。Navigation SDK 使用设备 GPS 和传感器来估算位置。
- 是否有离线模式?
- 否,Navigation SDK 目前不提供离线模式;不过,该 SDK 会为行程提供预缓存的信息。
数据
- 我可以在开始路线之前检索行程中的所有经停点/目的地吗?
-
可以。在 Android 中,如需检索路线的分段路线,请调用
Navigator.getRouteSegments()
。在 iOS 中,调用
GMSNavigator.routeLegs(read)
。 - 在路线开始时是否提供精细的路线引导?
- 可以。Navigation SDK 提供了一系列路线段。 此外,司机还可以滑动标题中的路线卡片,查看每个操作。
- 如何向应用用户传达 ETA?
-
在 Android 中,请按以下步骤操作,向应用用户提供到达时间信息:
- 使用
Navigator.getTimeAndDistanceList()
检索所有途经点的行程时间和距离。 - 像处理司机预计到达时间一样,将此信息转发给客户端应用。
在 iOS 中,请按以下步骤向应用用户提供预计到达时间信息:
- 使用
Navigator.getRouteSegments()
检索行程中的路段。 - 针对每个行程段调用
GMSNavigator.timeToNextDestination
。 - 像处理司机预计到达时间一样,将时间信息转发给客户端应用。
- 使用
-
如果导航不在前台运行,是否可以使用
RoadSnappedLocationProvider
获取司机的当前贴合位置? -
可以。在 Android 中,
RoadSnappedLocationProvider
默认在后台运行。在 iOS 中,如需让导航在后台运行,请实现
GMSRoadSnappedLocationProviderListener
的监听器,并将属性allowsBackgroundLocationUpdates
设置为TRUE
。 - Navigation SDK 是否支持地理围栏?
-
否。在导航方面,
remainingTimeOrdistanceChangeListener
比地理围栏更具优势。地理围栏可能未考虑道路几何形状,也可能未以驾驶员导航的确切点为中心。您可以使用
remainingTimeOrdistanceChangeListener
来近似实现此功能。- 设置用于确定回调频率的阈值。
- 查看到达目的地的剩余距离。
例如,如果您将阈值设置为 100 米,则当到达目的地的距离变化 100 米时,您会收到回调。随着距离的减小,您可以将此阈值更新为较小的值,并接收更频繁的回调。然后,检查剩余距离,以确定您是否足够接近上车/下车地点。
在 iOS 中,实现监听器
GMSNavigatorListener.didUpdateRemainingDistance
以管理通知之间的距离。 - 当导航应用在后台运行时,我可以停用通知吗?
-
可以。在 Android 设备上,使用
Navigator.setHeadsUpNotificationEnabled
控制通知。此方法有一个布尔值实参。FALSE
停用通知;TRUE
启用通知。在 iOS 中,通过将
GMSRoadSnappedLocationProvider.allowsBackgroundLocationUpdates
设置为 NO,停用道路贴合位置信息的后台通知。如需针对其他位置信息通知停用后台处理,请调用
GMSNavigator.sendsBackgroundNotifications(NO)
。
界面自定义
- 我可以为最佳路线选项添加颜色代码吗?
- 否。目前不支持为特定路线选项添加颜色编码。
- 导航 SDK 是否可以显示最终目的地的预计到达时间?
-
可以。在 Android 中,请使用以下方法:
- 使用
Navigator.getTimeAndDistanceList()
检索所有途经点的行程时间和距离。 - 使用
NavigationFragment.setEtaCardEnabled(false)
隐藏当前途经点的预计到达时间。 - 渲染最终目的地预计到达时间。
在 iOS 中,请使用以下方法:
- 调用
GMSNavigator.routeLegs(read)
。 - 在最后一段中,调用
GMSNavigator.timeToNextDestination
。 - 使用
MSMapView.settings.navigationFooterEnabled=NO
将当前途经点的预计到达时间设为 FALSE,以隐藏该预计到达时间。 - 渲染最终目的地预计到达时间。
- 使用
- 如何隐藏预计到达时间更新?
-
您可以使用以下方法停用预计到达时间卡片:
- 在 Android 中,使用
navigationView.setEtaCardEnabled(false)
。 - 在 iOS 中,使用
GMSMapView.settings.navigationFooterEnabled=NO
。
- 在 Android 中,使用
-
在 Android 中,您可以使用
StylingOptions
设置背景颜色样式。如需隐藏或显示页眉和页脚,请使用NavigationFragment
的setHeaderEnabled
和setFooterEnabled
成员函数。在 iOS 中,使用
GMSMapView.settings.navigationHeaderPrimaryBackgroundColor
设置背景颜色样式。如需隐藏或显示页眉和页脚,请使用GMSUISettings
的navigationFooterEnabled
和navigationHeaderEnabled
属性。
路由
- 我可以向司机提供特定路线或移除替代路线吗?
- 否。默认情况下,系统会提供多条路线,其中最快的路线具有优先权。 您可以在请求中添加偏好设置(例如“避开高速公路和收费站”),从而影响默认路线。添加途经点也会影响路线。
- 我可以向应用用户显示与默认目的地位置不同的目的地标签吗?
-
可以。在 Android 中,使用自定义目的地标题和纬度/经度创建
Marker
。导航 SDK 会在NavigationMap
上显示自定义标题和坐标。在 iOS 中,您需要为目的地创建并显示
GMSMarker
。 - 我可以使用 Navigation SDK 来跟踪偏离已定义路径的情况吗?
-
可以。在 Android 中,使用
Navigator.setRouteChangedListener
在路线发生变化或系统推荐新路线时接收通知:- 使用
Navigator.setRouteChangedListener
方法注册一个监听器,用于检查设备在路线上的位置。 - 向回调事件处理脚本
onRouteChanged
添加代码:- 向应用用户发送包含更新后的预计到达时间和距离信息的消息。
- 跟踪设备的位置。
- [可选] 添加应用所需的其他功能,以处理司机偏离规定路线的情况。
在 iOS 中,使用
GMSNavigator
及其监听器可在路线发生变化或系统推荐新路线时接收通知:- 在地图的视图控制器上,实现
GMSNavigatorListener
协议和GMSRoadSnappedLocationProviderListener
协议。 - 实现
GMSNavigatorListener.navigatorDidChangeRoute
。 - 使用
GMSNavigator
的routeLegs
和currentRouteLeg
属性访问新路线。
- 使用
-
可以。在 Android 中,调用
Navigator.stopGuidance()
方法以停止导航。在 iOS 中,调用
GMSNavigator.clearDestinations
。
模拟器
- 模拟器是否支持路线变更?
-
可以。在 Android 中,调用
simulateLocationsAlongNewRoute
以模拟包含路线变更的行程。simulateLocationsAlongExistingRoute
方法会忽略对现有路线所做的更改。在 iOS 中,使用
GMSLocationSimulator.simulateAlongNewRouteToDestinations
模拟包含路线变更的行程。如果您预计不会有任何路线变化,可以使用GMSLocationSimulator.simulateLocationsAlongExistingRoute
或GMSLocationSimulator.simulateAlongNewRouteToDestinations
。
Workflows
- 如何关闭包含导航 fragment 的 activity 关闭后的通知?
-
在导航期间,即使关闭 activity,导航通知仍会保持显示。当车辆到达目的地时,导航会停止,通知也会消失。
如需处理对通知的点击,请使用
Navigator.startGuidance(intent resumeIntent)
。 当应用用户点击通知时,系统会触发resume intent
。 通常,Navigator.startguidance(getIntent())
是从主 Activity 调用的,当应用用户点击通知时,主 Activity 会重新调用该 Activity。
移动服务
Google Maps Platform Mobility Services 提供了一系列 API 和 SDK,可帮助满足运输和物流企业的需求。对于移动服务客户,Navigation SDK 通常与相关服务结合使用,以实现路线优化、调度、任务跟踪、车队分析等功能。对于移动服务客户,Navigation SDK 的结算方式也不同。如需了解详情,请参阅移动服务文档。
移动产品仅向部分客户提供。如需了解详情,请与您的销售代表联系。
ReportBillableEvent
调用。只有 Mobility Services 客户应调用 ReportBillableEvent
方法。
Navigation SDK 中有多个 API 仅供 Mobility Services 客户使用,这些客户按交易量向 Google 付费。如果您不是移动服务客户,则以下方法为 no-op:
可以。Mobility 服务客户可以使用 Navigation SDK 的 Mobility 服务实现和非 Mobility 服务实现。不过,您一次只能在一个应用中使用一种实现类型。您还需要创建新的 Google Cloud 项目、结算账号和 API 密钥,这些项目、账号和密钥应与您在实施出行服务时使用的项目、账号和密钥分开。如需了解详情,请参阅Navigation SDK 设置概览。
如需详细了解如何使用非 Mobility Services 实现的 Navigation SDK,包括如何将应用从一种实现类型迁移到另一种实现类型,请与您的 Google 客户代表联系。
注意:如果您不是移动服务客户,但有兴趣详细了解移动服务 API 和 SDK 集合,请与 Google Maps Platform 销售团队联系。