常见问题解答

产品详情

问题

网络

数据

界面自定义

路由

模拟器

Workflows

移动服务

产品详情

您的应用必须实现一个对话框,其中包含 Navigation SDK 服务条款通知,每位司机都必须接受该条款。此对话框可让驾驶员有机会同意服务条款。Navigation SDK 随附了一份条款文本文件。
在 Android 中,使用 NavigationApi.showTermsAndConditionsDialog 方法显示包含条款的对话框。
在 iOS 中,调用 GMSNavigationServices.showTermsAndConditionsDialogIfNeededWithCompanyName
Google 地图移动版支持的任何语言都可自动用于 Navigation SDK。 设备具有默认系统语言,应用无法更改该设置;不过,应用可支持 70 多种语言。

可以。在 Android 中,LocationListener 一旦启动,就会继续在后台运行。应用会继续进行道路贴合,并保持方位角。

在 iOS 中,如需在后台继续接收位置和方位更新,请实现道路贴合并将 allowsBackgroundLocationUpdates 设置为 YES

可以。创建或更改路线时,RouteChangeListener 会提供多段线。

不需要,Navigation SDK 不需要在设备上安装 Google Maps Mobile。
不可以,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 提供了一系列路线段。 此外,司机还可以滑动标题中的路线卡片,查看每个操作。
如何向应用用户传达 ETA?

在 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)

界面自定义

我可以为最佳路线选项添加颜色代码吗?
否。目前不支持为特定路线选项添加颜色编码。
导航 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. 渲染最终目的地预计到达时间。
如何隐藏预计到达时间更新?

您可以使用以下方法停用预计到达时间卡片:

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

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

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

路由

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

可以。在 Android 中,使用自定义目的地标题和纬度/经度创建 Marker。导航 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。

移动服务

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

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

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

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

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

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

Navigation SDK 中有多个 API 仅供 Mobility Services 客户使用,这些客户按交易量向 Google 付费。如果您不是移动服务客户,则以下方法为 no-op:

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

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

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

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