Siga este guia para traçar uma rota dentro do seu app para um único destino, usando o SDK do Navigation para iOS.
Visão geral
- Integre o SDK do Navigation ao seu app, conforme descrito na seção Configurar seu projeto.
- Configurar um
GMSMapView
. - Peça que o usuário aceite os Termos e Condições e autorize a localização e notificações em segundo plano.
- Crie uma matriz contendo um ou mais destinos.
Defina um
GMSNavigator
. para controlar a navegação guiada.- Adicione destinos usando
setDestinations
. - Definir
isGuidanceActive
paratrue
para iniciar a navegação. - Usar
simulateLocationsAlongExistingRoute
para simular o andamento do veículo ao longo do trajeto, para testes, depurar e demonstrar seu app.
- Adicione destinos usando
Achou o código?
Solicitar ao usuário as autorizações necessárias
Antes de usar o SDK do Navigation, o usuário precisa concordar com os do Google e autorizam o uso dos serviços de localização, que estão necessários para a navegação. Se o app for executado em segundo plano, ele também precisa solicitar que o usuário autorize as notificações de alerta de orientações. Esta seção mostra como exibir as solicitações de autorização necessárias.
Autorizar serviços de localização
O SDK do Navigation usa os Serviços de localização, que exigem autorização do usuário. Para ativar os Serviços de localização e exibir a autorização siga estas etapas:
- Adicione a chave
NSLocationAlwaysUsageDescription
aInfo.plist
. Para o valor, adicione uma breve explicação de por que seu app exige a localização serviços. Por exemplo: "Este app precisa de permissão para usar os serviços de localização para navegação guiada".
Para mostrar a caixa de diálogo de autorização, chame
requestAlwaysAuthorization()
de a instância do gerenciador de locais.
Swift
self.locationManager.requestAlwaysAuthorization()
Objective-C
[_locationManager requestAlwaysAuthorization];
Autorizar notificações de alerta para orientações em segundo plano
O SDK do Navigation precisa da permissão do usuário para fornecer alertas notificações quando o app está sendo executado em segundo plano. Adicione o seguinte código para solicitar permissão ao usuário para exibir essas notificações:
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");
}
}];
Aceite os Termos e Condições
Use o código a seguir para mostrar a caixa de diálogo de Termos e Condições e ative navegação quando o usuário aceitar os termos. Esse exemplo inclui o código dos serviços de localização e das notificações dos alertas (mostrado antes).
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.
}
}];
Criar um trajeto e iniciar as orientações
Para definir uma rota, chame o método setDestinations()
do navegador com uma matriz.
que contém um ou mais destinos (GMSNavigationWaypoint
) a serem visitados. Se for concluída
computada, a rota é exibida no mapa. Para iniciar a orientação ao longo do trajeto,
começando pelo primeiro destino, defina isGuidanceActive
como true
na
o retorno de chamada.
O exemplo abaixo mostra:
- Criar uma nova rota com dois destinos.
- Iniciando orientação.
- Ativando as notificações de orientações em segundo plano.
- Simular a viagem ao longo do trajeto (opcional).
- Ativar o modo da câmera para "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 saber mais sobre IDs de lugar, consulte IDs de lugar.
Escolher meio de transporte
O modo de viagem determina qual tipo de trajeto será buscado e a maneira o curso do usuário é determinado. Você pode definir um dos quatro modos de transporte para um trajeto: carro, bicicleta, caminhada e táxi. No modo carro e táxi, o percurso do usuário é com base na direção da viagem; no modo ciclismo e caminhada, o campo é representada pela direção para a qual o dispositivo está voltado.
Defina o travelMode
.
da visualização de mapa, conforme mostrado no exemplo a seguir:
Swift
self.mapView.travelMode = .cycling
Objective-C
_mapView.travelMode = GMSNavigationTravelModeCycling;
Definir vias a serem evitadas
Use as propriedades BOOL
avoidsHighways
e avoidsTolls
para evitar
rodovias e/ou vias com pedágio ao longo de um trajeto.
Swift
self.mapView.navigator?.avoidsTolls = true
Objective-C
_mapView.navigator.avoidsTolls = YES;
Localizador de ID de local
Você pode usar o Localizador de IDs de local.
para encontrar IDs de lugares a serem usados para destinos de rotas. Adicione um destino de uma placeID
com GMSNavigationWaypoint
.
Texto flutuante
É possível adicionar texto flutuante em qualquer lugar no app, desde que o SDK e atribuição de crédito não será coberta. O SDK do Navigation não oferece suporte à ancoragem do texto para uma latitude/longitude no mapa ou para um rótulo. Para mais informações, consulte Janelas de informações.