Следуйте этому руководству, чтобы проложить маршрут в вашем приложении к одной точке назначения, используя Navigation SDK для iOS.
Обзор
- Интегрируйте SDK навигации в ваше приложение, как описано в разделе «Настройка проекта» .
- Настройте
GMSMapView. - Предложите пользователю принять условия использования, а также разрешить использование служб определения местоположения и фоновых уведомлений.
- Создайте массив, содержащий одно или несколько мест назначения.
Создайте объект
GMSNavigatorдля управления пошаговой навигацией.- Добавьте пункты назначения, используя
setDestinations. - Установите параметр
isGuidanceActiveвtrue, чтобы начать навигацию. - Используйте функцию
simulateLocationsAlongExistingRouteдля имитации движения транспортного средства по маршруту в целях тестирования, отладки и демонстрации вашего приложения.
- Добавьте пункты назначения, используя
См. код
Запросите у пользователя необходимые разрешения.
Перед использованием Navigation SDK пользователь должен согласиться с условиями использования и разрешить использование служб определения местоположения, необходимых для навигации. Если ваше приложение будет работать в фоновом режиме, оно также должно запрашивать у пользователя разрешение на получение уведомлений о навигации. В этом разделе показано, как отображать необходимые запросы на авторизацию.
Авторизация служб определения местоположения
SDK навигации использует службы определения местоположения, что требует авторизации пользователя. Чтобы включить службы определения местоположения и отобразить диалоговое окно авторизации, выполните следующие действия:
- Добавьте ключ
NSLocationAlwaysUsageDescriptionвInfo.plist. В поле "Значение" добавьте краткое объяснение того, почему вашему приложению требуются службы определения местоположения. Например: "Этому приложению требуется разрешение на использование служб определения местоположения для пошаговой навигации".
Для отображения диалога авторизации вызовите метод
requestAlwaysAuthorization()экземпляра менеджера местоположений.
Быстрый
self.locationManager.requestAlwaysAuthorization()
Objective-C
[_locationManager requestAlwaysAuthorization];
Разрешить отправку уведомлений о справочной информации.
Для отображения уведомлений о событиях, происходящих в фоновом режиме, SDK навигации требуется разрешение пользователя. Добавьте следующий код, чтобы запросить у пользователя разрешение на отображение этих уведомлений:
Быстрый
UNUserNotificationCenter.current().requestAuthorization(options: [.alert]) {
granted, error in
// Handle denied authorization to display notifications.
if !granted || error != nil {
print("User rejected request to display notifications.")
}
}
Objective-C
// Request authorization for alert notifications.
UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
UNAuthorizationOptions options = UNAuthorizationOptionAlert;
[center requestAuthorizationWithOptions:options
completionHandler:
^(
BOOL granted,
NSError *_Nullable error) {
if (!error && granted) {
NSLog(@"iOS Notification Permission: newly Granted");
} else {
NSLog(@"iOS Notification Permission: Failed or Denied");
}
}];
Примите условия и положения.
Используйте следующий код, чтобы отобразить диалоговое окно с условиями использования и включить навигацию после того, как пользователь примет условия. Обратите внимание, что этот пример включает код для служб определения местоположения и уведомлений о навигации (показанных ранее).
Быстрый
let termsAndConditionsOptions = GMSNavigationTermsAndConditionsOptions(companyName: "Ride Sharing Co.")
GMSNavigationServices.showTermsAndConditionsDialogIfNeeded(
with: termsAndConditionsOptions) { termsAccepted in
if termsAccepted {
// Enable navigation if the user accepts the terms.
self.mapView.isNavigationEnabled = true
self.mapView.settings.compassButton = true
// Request authorization to use location services.
self.locationManager.requestAlwaysAuthorization()
// Request authorization for alert notifications which deliver guidance instructions
// in the background.
UNUserNotificationCenter.current().requestAuthorization(options: [.alert]) {
granted, error in
// Handle rejection of notification authorization.
if !granted || error != nil {
print("Authorization to deliver notifications was rejected.")
}
}
} else {
// Handle rejection of terms and conditions.
}
}
Objective-C
GMSNavigationTermsAndConditionsOptions *termsAndConditionsOptions = [[GMSNavigationTermsAndConditionsOptions alloc] initWithCompanyName:@"Ride Sharing Co."];
[GMSNavigationServices
showTermsAndConditionsDialogIfNeededWithOptions:termsAndConditionsOptions
callback:^(BOOL termsAccepted) {
if (termsAccepted) {
// Enable navigation if the user accepts the terms.
_mapView.navigationEnabled = YES;
_mapView.settings.compassButton = YES;
// Request authorization to use the current device location.
[_locationManager requestAlwaysAuthorization];
// Request authorization for alert notifications which deliver guidance instructions
// in the background.
UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
UNAuthorizationOptions options = UNAuthorizationOptionAlert;
[center requestAuthorizationWithOptions:options
completionHandler:
^(
BOOL granted,
NSError *_Nullable error) {
if (!error && granted) {
NSLog(@"iOS Notification Permission: newly Granted");
} else {
NSLog(@"iOS Notification Permission: Failed or Denied");
}
}];
} else {
// Handle rejection of the terms and conditions.
}
}];
Создайте маршрут и запустите навигацию.
Для построения маршрута вызовите метод setDestinations() объекта Navigator, передав массив из одного или нескольких пунктов назначения ( GMSNavigationWaypoint ), которые необходимо посетить. В случае успешного вычисления маршрут отобразится на карте. Чтобы начать движение по маршруту, установите значение isGuidanceActive в true в функции обратного вызова.
Следующий пример показывает:
- Создание нового маршрута с одним пунктом назначения.
- Начальные рекомендации.
- Включение фоновых уведомлений с инструкциями.
- Имитация поездки по маршруту (необязательно).
- Включение режима съемки "следование" (необязательно).
Быстрый
func startNav() {
var destinations = [GMSNavigationWaypoint]()
destinations.append(GMSNavigationWaypoint.init(placeID: "ChIJnUYTpNASkFQR_gSty5kyoUk",
title: "PCC Natural Market")!)
mapView.navigator?.setDestinations(destinations) { routeStatus in
self.mapView.navigator?.isGuidanceActive = true
self.mapView.locationSimulator?.simulateLocationsAlongExistingRoute()
self.mapView.cameraMode = .following
}
}
Objective-C
- (void)startNav {
NSArray<GMSNavigationWaypoint *> *destinations =
@[[[GMSNavigationWaypoint alloc] initWithPlaceID:@"ChIJnUYTpNASkFQR_gSty5kyoUk"
title:@"PCC Natural Market"],
[_mapView.navigator setDestinations:destinations
callback:^(GMSRouteStatus routeStatus){
[_mapView.locationSimulator simulateLocationsAlongExistingRoute];
_mapView.navigator.guidanceActive = YES;
_mapView.cameraMode = GMSNavigationCameraModeFollowing;
}];
}
Чтобы узнать больше об идентификаторах мест, обратитесь к разделу «Идентификаторы мест» .
Сценарии с несколькими остановками
Вы можете настроить максимум 25 путевых точек.
Метод setDestinations не поддерживает маршруты с несколькими остановками. Используйте continueToNextDestination() для перехода к следующему участку маршрута.
Установить режим путешествия
Режим передвижения определяет тип маршрута и способ прокладки пути пользователем. Для маршрута можно выбрать один из четырех режимов: автомобиль, велосипед, пешая прогулка и такси. В режимах «Автомобиль» и «Такси» путь пользователя определяется направлением движения; в режимах «Велосипед» и «Пешая прогулка» путь отображается направлением, в котором обращено устройство (в альбомной ориентации — к верхней части устройства).
Установите свойство travelMode для представления карты, как показано в следующем примере:
Быстрый
self.mapView.travelMode = .cycling
Objective-C
_mapView.travelMode = GMSNavigationTravelModeCycling;
Настройте дороги таким образом, чтобы их объезжали.
Используйте BOOL свойства avoidsHighways и avoidsTolls , чтобы избегать автомагистралей и/или платных дорог на маршруте.
Быстрый
self.mapView.navigator?.avoidsTolls = true
Objective-C
_mapView.navigator.avoidsTolls = YES;
Поиск PlaceID
С помощью инструмента PlaceID Finder вы можете найти идентификаторы мест, которые можно использовать в качестве пунктов назначения маршрута. Добавьте пункт назначения из placeID с помощью GMSNavigationWaypoint .
Плавающий текст
Вы можете добавлять плавающий текст в любое место вашего приложения, если при этом не скрыта атрибуция Google. SDK навигации не поддерживает привязку текста к широте/долготе на карте или к метке. Для получения дополнительной информации см. Информационные окна .