Часто задаваемые вопросы

Информация о товаре

Проблемы

Сеть

Данные

Кастомизация интерфейса

Составление маршрутов

Симулятор

Рабочие процессы

Сервисы мобильности

Информация о товаре

В приложении должно быть реализовано диалоговое окно с Условиями использования 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 и добавьте arm64 в Excluded Architectures только для сборок "Симулятор iOS".

Дополнительную информацию можно найти в этом обсуждении на StackOverflow.

GMSMapView не загружается.

Если GMSMapView не загружается:

  • Убедитесь, что в Cloud Console включен Navigation SDK.
  • Если Navigation SDK установлен, но в проекте не используются его API, удалите его из двоичного файла.

Сеть

Как Navigation SDK справляется с плохим подключением?
Navigation SDK предварительно кеширует маршрут для каждой поездки. Предварительно кэшированная информация включает данные о маршруте на 15–20 минут и альтернативные маршруты на случай, если водитель отклонится от маршрута. Navigation SDK приблизительно определяет местоположение, используя GPS и датчики устройства.
Есть ли офлайн-режим?
Нет, в Navigation SDK пока нет офлайн-режима, но SDK предоставляет предварительно кешированную информацию о поездке.

Данные

Можно ли получить все остановки и пункты назначения в поездке до начала маршрута?

Да. Чтобы получить пошаговые инструкции для маршрута в Android, вызовите Navigator.getRouteSegments().

В iOS вызовите GMSNavigator.routeLegs(read).

Доступны ли пошаговые инструкции в начале маршрута?
Да. Navigation SDK предоставляет список сегментов маршрута. Кроме того, водитель может пролистать карточку с маршрутом в заголовке, чтобы посмотреть каждый маневр.
Как пользователи приложения узнают расчетное время прибытия?

Чтобы предоставить пользователям приложения информацию о расчетном времени прибытия, выполните следующие действия:

  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. Показывать расчетное время прибытия в конечный пункт назначения.
Как скрыть обновления расчетного времени прибытия?

Отключить карточки с информацией о времени прибытия можно следующими способами:

  • В Android используйте navigationView.setEtaCardEnabled(false).
  • В iOS используйте GMSMapView.settings.navigationFooterEnabled=NO.
Какие настройки интерфейса доступны для карточек верхнего и нижнего колонтитулов?

В Android для настройки цвета фона используется StylingOptions. Чтобы скрыть или показать верхний и нижний колонтитулы, используйте функции setHeaderEnabled и setFooterEnabled класса NavigationFragment.

В iOS используйте GMSMapView.settings.navigationHeaderPrimaryBackgroundColor, чтобы задать цвет фона. Чтобы скрыть или показать верхний и нижний колонтитулы, используйте свойства navigationFooterEnabled и navigationHeaderEnabled объекта GMSUISettings.

Составление маршрутов

Можно ли предоставить водителю определенный маршрут или удалить альтернативные маршруты?
Нет. По умолчанию предлагается несколько маршрутов, а самый быстрый из них имеет приоритет. Вы можете повлиять на маршрут по умолчанию, добавив в запрос предпочтения, например "избегать автомагистралей и платных дорог". Добавление путевых точек также влияет на маршрут.
Можно ли показывать пользователю приложения не стандартный ярлык пункта назначения, а другой?

Да. В 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. Получите доступ к новому маршруту, используя свойства routeLegs и currentRouteLeg объекта GMSNavigator.
Может ли водитель выйти из навигации, не завершив маршрут?

Да. В Android вызовите метод Navigator.stopGuidance(), чтобы остановить навигацию.

В iOS вызовите GMSNavigator.clearDestinations.

Поддерживает ли Navigation SDK прокладку маршрутов и навигацию для грузовиков и других крупных транспортных средств?

Да. При прокладке маршрутов для крупногабаритного транспорта вы можете передавать в Navigation SDK токены маршрутов для грузовиков, сгенерированные Routes API или Route Optimization API. SDK обеспечивает пошаговую навигацию с выносками маршрута (ограничения по высоте, весу, опасным материалам и грузовикам) и поддерживает физический профиль транспортного средства во время динамического изменения маршрута. Подробнее о навигации по маршрутам для крупногабаритного транспорта…

Симулятор

Поддерживает ли симулятор изменения маршрута?

Да. В Android вызовите simulateLocationsAlongNewRoute, чтобы смоделировать поездку, включающую изменение маршрута. Метод simulateLocationsAlongExistingRoute игнорирует изменения существующего маршрута.

В iOS используйте GMSLocationSimulator.simulateAlongNewRouteToDestinations, чтобы смоделировать поездку, включающую изменение маршрута. Если вы не ожидаете изменений маршрута, можно использовать GMSLocationSimulator.simulateLocationsAlongExistingRoute или GMSLocationSimulator.simulateAlongNewRouteToDestinations.

Рабочие процессы

Как убрать уведомление после закрытия действия, содержащего фрагмент навигации?

Уведомление о навигации остается видимым во время навигации, когда действие закрыто. Когда автомобиль прибывает в пункт назначения, навигация прекращается, а уведомление исчезает.

Чтобы обрабатывать клики по уведомлению, используйте Navigator.startGuidance(intent resumeIntent). resume intent активируется, когда пользователь нажимает на уведомление. Обычно Navigator.startguidance(getIntent()) вызывается из основного Activity, которое повторно вызывается, когда пользователь приложения нажимает на уведомление.

Сервисы мобильности

Чем отличается использование Navigation SDK для клиентов Mobility Services?

Сервисы платформы Google Карт для мобильности – это набор API и SDK, которые помогают транспортным и логистическим компаниям решать бизнес-задачи. Клиенты Mobility Services обычно используют Navigation SDK в сочетании с сопутствующими сервисами для оптимизации маршрутов, диспетчеризации, отслеживания задач, аналитики автопарка и т. д. Для клиентов Mobility Services также по-другому рассчитывается стоимость Navigation SDK. Подробную информацию можно найти в документации по Mobility Services.

Продукты Mobility доступны только некоторым клиентам. За дополнительной информацией обратитесь к своему представителю отдела продаж Google.

Как узнать, являюсь ли я клиентом Mobility Services?
Если вы не уверены, что используете Navigation SDK как клиент Mobility Services, поищите в коде вызов ReportBillableEvent. Вызывать метод ReportBillableEvent должны только клиенты Mobility Services.

Как оплачивается Navigation SDK для клиентов сервисов для транспортных компаний?
Для клиентов, использующих сервисы для мобильных устройств, оплата и цены на Navigation SDK зависят от соглашения о предоставлении услуг, заключенного с платформой Google Карт. Информацию о том, как проверить, правильно ли выставляются счета за использование Mobility Services, можно найти в статье Проверка платежных данных. Чтобы получить дополнительную информацию о выставлении счетов за Mobility Services, обратитесь к своему торговому представителю.

Какие API Navigation SDK должны использовать только клиенты сервисов мобильности?

В Navigation SDK есть несколько API, предназначенных только для клиентов Mobility Services, которые оплачивают услуги Google за каждую транзакцию. Если вы не являетесь клиентом Mobility Services, следующие методы не будут работать:

Если я клиент Mobility Services, могу ли я использовать реализацию Navigation SDK, не связанную с Mobility Services?

Да, клиенты Mobility Services могут использовать реализации Navigation SDK как для Mobility Services, так и для других сервисов. Однако в одном приложении можно использовать только один тип реализации. Вам также потребуется создать новый проект Google Cloud, платежный аккаунт и ключ API, отдельные от тех, которые вы используете с реализацией Mobility Services. Подробную информацию вы найдете в обзоре настройки Navigation SDK.

Чтобы узнать больше об использовании Navigation SDK без Mobility Services, в том числе о переносе приложения с одного типа реализации на другой, обратитесь к специалисту Google по работе с аккаунтом.

Примечание. Если вы не являетесь клиентом Mobility Services и хотите узнать больше о наборе API и SDK Mobility Services, обратитесь в отдел продаж платформы Google Карт.