常见问题解答

产品详情

问题

网络

数据

界面自定义

路由

模拟器

工作流

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 信息:

  1. 使用 Navigator.getTimeAndDistanceList() 检索所有途经点的行程时间和距离。
  2. 将此信息转发给客户端应用,就像您 为驾驶员 ETA 所做的那样。

在 iOS 中,请按照以下步骤向应用用户提供 ETA 信息:

  1. 使用 Navigator.getRouteSegments(). 检索行程中的路段。
  2. 针对每个行程路段调用 GMSNavigator.timeToNextDestination
  3. 将时间信息转发给客户端应用,就像您 为驾驶员 ETA 所做的那样。
如果导航不在前台,能否使用 RoadSnappedLocationProvider 获取驾驶员当前的路段贴合位置?

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

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

Navigation SDK 是否支持地理围栏?

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

您可以使用 remainingTimeOrdistanceChangeListener 来估算此功能。

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

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

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

当导航应用在后台运行时,我能否停用通知?

可以。在 Android 中,使用 Navigator.setHeadsUpNotificationEnabled 控制通知。此方法具有布尔型实参。FALSE 会停用通知;TRUE 会启用通知。

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

如需停用其他位置通知的后台处理,请调用 GMSNavigator.sendsBackgroundNotifications(NO)

界面自定义

我能否为最佳路线选项添加颜色代码?
不能。目前不支持为特定路线选项添加颜色代码。
Navigation SDK 能否显示最终目的地的 ETA?

可以。在 Android 中,使用以下方法:

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

在 iOS 中,使用以下方法:

  1. 调用 GMSNavigator.routeLegs(read)
  2. 对于最后一个路段,调用 GMSNavigator.timeToNextDestination
  3. 使用 MSMapView.settings.navigationFooterEnabled=NO 将当前途经点的 ETA 隐藏为 FALSE。
  4. 呈现最终目的地的 ETA。
如何隐藏 ETA 更新?

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

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

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

在 iOS 中,使用 GMSMapView.settings.navigationHeaderPrimaryBackgroundColor 设置背景颜色样式。如需隐藏或显示页眉和页脚 ,请使用 navigationFooterEnablednavigationHeaderEnabled 属性,这些属性属于 GMSUISettings

路由

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

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

在 iOS 中,您可以为目的地创建并显示 GMSMarker

我能否使用 Navigation SDK 跟踪偏离已定义路径的情况?

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

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

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

  1. 在地图的视图控制器中,实现 GMSNavigatorListener 协议和 GMSRoadSnappedLocationProviderListener 协议。
  2. 实现 GMSNavigatorListener.navigatorDidChangeRoute
  3. 使用 GMSNavigatorrouteLegscurrentRouteLeg 属性访问新路线。
驾驶员能否在不完成路线的情况下退出导航?

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

在 iOS 中,调用 GMSNavigator.clearDestinations

模拟器

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

可以。在 Android 中,调用 simulateLocationsAlongNewRoute 模拟包含路线更改的行程。The simulateLocationsAlongExistingRoute 方法会忽略对现有路线的更改。

在 iOS 中,使用 GMSLocationSimulator.simulateAlongNewRouteToDestinations 模拟包含路线更改的行程。如果您预计不会有任何路线更改,则可以使用 GMSLocationSimulator.simulateLocationsAlongExistingRouteGMSLocationSimulator.simulateAlongNewRouteToDestinations.

工作流

如何在关闭包含导航 fragment 的 activity 后关闭通知?

在导航期间关闭 activity 后,导航通知仍会显示。当车辆到达目的地时,导航会停止,通知也会消失。

如需处理对通知的点击,请使用 Navigator.startGuidance(intent resumeIntent)。 当应用用户点击通知时,系统会触发 resume intent。 通常,Navigator.startguidance(getIntent()) 是从 主 activity 中调用的,当应用用户点击通知时,系统会重新调用该 activity。

Mobility 服务

Mobility 服务客户使用 Navigation SDK 的方式有何不同?

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

Mobility 产品仅向部分客户提供。如需了解详情,请联系销售代表。

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

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

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

Navigation SDK 中有几个 API 仅供 Mobility 服务客户使用,Google 会按交易向这些客户收费。如果您不是 Mobility 服务客户,则以下方法是空操作:

如果我是 Mobility 服务客户,能否同时使用 Navigation SDK 的非 Mobility 服务实现?

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

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

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