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

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

Проблемы

Сеть

Данные

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

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

Симулятор

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

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

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

В приложении должно быть диалоговое окно с уведомлением об Условиях использования 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 не загружается:

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

Сеть

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

Данные

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

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

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

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

Чтобы показывать пользователям приложений для 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).

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

Можно ли выделить цветом лучший маршрут?
Нет. В настоящее время цветовая маркировка определенного варианта маршрута не поддерживается.
Может ли 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, которое повторно вызывает Activity, когда пользователь приложения нажимает на уведомление.

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

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

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

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

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

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

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

В Navigation SDK есть несколько API, предназначенных только для клиентов сервисов мобильности, которым 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 по работе с аккаунтом.

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