常见问题解答

产品详情

问题

网络

数据

界面自定义

路由

模拟器

Workflows

移动服务

产品详情

您的应用必须实现一个对话框,其中包含 Navigation SDK 服务条款声明,每位司机都必须接受该声明。此对话框可让司机有机会同意服务条款。Navigation SDK 随附了一份包含相关条款的文本文件。
在 Android 中,使用 NavigationApi.showTermsAndConditionsDialog 方法显示包含条款的对话框。
在 iOS 中,调用 GMSNavigationServices.showTermsAndConditionsDialogIfNeededWithCompanyName。
Google 地图移动版支持的任何语言都可自动用于 Navigation SDK。 设备具有默认系统语言,应用无法更改该设置;不过,应用可访问 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,请从二进制文件中移除该 SDK。

网络

Navigation SDK 如何处理连接不良的情况?
Navigation SDK 会预缓存每次行程的路线。 预缓存的信息包括 15-20 分钟的路线信息,以及在司机偏离路线时可供选择的替代路线。Navigation SDK 使用设备 GPS 和传感器来估算位置。
是否有离线模式?
否,Navigation SDK 目前不提供离线模式;不过,该 SDK 会为行程提供预缓存的信息。

数据

我可以在开始路线之前检索行程中的所有经停点/目的地吗?

可以。在 Android 中,如需检索路线的分段路线,请调用 Navigator.getRouteSegments()。

在 iOS 中,调用 GMSNavigator.routeLegs(read)。

在路线开始时,是否提供精细路线导航?
可以。Navigation SDK 提供了一系列路线段。此外,司机还可以滑动标题中的路线卡片,查看每个操作。
如何向应用用户传达预计到达时间?

在 Android 中,请按以下步骤向应用用户提供预计到达时间信息:

  1. 使用 Navigator.getTimeAndDistanceList() 检索所有途经点的行程时间和距离。
  2. 像处理司机预计到达时间一样,将此信息转发给客户端应用。

在 iOS 中,请按以下步骤操作,向应用用户提供预计到达时间信息:

  1. 使用 Navigator.getRouteSegments() 检索行程中的路段。
  2. 针对每个旅程段调用 GMSNavigator.timeToNextDestination。
  3. 像处理司机预计到达时间一样,将时间信息转发给客户端应用。
如果导航不在前台运行,是否可以使用 RoadSnappedLocationProvider 获取驾驶员当前贴合的位置?

可以。在 Android 中,RoadSnappedLocationProvider 默认在后台运行。

在 iOS 中,如需让导航在后台运行,请实现 GMSRoadSnappedLocationProviderListener 的监听器,并将属性 allowsBackgroundLocationUpdates 设置为 TRUE。

Navigation SDK 是否支持地理围栏?

否。在导航方面,remainingTimeOrdistanceChangeListener 比地理围栏更具优势。地理围栏可能不会考虑道路几何形状,并且可能不会以驾驶员导航的确切点为中心。

您可以使用 remainingTimeOrdistanceChangeListener 来近似实现此功能。

  1. 设置阈值以确定回调的频率。
  2. 查看到达目的地的剩余距离。

例如,如果您将阈值设置为 100 米,则当到达目的地的距离变化 100 米时,您会收到回调。随着距离的减小,您可以将此阈值更新为较小的值,并接收更频繁的回调。然后,检查剩余距离,以确定您是否足够接近上车/下车地点。

在 iOS 中,实现监听器 GMSNavigatorListener.didUpdateRemainingDistance 以管理通知之间的距离。

当导航应用在后台运行时,我可以停用通知吗?

可以。在 Android 设备上,使用 Navigator.setHeadsUpNotificationEnabled 控制通知。此方法有一个布尔值实参。FALSE 停用通知;TRUE 启用通知。

在 iOS 中,通过将 GMSRoadSnappedLocationProvider.allowsBackgroundLocationUpdates 设置为 NO,停用道路贴合位置的后台通知。

如需针对其他位置信息通知停用后台处理,请调用 GMSNavigator.sendsBackgroundNotifications(NO)。

界面自定义

我可以为最佳路线选项添加颜色代码吗?
否。目前不支持为特定路线选项添加颜色代码。
Navigation SDK 是否可以显示最终目的地的预计到达时间?

可以。在 Android 设备上,请使用以下方法:

  1. 使用 Navigator.getTimeAndDistanceList() 检索所有途经点的行程时间和距离。
  2. 使用 NavigationFragment.setEtaCardEnabled(false) 隐藏当前途经点的预计到达时间。
  3. 渲染最终目的地预计到达时间。

在 iOS 中,使用以下内容:

  1. 调用 GMSNavigator.routeLegs(read)。
  2. 在最后一段中,调用 GMSNavigator.timeToNextDestination。
  3. 使用 MSMapView.settings.navigationFooterEnabled=NO 将当前途经点的预计到达时间设为 FALSE,以隐藏该预计到达时间。
  4. 渲染最终目的地预计到达时间。
如何隐藏到达时间 (ETA) 更新?

您可以使用以下方法停用 ETA 卡片:

  • 在 Android 中,使用 navigationView.setEtaCardEnabled(false)。
  • 在 iOS 中,使用 GMSMapView.settings.navigationFooterEnabled=NO。
哪些界面自定义设置可用于页眉和页脚卡片?

在 Android 中,您可以使用 StylingOptions 设置背景颜色样式。如需隐藏或显示标题和页脚,请使用 NavigationFragment 的 setHeaderEnabled 和 setFooterEnabled 成员函数。

在 iOS 中,使用 GMSMapView.settings.navigationHeaderPrimaryBackgroundColor 设置背景颜色样式。如需隐藏或显示标题和页脚,请使用 GMSUISettings 的 navigationFooterEnabled 和 navigationHeaderEnabled 属性。

路由

我可以向司机提供特定路线或移除替代路线吗?
不能。默认情况下,系统会提供多条路线,其中最快路线具有优先权。 您可以在请求中添加偏好设置(例如“避开高速公路和收费站”),从而影响默认路线。添加途经点也会影响路线。
我可以向应用用户显示与默认目的地位置不同的目的地标签吗?

可以。在 Android 中,创建一个 Marker,其中包含目的地的自定义标题和纬度/经度。Navigation SDK 会在 NavigationMap 上显示自定义标题和坐标。

在 iOS 中,您需要为目的地创建并显示 GMSMarker。

我可以使用 Navigation SDK 来跟踪偏离已定义路径的情况吗?

可以。在 Android 中,使用 Navigator.setRouteChangedListener 在路线发生变化或系统推荐新路线时接收通知:

  1. 使用 Navigator.setRouteChangedListener 方法注册一个监听器,用于检查设备在路线上的位置。
  2. 向回调事件处理脚本 onRouteChanged 添加代码:
    • 向应用用户发送包含更新后的预计到达时间和距离信息的消息。
    • 跟踪设备的位置。
    • [可选] 添加应用所需的其他功能,以处理司机偏离规定路线的情况。

在 iOS 中,使用 GMSNavigator 及其监听器可在路线更改或系统推荐新路线时接收通知:

  1. 在地图的视图控制器上,实现 GMSNavigatorListener 协议和 GMSRoadSnappedLocationProviderListener 协议。
  2. 实现 GMSNavigatorListener.navigatorDidChangeRoute。
  3. 使用 GMSNavigator 的 routeLegs 和 currentRouteLeg 属性访问新路线。
司机能否在未完成路线的情况下退出导航?

可以。在 Android 中,调用 Navigator.stopGuidance() 方法以停止导航。

在 iOS 中,调用 GMSNavigator.clearDestinations。

导航 SDK 是否支持为卡车和大型车辆提供路线规划和导航服务?

可以。借助大型车辆路线规划 (LVR),您可以将 Routes API 或 Route Optimization API 生成的卡车专用路线令牌传递给 Navigation SDK。该 SDK 提供包含路线标注(高度、重量、危险品和卡车限制)的精细导航,并在动态重新规划路线期间保持车辆的物理配置。如需了解详情,请参阅导航大型车辆路线。

模拟器

模拟器是否支持路线变更?

可以。在 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。

移动服务

对于出行服务客户,使用 Navigation SDK 有何不同?

Google Maps Platform 移动服务提供了一系列 API 和 SDK,可帮助满足运输和物流企业的需求。对于移动服务客户,Navigation SDK 通常与相关服务结合使用,以实现路线优化、调度、任务跟踪、车队分析等功能。对于移动服务客户,Navigation SDK 的结算方式也不同。如需了解详情,请参阅 Mobility Services 文档。

移动产品仅面向部分客户提供。如需了解详情,请与您的销售代表联系。

如何判断我是否是 Mobility Services 客户?
如果您不确定自己是否以 Mobility Services 客户的身份实现 Navigation SDK,请在代码中查找 ReportBillableEvent 调用。只有 Mobility Services 客户应调用 ReportBillableEvent 方法。

对于移动服务客户,Navigation SDK 的结算方式是怎样的?
对于移动出行服务客户,Navigation SDK 的结算和定价取决于您与 Google Maps Platform 签订的服务协议。如需了解如何验证您的移动服务实现是否正确结算,请参阅结算验证。如需详细了解移动服务结算,请与您的销售代表联系。

哪些 Navigation SDK API 只能由出行服务客户使用?

Navigation SDK 中有多个 API 仅供 Mobility Services 客户使用,这些客户按交易量向 Google 付费。如果您不是 Mobility Services 客户,则以下方法为免运维:

如果我是 Mobility Services 客户,是否也可以使用非 Mobility Services 实现的 Navigation SDK?

可以。Mobility 服务客户可以使用 Navigation SDK 的 Mobility 服务实现和非 Mobility 服务实现。不过,您一次只能在应用中使用一种实现类型。您还需要创建新的 Google Cloud 云项目、结算账号和 API 密钥,这些项目、账号和密钥应与您在实施移动出行服务时使用的项目、账号和密钥分开。如需了解详情,请参阅 Navigation SDK 设置概览。

如需详细了解如何使用 Navigation SDK 的非 Mobility Services 实现,包括如何将应用从一种实现类型迁移到另一种实现类型,请与您的 Google 客户代表联系。

注意:如果您不是移动服务客户,但有兴趣详细了解移动服务 API 和 SDK 集合,请与 Google Maps Platform 销售团队联系。