常见问题解答

产品详情

问题

网络

数据

界面自定义

路由

模拟器

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 会在应用用户点击通知时重新调用。

Mobility 服务

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

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

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

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

Navigation SDK 如何向 Mobility Services 客户收费?
对于移动出行服务客户,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 销售团队联系