常见问题解答

产品详情

问题

网络

数据

界面自定义

路由

模拟器

Workflows

Mobility 服务

产品详情

您的应用必须实现一个包含 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,请将其从二进制文件中移除。

网络

Navigation SDK 如何处理网络连接不佳?
Navigation SDK 会预先缓存每条行程的路线。预缓存的信息包括 15-20 分钟的路线信息,以及备用路线(以防驾驶员偏离路线)。Navigation SDK 使用设备 GPS 和传感器来估算位置。
是否支持离线模式?
否,Navigation SDK 目前不提供离线模式;不过,该 SDK 确实会提供行程的预缓存信息。

数据

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

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

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

路线起点是否提供精细的路线指引?
是的。Navigation SDK 提供了路段列表。此外,驾驶员可以滑动标题中的路线卡片,查看每项操作。
如何向应用用户传达预计到达时间?

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

  1. 使用 Navigator.getTimeAndDistanceList() 检索所有航点的时间和距离。
  2. 将此信息转发给客户端应用,就像您目前为司机预计到达时间所做的那样。

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

  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. 渲染最终目的地的预计到达时间 (ETA)。

在 iOS 中,请使用以下命令:

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

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

  • 在 Android 中,使用 navigationView.setEtaCardEnabled(false)
  • 在 iOS 中,使用 GMSMapView.settings.navigationFooterEnabled=NO
标题卡和页脚卡支持哪些界面自定义?

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

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

路由

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

可以。在 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. 使用 GMSNavigatorrouteLegscurrentRouteLeg 属性访问新路线。
司机可以在未完成路线的情况下退出导航吗?

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

在 iOS 中,调用 GMSNavigator.clearDestinations

模拟器

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

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

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

Workflows

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

在导航过程中,当 activity 关闭时,导航通知仍会显示。当车辆到达目的地时,导航会停止,并且通知会消失。

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

Mobility 服务

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

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

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

如何判断我是否为移动出行服务客户?
如果您不确定自己目前是否作为 Mobility Services 客户实现 Navigation SDK,请在代码中查找 ReportBillableEvent 调用。只有移动出行服务客户应调用 ReportBillableEvent 方法。

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

哪些 Navigation SDK API 仅供 Mobility Services 客户使用?

Navigation SDK 中有一些 API 仅供移动出行服务客户使用,Google 会按交易向这些客户收费。如果您不是移动流量服务客户,则以下方法无效:

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

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

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

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