Sigue esta guía para trazar una ruta dentro de tu app hacia un destino único, con el SDK de Navigation para iOS.
Descripción general
- Integra el SDK de Navigation en tu app como se describe. en la sección Configura tu proyecto.
- Configura un
GMSMapView
. - Solicita al usuario que acepte los Términos y Condiciones y que autorice la ubicación servicios y notificaciones en segundo plano.
- Crea un array que contenga uno o más destinos.
Define un elemento
GMSNavigator
. para controlar la navegación paso a paso.- Para agregar destinos, usa
setDestinations
. - Establecer
isGuidanceActive
atrue
para iniciar la navegación. - Usa
simulateLocationsAlongExistingRoute
. para simular el progreso del vehículo a lo largo de la ruta, realizar pruebas depurar y demostrar tu app.
- Para agregar destinos, usa
Consulta el código
Solicita al usuario las autorizaciones necesarias.
Antes de usar el SDK de Navigation, el usuario debe aceptar las términos y condiciones, y autoriza el uso de servicios de ubicación, que es necesarias para la navegación. Si tu app se ejecutará en segundo plano, también debe le pedirán al usuario que autorice las notificaciones de alerta de orientación. En esta sección, se muestra cómo mostrar los mensajes de autorización requeridos.
Autorizar servicios de ubicación
El SDK de Navigation usa servicios de ubicación, lo que requiere la autorización del usuario. Para habilitar los servicios de ubicación y mostrar la autorización sigue estos pasos:
- Agrega la clave
NSLocationAlwaysUsageDescription
aInfo.plist
. Para el valor, agrega una breve explicación de por qué tu app requiere la ubicación de Google Cloud. Por ejemplo: "Esta app necesita permiso para usar los servicios de ubicación para navegación paso a paso."
Para mostrar el diálogo de autorización, llama a
requestAlwaysAuthorization()
de la instancia del administrador de ubicación.
Swift
self.locationManager.requestAlwaysAuthorization()
Objective-C
[_locationManager requestAlwaysAuthorization];
Autoriza las notificaciones de alerta para obtener orientación en segundo plano
El SDK de Navigation necesita permiso del usuario para proporcionar alertas cuando la app se ejecuta en segundo plano. Agrega el siguiente código a fin de solicitar permiso al usuario para mostrar estas notificaciones:
Swift
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");
}
}];
Acepta los Términos y Condiciones.
Usa el siguiente código para mostrar el diálogo de términos y condiciones y habilita la navegación cuando el usuario acepta los términos. Ten en cuenta que este ejemplo incluye el código para los servicios de ubicación y las notificaciones de alerta de orientación (que se muestra anteriormente).
Swift
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.
}
}];
Crea una ruta y comienza las indicaciones
Para trazar una ruta, llama al método setDestinations()
de Navigator con un array.
que contenga uno o más destinos (GMSNavigationWaypoint
) para visitar. Si se realiza con éxito
calculada, la ruta se muestra en el mapa. Para iniciar una guía a lo largo de la ruta,
que comienza con el primer destino, establece isGuidanceActive
en true
, en
devolución de llamada.
En el ejemplo siguiente:
- Creación de una ruta nueva con dos destinos
- Inicia la guía.
- Habilita las notificaciones de orientación en segundo plano.
- Simular viajes a lo largo de la ruta (opcional)
- Configuración del modo de cámara en "Seguir" (opcional).
Swift
func startNav() {
var destinations = [GMSNavigationWaypoint]()
destinations.append(GMSNavigationWaypoint.init(placeID: "ChIJnUYTpNASkFQR_gSty5kyoUk",
title: "PCC Natural Market")!)
destinations.append(GMSNavigationWaypoint.init(placeID:"ChIJJ326ROcSkFQRBfUzOL2DSbo",
title:"Marina Park")!)
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"],
[[GMSNavigationWaypoint alloc] initWithPlaceID:@"ChIJJ326ROcSkFQRBfUzOL2DSbo"
title:@"Marina Park"]];
[_mapView.navigator setDestinations:destinations
callback:^(GMSRouteStatus routeStatus){
[_mapView.locationSimulator simulateLocationsAlongExistingRoute];
_mapView.navigator.guidanceActive = YES;
_mapView.cameraMode = GMSNavigationCameraModeFollowing;
}];
}
Para obtener información sobre los IDs de lugar, consulta IDs de lugar.
Establecer medio de transporte
El modo de viaje determina qué tipo de ruta se recuperará y la forma en que está determinado el rumbo del usuario. Puedes establecer uno de los cuatro medios de transporte para una ruta: en automóvil, en bicicleta, a pie y en taxi. En el modo de conducción y taxi, el curso del usuario es según la dirección del viaje; en modo de ciclismo y caminata, el curso es representada por la dirección hacia la que está orientado el dispositivo.
Establece el elemento travelMode
.
propiedad de la vista de mapa, como se muestra en el siguiente ejemplo:
Swift
self.mapView.travelMode = .cycling
Objective-C
_mapView.travelMode = GMSNavigationTravelModeCycling;
Establecer las rutas que se deben evitar
Usa las propiedades avoidsHighways
y avoidsTolls
BOOL
para evitar
autopistas o peajes a lo largo de una ruta.
Swift
self.mapView.navigator?.avoidsTolls = true
Objective-C
_mapView.navigator.avoidsTolls = YES;
Buscador de PlaceID
Puedes usar el buscador de PlaceID
para buscar IDs de lugar que se usarán en los destinos de las rutas. Agrega un destino desde un objeto placeID
con GMSNavigationWaypoint
.
Texto flotante
Puedes agregar texto flotante en cualquier parte de tu app, siempre y cuando la etiqueta de Google la atribución no está cubierta. El SDK de Navigation no admite el anclado de las texto a una latitud y longitud en el mapa, o a una etiqueta. Para obtener más información, consulta Ventanas de información.