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